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/closure/converter.dart

Issue 2891053003: Add support for converted closures with explicit contexts to VM (Closed)
Patch Set: 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.closure.converter; 5 library kernel.transformations.closure.converter;
6 6
7 import '../../ast.dart' 7 import '../../ast.dart'
8 show 8 show
9 Arguments, 9 Arguments,
10 Block, 10 Block,
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 parent.body = initializerExpression; 225 parent.body = initializerExpression;
226 } else if (parent is FieldInitializer) { 226 } else if (parent is FieldInitializer) {
227 parent.value = initializerExpression; 227 parent.value = initializerExpression;
228 } else { 228 } else {
229 throw "Found unexpected node '${node.runtimeType}, expected a 'Let' " 229 throw "Found unexpected node '${node.runtimeType}, expected a 'Let' "
230 "or a 'FieldInitializer'."; 230 "or a 'FieldInitializer'.";
231 } 231 }
232 } 232 }
233 } 233 }
234 rewriter = null; 234 rewriter = null;
235 context = null;
235 // Transform constructor body. 236 // Transform constructor body.
236 FunctionNode function = node.function; 237 FunctionNode function = node.function;
237 if (function.body != null && function.body is! EmptyStatement) { 238 if (function.body != null && function.body is! EmptyStatement) {
238 setupContextForFunctionBody(function); 239 setupContextForFunctionBody(function);
239 VariableDeclaration self = thisAccess[currentMemberFunction]; 240 VariableDeclaration self = thisAccess[currentMemberFunction];
240 if (self != null) { 241 if (self != null) {
241 context.extend(self, new ThisExpression()); 242 context.extend(self, new ThisExpression());
242 } 243 }
243 node.function.accept(this); 244 node.function.accept(this);
244 resetContext(); 245 resetContext();
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 null, node.target, contextVariable, new NullLiteral()); 638 null, node.target, contextVariable, new NullLiteral());
638 expression.transformChildren(this); 639 expression.transformChildren(this);
639 return expression; 640 return expression;
640 } 641 }
641 return super.visitStaticGet(node); 642 return super.visitStaticGet(node);
642 } 643 }
643 644
644 TreeNode visitPropertyGet(PropertyGet node) { 645 TreeNode visitPropertyGet(PropertyGet node) {
645 Name tearOffName = tearOffGetterNames[node.name]; 646 Name tearOffName = tearOffGetterNames[node.name];
646 if (tearOffName != null) { 647 if (tearOffName != null) {
647 MethodInvocation replacement = new MethodInvocation( 648 PropertyGet replacement = new PropertyGet(node.receiver, tearOffName);
648 node.receiver, tearOffName, new Arguments(<Expression>[])); 649 return super.visitPropertyGet(replacement);
649 return super.visitMethodInvocation(replacement);
650 } 650 }
651 return super.visitPropertyGet(node); 651 return super.visitPropertyGet(node);
652 } 652 }
653 653
654 TreeNode visitCatch(Catch node) { 654 TreeNode visitCatch(Catch node) {
655 VariableDeclaration exception = node.exception; 655 VariableDeclaration exception = node.exception;
656 VariableDeclaration stackTrace = node.stackTrace; 656 VariableDeclaration stackTrace = node.stackTrace;
657 if (stackTrace != null && capturedVariables.contains(stackTrace)) { 657 if (stackTrace != null && capturedVariables.contains(stackTrace)) {
658 Block block = node.body = ensureBlock(node.body); 658 Block block = node.body = ensureBlock(node.body);
659 block.parent = node; 659 block.parent = node;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 newClassMembers.add(tearOffMethod); 877 newClassMembers.add(tearOffMethod);
878 878
879 resetContext(); 879 resetContext();
880 }); 880 });
881 } finally { 881 } finally {
882 currentMember = oldCurrentMember; 882 currentMember = oldCurrentMember;
883 currentMemberFunction = oldCurrentMemberFunction; 883 currentMemberFunction = oldCurrentMemberFunction;
884 } 884 }
885 } 885 }
886 } 886 }
OLDNEW
« no previous file with comments | « no previous file | pkg/kernel/test/closures/suite.dart » ('j') | runtime/vm/kernel_binary_flowgraph.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698