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

Side by Side Diff: pkg/compiler/lib/src/resolution/tree_elements.dart

Issue 1182913003: Split TypedSelector into Selector and TypeMask. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 part of resolution; 5 part of resolution;
6 6
7 abstract class TreeElements { 7 abstract class TreeElements {
8 AnalyzableElement get analyzedElement; 8 AnalyzableElement get analyzedElement;
9 Iterable<Node> get superUses; 9 Iterable<Node> get superUses;
10 10
11 /// Iterables of the dependencies that this [TreeElement] records of 11 /// Iterables of the dependencies that this [TreeElement] records of
12 /// [analyzedElement]. 12 /// [analyzedElement].
13 Iterable<Element> get allElements; 13 Iterable<Element> get allElements;
14 void forEachConstantNode(f(Node n, ConstantExpression c)); 14 void forEachConstantNode(f(Node n, ConstantExpression c));
15 15
16 /// A set of additional dependencies. See [registerDependency] below. 16 /// A set of additional dependencies. See [registerDependency] below.
17 Iterable<Element> get otherDependencies; 17 Iterable<Element> get otherDependencies;
18 18
19 Element operator[](Node node); 19 Element operator[](Node node);
20 20
21 SendStructure getSendStructure(Send send); 21 SendStructure getSendStructure(Send send);
22 22
23 // TODO(johnniwinther): Investigate whether [Node] could be a [Send]. 23 // TODO(johnniwinther): Investigate whether [Node] could be a [Send].
24 Selector getSelector(Node node); 24 Selector getSelector(Node node);
25 Selector getGetterSelectorInComplexSendSet(SendSet node); 25 Selector getGetterSelectorInComplexSendSet(SendSet node);
26 Selector getOperatorSelectorInComplexSendSet(SendSet node); 26 Selector getOperatorSelectorInComplexSendSet(SendSet node);
27 DartType getType(Node node); 27 DartType getType(Node node);
28 void setSelector(Node node, Selector selector); 28 TypeMask getTypeMask(Node node);
29 void setGetterSelectorInComplexSendSet(SendSet node, Selector selector); 29 TypeMask getGetterTypeMaskInComplexSendSet(SendSet node);
30 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector); 30 TypeMask getOperatorTypeMaskInComplexSendSet(SendSet node);
31 void setTypeMask(Node node, TypeMask mask);
32 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
33 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
31 34
32 /// Returns the for-in loop variable for [node]. 35 /// Returns the for-in loop variable for [node].
33 Element getForInVariable(ForIn node); 36 Element getForInVariable(ForIn node);
34 Selector getIteratorSelector(ForIn node); 37 Selector getIteratorSelector(ForIn node);
35 Selector getMoveNextSelector(ForIn node); 38 Selector getMoveNextSelector(ForIn node);
36 Selector getCurrentSelector(ForIn node); 39 Selector getCurrentSelector(ForIn node);
37 void setIteratorSelector(ForIn node, Selector selector); 40 TypeMask getIteratorTypeMask(ForIn node);
38 void setMoveNextSelector(ForIn node, Selector selector); 41 TypeMask getMoveNextTypeMask(ForIn node);
39 void setCurrentSelector(ForIn node, Selector selector); 42 TypeMask getCurrentTypeMask(ForIn node);
43 void setIteratorTypeMask(ForIn node, TypeMask mask);
44 void setMoveNextTypeMask(ForIn node, TypeMask mask);
45 void setCurrentTypeMask(ForIn node, TypeMask mask);
40 void setConstant(Node node, ConstantExpression constant); 46 void setConstant(Node node, ConstantExpression constant);
41 ConstantExpression getConstant(Node node); 47 ConstantExpression getConstant(Node node);
42 bool isAssert(Send send); 48 bool isAssert(Send send);
43 49
44 /// Returns the [FunctionElement] defined by [node]. 50 /// Returns the [FunctionElement] defined by [node].
45 FunctionElement getFunctionDefinition(FunctionExpression node); 51 FunctionElement getFunctionDefinition(FunctionExpression node);
46 52
47 /// Returns target constructor for the redirecting factory body [node]. 53 /// Returns target constructor for the redirecting factory body [node].
48 ConstructorElement getRedirectingTargetConstructor( 54 ConstructorElement getRedirectingTargetConstructor(
49 RedirectingFactoryBody node); 55 RedirectingFactoryBody node);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 /// Returns the jump target of the [node]. 88 /// Returns the jump target of the [node].
83 JumpTarget getTargetOf(GotoStatement node); 89 JumpTarget getTargetOf(GotoStatement node);
84 90
85 /// Returns the label defined by [node]. 91 /// Returns the label defined by [node].
86 LabelDefinition getLabelDefinition(Label node); 92 LabelDefinition getLabelDefinition(Label node);
87 93
88 /// Returns the label that [node] targets. 94 /// Returns the label that [node] targets.
89 LabelDefinition getTargetLabel(GotoStatement node); 95 LabelDefinition getTargetLabel(GotoStatement node);
90 } 96 }
91 97
92 class TreeElementMapping implements TreeElements { 98 class TreeElementMapping extends TreeElements {
93 final AnalyzableElement analyzedElement; 99 final AnalyzableElement analyzedElement;
94 Map<Spannable, Selector> _selectors; 100 Map<Spannable, Selector> _selectors;
101 Map<Spannable, TypeMask> _typeMasks;
95 Map<Node, DartType> _types; 102 Map<Node, DartType> _types;
96 Setlet<Node> _superUses; 103 Setlet<Node> _superUses;
97 Setlet<Element> _otherDependencies; 104 Setlet<Element> _otherDependencies;
98 Map<Node, ConstantExpression> _constants; 105 Map<Node, ConstantExpression> _constants;
99 Map<VariableElement, List<Node>> _potentiallyMutated; 106 Map<VariableElement, List<Node>> _potentiallyMutated;
100 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn; 107 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn;
101 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure; 108 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure;
102 Map<Node, Map<VariableElement, List<Node>>> _accessedByClosureIn; 109 Map<Node, Map<VariableElement, List<Node>>> _accessedByClosureIn;
103 Setlet<Element> _elements; 110 Setlet<Element> _elements;
104 Setlet<Send> _asserts; 111 Setlet<Send> _asserts;
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 if (_targetLabels == null) { 441 if (_targetLabels == null) {
435 _targetLabels = new Maplet<GotoStatement, LabelDefinition>(); 442 _targetLabels = new Maplet<GotoStatement, LabelDefinition>();
436 } 443 }
437 _targetLabels[node] = label; 444 _targetLabels[node] = label;
438 } 445 }
439 446
440 LabelDefinition getTargetLabel(GotoStatement node) { 447 LabelDefinition getTargetLabel(GotoStatement node) {
441 assert(node.target != null); 448 assert(node.target != null);
442 return _targetLabels != null ? _targetLabels[node] : null; 449 return _targetLabels != null ? _targetLabels[node] : null;
443 } 450 }
451
452 TypeMask _getTypeMask(Spannable node) {
453 return _typeMasks != null ? _typeMasks[node] : null;
454 }
455
456 void _setTypeMask(Spannable node, TypeMask mask) {
457 if (_typeMasks == null) {
458 _typeMasks = new Maplet<Spannable, TypeMask>();
459 }
460 _typeMasks[node] = mask;
461 }
462
463 void setTypeMask(Node node, TypeMask mask) {
464 _setTypeMask(node, mask);
465 }
466
467 TypeMask getTypeMask(Node node) => _getTypeMask(node);
468
469 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask) {
470 _setTypeMask(node.selector, mask);
471 }
472
473 TypeMask getGetterTypeMaskInComplexSendSet(SendSet node) {
474 return _getTypeMask(node.selector);
475 }
476
477 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask) {
478 _setTypeMask(node.assignmentOperator, mask);
479 }
480
481 TypeMask getOperatorTypeMaskInComplexSendSet(SendSet node) {
482 return _getTypeMask(node.assignmentOperator);
483 }
484
485 // The following methods set selectors on the "for in" node. Since
486 // we're using three selectors, we need to use children of the node,
487 // and we arbitrarily choose which ones.
488
489 void setIteratorTypeMask(ForIn node, TypeMask mask) {
490 _setTypeMask(node, mask);
491 }
492
493 TypeMask getIteratorTypeMask(ForIn node) {
494 return _getTypeMask(node);
495 }
496
497 void setMoveNextTypeMask(ForIn node, TypeMask mask) {
498 _setTypeMask(node.forToken, mask);
499 }
500
501 TypeMask getMoveNextTypeMask(ForIn node) {
502 return _getTypeMask(node.forToken);
503 }
504
505 void setCurrentTypeMask(ForIn node, TypeMask mask) {
506 _setTypeMask(node.inToken, mask);
507 }
508
509 TypeMask getCurrentTypeMask(ForIn node) {
510 return _getTypeMask(node.inToken);
511 }
444 } 512 }
445 513
446 TreeElements _ensureTreeElements(AnalyzableElementX element) { 514 TreeElements _ensureTreeElements(AnalyzableElementX element) {
447 if (element._treeElements == null) { 515 if (element._treeElements == null) {
448 element._treeElements = new TreeElementMapping(element); 516 element._treeElements = new TreeElementMapping(element);
449 } 517 }
450 return element._treeElements; 518 return element._treeElements;
451 } 519 }
452 520
453 abstract class AnalyzableElementX implements AnalyzableElement { 521 abstract class AnalyzableElementX implements AnalyzableElement {
454 TreeElements _treeElements; 522 TreeElements _treeElements;
455 523
456 bool get hasTreeElements => _treeElements != null; 524 bool get hasTreeElements => _treeElements != null;
457 525
458 TreeElements get treeElements { 526 TreeElements get treeElements {
459 assert(invariant(this, _treeElements !=null, 527 assert(invariant(this, _treeElements !=null,
460 message: "TreeElements have not been computed for $this.")); 528 message: "TreeElements have not been computed for $this."));
461 return _treeElements; 529 return _treeElements;
462 } 530 }
463 531
464 void reuseElement() { 532 void reuseElement() {
465 _treeElements = null; 533 _treeElements = null;
466 } 534 }
467 } 535 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698