Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: pkg/kernel/lib/transformations/continuation.dart

Issue 2905463002: Transform async code only for source libraries. (Closed)
Patch Set: Process only source libraries in KernelTarget. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library kernel.transformations.continuation; 5 library kernel.transformations.continuation;
6 6
7 import 'dart:math' as math; 7 import 'dart:math' as math;
8 8
9 import '../ast.dart'; 9 import '../ast.dart';
10 import '../core_types.dart'; 10 import '../core_types.dart';
11 import '../visitor.dart'; 11 import '../visitor.dart';
12 12
13 import 'async.dart'; 13 import 'async.dart';
14 14
15 void transformLibraries(CoreTypes coreTypes, List<Library> libraries) {
16 var helper = new HelperNodes.fromCoreTypes(coreTypes);
17 var rewriter = new RecursiveContinuationRewriter(helper);
18 for (var library in libraries) {
19 rewriter.rewriteLibrary(library);
20 }
21 }
22
15 Program transformProgram(Program program) { 23 Program transformProgram(Program program) {
16 var helper = new HelperNodes.fromProgram(program); 24 var helper = new HelperNodes.fromProgram(program);
17 var rewriter = new RecursiveContinuationRewriter(helper); 25 var rewriter = new RecursiveContinuationRewriter(helper);
18 return rewriter.rewriteProgram(program); 26 return rewriter.rewriteProgram(program);
19 } 27 }
20 28
21 class RecursiveContinuationRewriter extends Transformer { 29 class RecursiveContinuationRewriter extends Transformer {
22 final HelperNodes helper; 30 final HelperNodes helper;
23 final VariableDeclaration asyncJumpVariable = new VariableDeclaration( 31 final VariableDeclaration asyncJumpVariable = new VariableDeclaration(
24 ":await_jump_var", 32 ":await_jump_var",
25 initializer: new IntLiteral(0)); 33 initializer: new IntLiteral(0));
26 final VariableDeclaration asyncContextVariable = 34 final VariableDeclaration asyncContextVariable =
27 new VariableDeclaration(":await_ctx_var"); 35 new VariableDeclaration(":await_ctx_var");
28 36
29 RecursiveContinuationRewriter(this.helper); 37 RecursiveContinuationRewriter(this.helper);
30 38
31 Program rewriteProgram(Program node) { 39 Program rewriteProgram(Program node) {
32 return node.accept(this); 40 return node.accept(this);
33 } 41 }
34 42
43 Library rewriteLibrary(Library node) {
44 return node.accept(this);
45 }
46
35 visitFunctionNode(FunctionNode node) { 47 visitFunctionNode(FunctionNode node) {
36 switch (node.asyncMarker) { 48 switch (node.asyncMarker) {
37 case AsyncMarker.Sync: 49 case AsyncMarker.Sync:
38 case AsyncMarker.SyncYielding: 50 case AsyncMarker.SyncYielding:
39 node.transformChildren(new RecursiveContinuationRewriter(helper)); 51 node.transformChildren(new RecursiveContinuationRewriter(helper));
40 return node; 52 return node;
41 case AsyncMarker.SyncStar: 53 case AsyncMarker.SyncStar:
42 return new SyncStarFunctionRewriter(helper, node).rewrite(); 54 return new SyncStarFunctionRewriter(helper, node).rewrite();
43 case AsyncMarker.Async: 55 case AsyncMarker.Async:
44 return new AsyncFunctionRewriter(helper, node).rewrite(); 56 return new AsyncFunctionRewriter(helper, node).rewrite();
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 this.completerConstructor, 917 this.completerConstructor,
906 this.syncIterableConstructor, 918 this.syncIterableConstructor,
907 this.streamIteratorConstructor, 919 this.streamIteratorConstructor,
908 this.futureMicrotaskConstructor, 920 this.futureMicrotaskConstructor,
909 this.streamControllerConstructor, 921 this.streamControllerConstructor,
910 this.asyncThenWrapper, 922 this.asyncThenWrapper,
911 this.asyncErrorWrapper, 923 this.asyncErrorWrapper,
912 this.awaitHelper, 924 this.awaitHelper,
913 this.coreTypes); 925 this.coreTypes);
914 926
915 factory HelperNodes.fromProgram(Program program) { 927 factory HelperNodes.fromCoreTypes(CoreTypes coreTypes) {
916 var coreTypes = new CoreTypes(program);
917 return new HelperNodes( 928 return new HelperNodes(
918 coreTypes.asyncLibrary, 929 coreTypes.asyncLibrary,
919 coreTypes.coreLibrary, 930 coreTypes.coreLibrary,
920 coreTypes.iteratorClass, 931 coreTypes.iteratorClass,
921 coreTypes.futureClass, 932 coreTypes.futureClass,
922 coreTypes.futureOrClass, 933 coreTypes.futureOrClass,
923 coreTypes.completerClass, 934 coreTypes.completerClass,
924 coreTypes.printProcedure, 935 coreTypes.printProcedure,
925 coreTypes.completerSyncConstructor, 936 coreTypes.completerSyncConstructor,
926 coreTypes.syncIterableDefaultConstructor, 937 coreTypes.syncIterableDefaultConstructor,
927 coreTypes.streamIteratorDefaultConstructor, 938 coreTypes.streamIteratorDefaultConstructor,
928 coreTypes.futureMicrotaskConstructor, 939 coreTypes.futureMicrotaskConstructor,
929 coreTypes.asyncStarStreamControllerDefaultConstructor, 940 coreTypes.asyncStarStreamControllerDefaultConstructor,
930 coreTypes.asyncThenWrapperHelperProcedure, 941 coreTypes.asyncThenWrapperHelperProcedure,
931 coreTypes.asyncErrorWrapperHelperProcedure, 942 coreTypes.asyncErrorWrapperHelperProcedure,
932 coreTypes.awaitHelperProcedure, 943 coreTypes.awaitHelperProcedure,
933 coreTypes); 944 coreTypes);
934 } 945 }
946
947 factory HelperNodes.fromProgram(Program program) {
948 var coreTypes = new CoreTypes(program);
949 return new HelperNodes.fromCoreTypes(coreTypes);
950 }
935 } 951 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698