@@ -11,6 +11,7 @@ import 'package:front_end/src/api_unstable/dart2js.dart'
1111
1212import '../compiler_new.dart' as api;
1313import 'backend_strategy.dart' ;
14+ import 'common/codegen.dart' ;
1415import 'common/names.dart' show Selectors, Uris;
1516import 'common/tasks.dart' show CompilerTask, GenericTask, Measurer;
1617import 'common/work.dart' show WorkItem;
@@ -171,7 +172,8 @@ abstract class Compiler {
171172 enqueuer,
172173 dumpInfoTask = new DumpInfoTask (this ),
173174 selfTask,
174- serializationTask = new SerializationTask (this , measurer),
175+ serializationTask = new SerializationTask (
176+ options, reporter, provider, outputProvider, measurer),
175177 ];
176178
177179 tasks.addAll (backend.tasks);
@@ -227,13 +229,14 @@ abstract class Compiler {
227229 reporter.log ('Compiling $uri (${options .buildId })' );
228230
229231 if (options.readDataUri != null ) {
230- GlobalTypeInferenceResults results =
231- await serializationTask.deserialize ();
232+ GlobalTypeInferenceResults globalTypeInferenceResults =
233+ await serializationTask.deserializeGlobalTypeInference (
234+ environment, abstractValueStrategy);
232235 if (options.debugGlobalInference) {
233- performGlobalTypeInference (results .closedWorld);
236+ performGlobalTypeInference (globalTypeInferenceResults .closedWorld);
234237 return ;
235238 }
236- emitJavaScriptCode (results );
239+ await generateJavaScriptCode (globalTypeInferenceResults );
237240 } else {
238241 KernelResult result = await kernelLoader.load (uri);
239242 reporter.log ("Kernel load complete" );
@@ -263,6 +266,31 @@ abstract class Compiler {
263266 }
264267 }
265268
269+ void generateJavaScriptCode (
270+ GlobalTypeInferenceResults globalTypeInferenceResults) async {
271+ JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
272+ backendStrategy.registerJClosedWorld (closedWorld);
273+ if (options.showInternalProgress) reporter.log ('Compiling...' );
274+ phase = PHASE_COMPILING ;
275+ CodegenInputs codegenInputs =
276+ backend.onCodegenStart (globalTypeInferenceResults);
277+
278+ if (options.readCodegenUri != null ) {
279+ CodegenResults codegenResults =
280+ await serializationTask.deserializeCodegen (
281+ backendStrategy, globalTypeInferenceResults, codegenInputs);
282+ runCodegenEnqueuer (codegenResults);
283+ } else {
284+ CodegenResults codegenResults = new OnDemandCodegenResults (
285+ globalTypeInferenceResults, codegenInputs, backend.functionCompiler);
286+ if (options.writeCodegenUri != null ) {
287+ serializationTask.serializeCodegen (backendStrategy, codegenResults);
288+ } else {
289+ runCodegenEnqueuer (codegenResults);
290+ }
291+ }
292+ }
293+
266294 /// Clear the internal compiler state to prevent memory leaks when invoking
267295 /// the compiler multiple times (e.g. in batch mode).
268296 // TODO(ahe): implement a better mechanism where we can store
@@ -355,15 +383,13 @@ abstract class Compiler {
355383 mainFunction, closedWorld, inferredDataBuilder);
356384 }
357385
358- void emitJavaScriptCode (GlobalTypeInferenceResults globalInferenceResults) {
386+ void runCodegenEnqueuer (CodegenResults codegenResults) {
387+ GlobalTypeInferenceResults globalInferenceResults =
388+ codegenResults.globalTypeInferenceResults;
359389 JClosedWorld closedWorld = globalInferenceResults.closedWorld;
360- backendStrategy.registerJClosedWorld (closedWorld);
361- if (options.showInternalProgress) reporter.log ('Compiling...' );
362- phase = PHASE_COMPILING ;
363-
364- CodegenInputs codegen = backend.onCodegenStart (globalInferenceResults);
390+ CodegenInputs codegenInputs = codegenResults.codegenInputs;
365391 Enqueuer codegenEnqueuer = enqueuer.createCodegenEnqueuer (
366- closedWorld, globalInferenceResults, codegen );
392+ closedWorld, globalInferenceResults, codegenInputs, codegenResults );
367393 _codegenWorldBuilder = codegenEnqueuer.worldBuilder;
368394
369395 FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction;
@@ -375,14 +401,14 @@ abstract class Compiler {
375401 codegenWorldForTesting = codegenWorld;
376402 }
377403 int programSize = backend.assembleProgram (closedWorld,
378- globalInferenceResults.inferredData, codegen , codegenWorld);
404+ globalInferenceResults.inferredData, codegenInputs , codegenWorld);
379405
380406 if (options.dumpInfo) {
381407 dumpInfoTask.reportSize (programSize);
382408 dumpInfoTask.dumpInfo (closedWorld, globalInferenceResults);
383409 }
384410
385- backend.onCodegenEnd (codegen );
411+ backend.onCodegenEnd (codegenInputs );
386412
387413 checkQueue (codegenEnqueuer);
388414 }
@@ -397,7 +423,8 @@ abstract class Compiler {
397423 GlobalTypeInferenceResults globalInferenceResults =
398424 performGlobalTypeInference (closedWorld);
399425 if (options.writeDataUri != null ) {
400- serializationTask.serialize (globalInferenceResults);
426+ serializationTask
427+ .serializeGlobalTypeInference (globalInferenceResults);
401428 return ;
402429 }
403430 if (options.testMode) {
@@ -415,7 +442,7 @@ abstract class Compiler {
415442 worldData);
416443 }
417444 if (stopAfterTypeInference) return ;
418- emitJavaScriptCode (globalInferenceResults);
445+ generateJavaScriptCode (globalInferenceResults);
419446 }
420447 });
421448 }
0 commit comments