@@ -74,6 +74,7 @@ const int kNotifyIsolateShutdownTag = 6;
74
74
bool allowDartInternalImport = false ;
75
75
76
76
abstract class Compiler {
77
+ final int isolateId;
77
78
final FileSystem fileSystem;
78
79
final Uri platformKernelPath;
79
80
final bool suppressWarnings;
@@ -91,7 +92,7 @@ abstract class Compiler {
91
92
92
93
CompilerOptions options;
93
94
94
- Compiler (this .fileSystem, this .platformKernelPath,
95
+ Compiler (this .isolateId, this . fileSystem, this .platformKernelPath,
95
96
{this .suppressWarnings: false ,
96
97
this .enableAsserts: false ,
97
98
this .experimentalFlags: null ,
@@ -162,6 +163,12 @@ abstract class Compiler {
162
163
CompilerResult compilerResult = await compileInternal (script);
163
164
Component component = compilerResult.component;
164
165
166
+ if (errors.isEmpty) {
167
+ // Record dependencies only if compilation was error free, and before
168
+ // createFreshComponentWithBytecode drops the uriToSource table.
169
+ _recordDependencies (isolateId, component, options.packagesFileUri);
170
+ }
171
+
165
172
if (options.bytecode && errors.isEmpty) {
166
173
await runWithFrontEndCompilerContext (script, options, component, () {
167
174
// TODO(alexmarkov): disable local variables info,
@@ -250,13 +257,14 @@ class FileSink implements Sink<List<int>> {
250
257
class IncrementalCompilerWrapper extends Compiler {
251
258
IncrementalCompiler generator;
252
259
253
- IncrementalCompilerWrapper (FileSystem fileSystem, Uri platformKernelPath,
260
+ IncrementalCompilerWrapper (
261
+ int isolateId, FileSystem fileSystem, Uri platformKernelPath,
254
262
{bool suppressWarnings: false ,
255
263
bool enableAsserts: false ,
256
264
List <String > experimentalFlags: null ,
257
265
bool bytecode: false ,
258
266
String packageConfig: null })
259
- : super (fileSystem, platformKernelPath,
267
+ : super (isolateId, fileSystem, platformKernelPath,
260
268
suppressWarnings: suppressWarnings,
261
269
enableAsserts: enableAsserts,
262
270
experimentalFlags: experimentalFlags,
@@ -281,7 +289,7 @@ class IncrementalCompilerWrapper extends Compiler {
281
289
282
290
Future <IncrementalCompilerWrapper > clone (int isolateId) async {
283
291
IncrementalCompilerWrapper clone = IncrementalCompilerWrapper (
284
- fileSystem, platformKernelPath,
292
+ isolateId, fileSystem, platformKernelPath,
285
293
suppressWarnings: suppressWarnings,
286
294
enableAsserts: enableAsserts,
287
295
experimentalFlags: experimentalFlags,
@@ -309,14 +317,15 @@ class IncrementalCompilerWrapper extends Compiler {
309
317
class SingleShotCompilerWrapper extends Compiler {
310
318
final bool requireMain;
311
319
312
- SingleShotCompilerWrapper (FileSystem fileSystem, Uri platformKernelPath,
320
+ SingleShotCompilerWrapper (
321
+ int isolateId, FileSystem fileSystem, Uri platformKernelPath,
313
322
{this .requireMain: false ,
314
323
bool suppressWarnings: false ,
315
324
bool enableAsserts: false ,
316
325
List <String > experimentalFlags: null ,
317
326
bool bytecode: false ,
318
327
String packageConfig: null })
319
- : super (fileSystem, platformKernelPath,
328
+ : super (isolateId, fileSystem, platformKernelPath,
320
329
suppressWarnings: suppressWarnings,
321
330
enableAsserts: enableAsserts,
322
331
experimentalFlags: experimentalFlags,
@@ -373,7 +382,8 @@ Future<Compiler> lookupOrBuildNewIncrementalCompiler(int isolateId,
373
382
// destroyed when corresponding isolate is shut down. To achieve that kernel
374
383
// isolate needs to receive a message indicating that particular
375
384
// isolate was shut down. Message should be handled here in this script.
376
- compiler = new IncrementalCompilerWrapper (fileSystem, platformKernelPath,
385
+ compiler = new IncrementalCompilerWrapper (
386
+ isolateId, fileSystem, platformKernelPath,
377
387
suppressWarnings: suppressWarnings,
378
388
enableAsserts: enableAsserts,
379
389
experimentalFlags: experimentalFlags,
@@ -476,7 +486,7 @@ Future _processExpressionCompilationRequest(request) async {
476
486
}
477
487
478
488
void _recordDependencies (
479
- int isolateId, Component component, String packageConfig) {
489
+ int isolateId, Component component, Uri packageConfig) {
480
490
final dependencies = isolateDependencies[isolateId] ?? = new List <Uri >();
481
491
482
492
if (component != null ) {
@@ -497,7 +507,7 @@ void _recordDependencies(
497
507
}
498
508
499
509
if (packageConfig != null ) {
500
- dependencies.add (Uri . parse ( packageConfig) );
510
+ dependencies.add (packageConfig);
501
511
}
502
512
}
503
513
@@ -653,7 +663,8 @@ Future _processLoadRequest(request) async {
653
663
} else {
654
664
FileSystem fileSystem = _buildFileSystem (
655
665
sourceFiles, platformKernel, multirootFilepaths, multirootScheme);
656
- compiler = new SingleShotCompilerWrapper (fileSystem, platformKernelPath,
666
+ compiler = new SingleShotCompilerWrapper (
667
+ isolateId, fileSystem, platformKernelPath,
657
668
requireMain: false ,
658
669
suppressWarnings: suppressWarnings,
659
670
enableAsserts: enableAsserts,
@@ -678,8 +689,6 @@ Future _processLoadRequest(request) async {
678
689
result = new CompilationResult .errors (compiler.errors, null );
679
690
}
680
691
} else {
681
- // Record dependencies only if compilation was error free.
682
- _recordDependencies (isolateId, component, packageConfig);
683
692
// We serialize the component excluding vm_platform.dill because the VM has
684
693
// these sources built-in. Everything loaded as a summary in
685
694
// [kernelForProgram] is marked `external`, so we can use that bit to
0 commit comments