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

Side by Side Diff: pkg/fletchc/lib/src/closure_environment.dart

Issue 1450393002: Roll sdk dependency to 34357cdad108dcba734949bd13bd28c76ea285e0 (Closed) Base URL: git@github.com:dart-lang/fletch.git@master
Patch Set: Created 5 years, 1 month 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) 2015, the Fletch project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Fletch 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 library fletchc.closure_environment; 5 library fletchc.closure_environment;
6 6
7 import 'package:compiler/src/util/util.dart' show
8 SpannableAssertionFailure;
9
10 import 'package:compiler/src/resolution/semantic_visitor.dart'; 7 import 'package:compiler/src/resolution/semantic_visitor.dart';
11 8
12 import 'package:compiler/src/resolution/operators.dart' show 9 import 'package:compiler/src/resolution/operators.dart' show
13 AssignmentOperator, 10 AssignmentOperator,
14 BinaryOperator, 11 BinaryOperator,
15 IncDecOperator, 12 IncDecOperator,
16 UnaryOperator; 13 UnaryOperator;
17 14
18 import 'package:compiler/src/elements/elements.dart'; 15 import 'package:compiler/src/elements/elements.dart';
19 import 'package:compiler/src/resolution/resolution.dart'; 16 import 'package:compiler/src/resolution/tree_elements.dart';
17 import 'package:compiler/src/resolution/send_resolver.dart';
20 import 'package:compiler/src/tree/tree.dart'; 18 import 'package:compiler/src/tree/tree.dart';
21 import 'package:compiler/src/universe/universe.dart'; 19 import 'package:compiler/src/universe/selector.dart';
22 import 'package:compiler/src/util/util.dart' show Spannable; 20 import 'package:compiler/src/universe/call_structure.dart';
21 import 'package:compiler/src/diagnostics/spannable.dart' show
22 Spannable,
23 SpannableAssertionFailure;
23 import 'package:compiler/src/dart_types.dart'; 24 import 'package:compiler/src/dart_types.dart';
24 25
25 enum CaptureMode { 26 enum CaptureMode {
26 /** 27 /**
27 * If a local is marked [ByValue], the local is read in closures. 28 * If a local is marked [ByValue], the local is read in closures.
28 */ 29 */
29 ByValue, 30 ByValue,
30 31
31 /** 32 /**
32 * If a local is marked [ByReference], a write to the local can be observed 33 * If a local is marked [ByReference], a write to the local can be observed
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 ClosureVisitor(this.element, TreeElements elements) 94 ClosureVisitor(this.element, TreeElements elements)
94 : super(elements); 95 : super(elements);
95 96
96 SemanticSendVisitor get sendVisitor => this; 97 SemanticSendVisitor get sendVisitor => this;
97 SemanticDeclarationVisitor get declVisitor => this; 98 SemanticDeclarationVisitor get declVisitor => this;
98 99
99 ClosureEnvironment compute() { 100 ClosureEnvironment compute() {
100 assert(element.memberContext == element); 101 assert(element.memberContext == element);
101 assert(currentElement == null); 102 assert(currentElement == null);
102 currentElement = element; 103 currentElement = element;
103 if (element.node != null) element.node.accept(this); 104 if (element.node != null) element.resolvedAst.node.accept(this);
104 assert(currentElement == element); 105 assert(currentElement == element);
105 return closureEnvironment; 106 return closureEnvironment;
106 } 107 }
107 108
108 void visitNode(Node node) { 109 void visitNode(Node node) {
109 node.visitChildren(this); 110 node.visitChildren(this);
110 } 111 }
111 112
112 void visitVariableDefinitions(VariableDefinitions node) { 113 void visitVariableDefinitions(VariableDefinitions node) {
113 for (Node definition in node.definitions) { 114 for (Node definition in node.definitions) {
114 VariableElement element = elements[definition]; 115 VariableElement element = elements[definition];
115 Expression initializer = element.initializer; 116 Expression initializer = element.initializer;
116 if (initializer != null) initializer.accept(this); 117 if (initializer != null) initializer.accept(this);
117 } 118 }
118 } 119 }
119 120
120 void visitFunctionExpression(FunctionExpression node) { 121 void visitFunctionExpression(FunctionExpression node) {
121 ExecutableElement oldElement = currentElement; 122 ExecutableElement oldElement = currentElement;
122 currentElement = elements[node]; 123 currentElement = elements.getFunctionDefinition(node);
123 if (currentElement != element) { 124 if (currentElement != element) {
124 ClosureInfo info = new ClosureInfo(); 125 ClosureInfo info = new ClosureInfo();
125 closureEnvironment.closures[currentElement] = info; 126 closureEnvironment.closures[currentElement] = info;
126 } 127 }
127 if (currentElement.isConstructor) { 128 if (currentElement.isConstructor) {
128 inInitializers = true; 129 inInitializers = true;
129 visitInitializers(node, null); 130 visitInitializers(node, null);
130 inInitializers = false; 131 inInitializers = false;
131 } 132 }
132 node.body.accept(this); 133 node.body.accept(this);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 void handleLocalInvoke( 221 void handleLocalInvoke(
221 Send node, 222 Send node,
222 LocalElement element, 223 LocalElement element,
223 NodeList arguments, 224 NodeList arguments,
224 CallStructure callStructure, 225 CallStructure callStructure,
225 _) { 226 _) {
226 markUsed(element, CaptureMode.ByValue); 227 markUsed(element, CaptureMode.ByValue);
227 arguments.accept(this); 228 arguments.accept(this);
228 } 229 }
229 230
230 void visitThisPropertySet(Send node, Selector selector, Node rhs, _) { 231 void visitThisPropertySet(Send node, Name name, Node rhs, _) {
231 markThisUsed(); 232 markThisUsed();
232 super.visitThisPropertySet(node, selector, rhs, null); 233 super.visitThisPropertySet(node, name, rhs, null);
233 } 234 }
234 235
235 void visitLocalVariablePrefix( 236 void visitLocalVariablePrefix(
236 SendSet node, 237 SendSet node,
237 LocalVariableElement element, 238 LocalVariableElement element,
238 IncDecOperator operator, 239 IncDecOperator operator,
239 _) { 240 _) {
240 markUsed(element, CaptureMode.ByReference); 241 markUsed(element, CaptureMode.ByReference);
241 } 242 }
242 243
243 void visitLocalVariablePostfix( 244 void visitLocalVariablePostfix(
244 SendSet node, 245 SendSet node,
245 LocalVariableElement element, 246 LocalVariableElement element,
246 IncDecOperator operator, 247 IncDecOperator operator,
247 _) { 248 _) {
248 markUsed(element, CaptureMode.ByReference); 249 markUsed(element, CaptureMode.ByReference);
249 } 250 }
250 251
251 void visitThisPropertyInvoke( 252 void visitThisPropertyInvoke(
252 Send node, 253 Send node,
253 NodeList arguments, 254 NodeList arguments,
254 Selector selector, 255 Selector selector,
255 _) { 256 _) {
256 markThisUsed(); 257 markThisUsed();
257 arguments.accept(this); 258 arguments.accept(this);
258 } 259 }
259 260
260 void visitThisPropertyGet( 261 void visitThisPropertyGet(
261 Send node, 262 Send node,
262 Selector selector, 263 Name name,
263 _) { 264 _) {
264 markThisUsed(); 265 markThisUsed();
265 } 266 }
266 267
267 void visitThisGet(Node node, _) { 268 void visitThisGet(Node node, _) {
268 markThisUsed(); 269 markThisUsed();
269 } 270 }
270 271
271 void visitIs(Send node, Node expression, DartType type, _) { 272 void visitIs(Send node, Node expression, DartType type, _) {
272 // TODO(ajohnsen): Type is used ByValue. 273 // TODO(ajohnsen): Type is used ByValue.
273 expression.accept(this); 274 expression.accept(this);
274 } 275 }
275 276
276 void visitIsNot(Send node, Node expression, DartType type, _) { 277 void visitIsNot(Send node, Node expression, DartType type, _) {
277 // TODO(ajohnsen): Type is used ByValue. 278 // TODO(ajohnsen): Type is used ByValue.
278 expression.accept(this); 279 expression.accept(this);
279 } 280 }
280 281
281 void visitAs(Send node, Node expression, DartType type, _) { 282 void visitAs(Send node, Node expression, DartType type, _) {
282 // TODO(ajohnsen): Type is used ByValue. 283 // TODO(ajohnsen): Type is used ByValue.
283 expression.accept(this); 284 expression.accept(this);
284 } 285 }
285 286
286 void visitAssert(Send node, Node expression, _) { 287 void visitAssert(Assert node) {
287 // TODO(ajohnsen): Only visit in checked mode. 288 // TODO(ajohnsen): Only visit in checked mode.
288 expression.accept(this); 289 node.condition.accept(this);
290 node.message?.accept(this);
289 } 291 }
290 292
291 void visitLocalVariableCompound( 293 void visitLocalVariableCompound(
292 Send node, 294 Send node,
293 LocalVariableElement variable, 295 LocalVariableElement variable,
294 AssignmentOperator operator, 296 AssignmentOperator operator,
295 Node rhs, 297 Node rhs,
296 _) { 298 _) {
297 markUsed(variable, CaptureMode.ByReference); 299 markUsed(variable, CaptureMode.ByReference);
298 super.visitLocalVariableCompound(node, variable, operator, rhs, null); 300 super.visitLocalVariableCompound(node, variable, operator, rhs, null);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 FunctionElement function, 462 FunctionElement function,
461 Node index, 463 Node index,
462 Node rhs, 464 Node rhs,
463 _) { 465 _) {
464 markThisUsed(); 466 markThisUsed();
465 super.visitSuperIndexSet(node, function, index, rhs, null); 467 super.visitSuperIndexSet(node, function, index, rhs, null);
466 } 468 }
467 469
468 void visitThisPropertyCompound( 470 void visitThisPropertyCompound(
469 Send node, 471 Send node,
472 Name name,
470 AssignmentOperator operator, 473 AssignmentOperator operator,
471 Node rhs, 474 Node rhs,
472 Selector getterSelector,
473 Selector setterSelector,
474 _) { 475 _) {
475 markThisUsed(); 476 markThisUsed();
476 super.visitThisPropertyCompound( 477 super.visitThisPropertyCompound(
477 node, operator, rhs, getterSelector, setterSelector, null); 478 node, name, operator, rhs, null);
478 } 479 }
479 480
480 void visitParameterCompound( 481 void visitParameterCompound(
481 Send node, 482 Send node,
482 ParameterElement parameter, 483 ParameterElement parameter,
483 AssignmentOperator operator, 484 AssignmentOperator operator,
484 Node rhs, 485 Node rhs,
485 _) { 486 _) {
486 markUsed(parameter, CaptureMode.ByReference); 487 markUsed(parameter, CaptureMode.ByReference);
487 super.visitParameterCompound(node, parameter, operator, rhs, null); 488 super.visitParameterCompound(node, parameter, operator, rhs, null);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 Send node, 563 Send node,
563 ParameterElement parameter, 564 ParameterElement parameter,
564 IncDecOperator operator, 565 IncDecOperator operator,
565 _) { 566 _) {
566 markUsed(parameter, CaptureMode.ByReference); 567 markUsed(parameter, CaptureMode.ByReference);
567 super.visitParameterPrefix(node, parameter, operator, null); 568 super.visitParameterPrefix(node, parameter, operator, null);
568 } 569 }
569 570
570 void visitThisPropertyPrefix( 571 void visitThisPropertyPrefix(
571 Send node, 572 Send node,
573 Name name,
572 IncDecOperator operator, 574 IncDecOperator operator,
573 Selector getterSelector,
574 Selector setterSelector,
575 _) { 575 _) {
576 markThisUsed(); 576 markThisUsed();
577 super.visitThisPropertyPrefix( 577 super.visitThisPropertyPrefix(
578 node, operator, getterSelector, setterSelector, null); 578 node, name, operator, null);
579 } 579 }
580 580
581 void visitSuperFieldPrefix( 581 void visitSuperFieldPrefix(
582 Send node, 582 Send node,
583 FieldElement field, 583 FieldElement field,
584 IncDecOperator operator, 584 IncDecOperator operator,
585 _) { 585 _) {
586 markThisUsed(); 586 markThisUsed();
587 super.visitSuperFieldPrefix(node, field, operator, null); 587 super.visitSuperFieldPrefix(node, field, operator, null);
588 } 588 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 Send node, 651 Send node,
652 ParameterElement parameter, 652 ParameterElement parameter,
653 IncDecOperator operator, 653 IncDecOperator operator,
654 _) { 654 _) {
655 markUsed(parameter, CaptureMode.ByReference); 655 markUsed(parameter, CaptureMode.ByReference);
656 super.visitParameterPostfix(node, parameter, operator, null); 656 super.visitParameterPostfix(node, parameter, operator, null);
657 } 657 }
658 658
659 void visitThisPropertyPostfix( 659 void visitThisPropertyPostfix(
660 Send node, 660 Send node,
661 Name name,
661 IncDecOperator operator, 662 IncDecOperator operator,
662 Selector getterSelector,
663 Selector setterSelector,
664 _) { 663 _) {
665 markThisUsed(); 664 markThisUsed();
666 super.visitThisPropertyPostfix( 665 super.visitThisPropertyPostfix(
667 node, operator, getterSelector, setterSelector, null); 666 node, name, operator, null);
668 } 667 }
669 668
670 void visitSuperFieldPostfix( 669 void visitSuperFieldPostfix(
671 Send node, 670 Send node,
672 FieldElement field, 671 FieldElement field,
673 IncDecOperator operator, 672 IncDecOperator operator,
674 _) { 673 _) {
675 markThisUsed(); 674 markThisUsed();
676 super.visitSuperFieldPostfix(node, field, operator, null); 675 super.visitSuperFieldPostfix(node, field, operator, null);
677 } 676 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 FunctionElement indexFunction, 740 FunctionElement indexFunction,
742 FunctionElement indexSetFunction, 741 FunctionElement indexSetFunction,
743 Node index, 742 Node index,
744 IncDecOperator operator, 743 IncDecOperator operator,
745 _) { 744 _) {
746 markThisUsed(); 745 markThisUsed();
747 super.visitSuperIndexPrefix( 746 super.visitSuperIndexPrefix(
748 node, indexFunction, indexSetFunction, index, operator, null); 747 node, indexFunction, indexSetFunction, index, operator, null);
749 } 748 }
750 749
750 @override
751 void visitTypeAnnotation(TypeAnnotation node) {
Johnni Winther 2015/11/19 10:17:26 Add a comment about why this is needed.
sigurdm 2015/11/19 14:33:46 Done.
752 }
753
751 void handleImmutableLocalSet( 754 void handleImmutableLocalSet(
752 SendSet node, 755 SendSet node,
753 LocalElement element, 756 LocalElement element,
754 Node rhs, 757 Node rhs,
755 _) { 758 _) {
756 apply(rhs); 759 apply(rhs);
757 } 760 }
758 761
759 void bulkHandleNode(Node node, String message, _) { 762 void bulkHandleNode(Node node, String message, _) {
760 } 763 }
761 764
762 void applyInitializers(FunctionExpression initializers, _) { 765 void applyInitializers(FunctionExpression initializers, _) {
763 } 766 }
764 767
765 void applyParameters(NodeList parameters, _) { 768 void applyParameters(NodeList parameters, _) {
766 } 769 }
767 } 770 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698