OLD | NEW |
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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 body = new Block(<Statement>[body]); | 229 body = new Block(<Statement>[body]); |
230 function.body = function.body.parent = body; | 230 function.body = function.body.parent = body; |
231 } | 231 } |
232 return new BlockRewriter(body); | 232 return new BlockRewriter(body); |
233 } | 233 } |
234 | 234 |
235 bool isObject(DartType type) { | 235 bool isObject(DartType type) { |
236 return type is InterfaceType && type.classNode.supertype == null; | 236 return type is InterfaceType && type.classNode.supertype == null; |
237 } | 237 } |
238 | 238 |
| 239 TreeNode visitField(Field node) { |
| 240 currentMember = node; |
| 241 context = new NoContext(this); |
| 242 node = super.visitField(node); |
| 243 context = null; |
| 244 currentMember = null; |
| 245 return node; |
| 246 } |
| 247 |
239 Expression handleLocalFunction(FunctionNode function) { | 248 Expression handleLocalFunction(FunctionNode function) { |
240 FunctionNode enclosingFunction = currentFunction; | 249 FunctionNode enclosingFunction = currentFunction; |
241 Map<TypeParameter, DartType> enclosingTypeSubstitution = typeSubstitution; | 250 Map<TypeParameter, DartType> enclosingTypeSubstitution = typeSubstitution; |
242 currentFunction = function; | 251 currentFunction = function; |
243 Statement body = function.body; | 252 Statement body = function.body; |
244 assert(body != null); | 253 assert(body != null); |
245 | 254 |
246 rewriter = makeRewriterForBody(function); | 255 rewriter = makeRewriterForBody(function); |
247 | 256 |
248 VariableDeclaration contextVariable = | 257 VariableDeclaration contextVariable = |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 .forEach(extendContextWith); | 432 .forEach(extendContextWith); |
424 assert(node.body != null); | 433 assert(node.body != null); |
425 node.body = node.body.accept(this); | 434 node.body = node.body.accept(this); |
426 node.body.parent = node; | 435 node.body.parent = node; |
427 return node; | 436 return node; |
428 } | 437 } |
429 | 438 |
430 TreeNode visitBlock(Block node) { | 439 TreeNode visitBlock(Block node) { |
431 return saveContext(() { | 440 return saveContext(() { |
432 BlockRewriter blockRewriter = rewriter = rewriter.forNestedBlock(node); | 441 BlockRewriter blockRewriter = rewriter = rewriter.forNestedBlock(node); |
433 blockRewriter.transformStatements(node, this); | 442 blockRewriter.transformStatements(this); |
434 return node; | 443 return node; |
435 }); | 444 }); |
436 } | 445 } |
437 | 446 |
438 TreeNode visitVariableDeclaration(VariableDeclaration node) { | 447 TreeNode visitVariableDeclaration(VariableDeclaration node) { |
439 node.transformChildren(this); | 448 node.transformChildren(this); |
440 | 449 |
441 if (!capturedVariables.contains(node)) return node; | 450 if (!capturedVariables.contains(node)) return node; |
442 if (node.initializer == null && node.parent is FunctionNode) { | 451 if (node.initializer == null && node.parent is FunctionNode) { |
443 // If the variable is a function parameter and doesn't have an | 452 // If the variable is a function parameter and doesn't have an |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 copy.function.body.parent = copy.function; | 702 copy.function.body.parent = copy.function; |
694 return copy; | 703 return copy; |
695 } | 704 } |
696 | 705 |
697 void addGetterForwarder(Name name, Procedure getter) { | 706 void addGetterForwarder(Name name, Procedure getter) { |
698 assert(getter.isGetter); | 707 assert(getter.isGetter); |
699 newClassMembers | 708 newClassMembers |
700 .add(copyWithBody(getter, forwardToThisProperty(getter))..name = name); | 709 .add(copyWithBody(getter, forwardToThisProperty(getter))..name = name); |
701 } | 710 } |
702 } | 711 } |
OLD | NEW |