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

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

Issue 1182053010: Revert "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
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 TypeMask getTypeMask(Node node); 28 void setSelector(Node node, Selector selector);
29 TypeMask getGetterTypeMaskInComplexSendSet(SendSet node); 29 void setGetterSelectorInComplexSendSet(SendSet node, Selector selector);
30 TypeMask getOperatorTypeMaskInComplexSendSet(SendSet node); 30 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector);
31 void setTypeMask(Node node, TypeMask mask);
32 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
33 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
34 31
35 /// Returns the for-in loop variable for [node]. 32 /// Returns the for-in loop variable for [node].
36 Element getForInVariable(ForIn node); 33 Element getForInVariable(ForIn node);
37 Selector getIteratorSelector(ForIn node); 34 Selector getIteratorSelector(ForIn node);
38 Selector getMoveNextSelector(ForIn node); 35 Selector getMoveNextSelector(ForIn node);
39 Selector getCurrentSelector(ForIn node); 36 Selector getCurrentSelector(ForIn node);
40 TypeMask getIteratorTypeMask(ForIn node); 37 void setIteratorSelector(ForIn node, Selector selector);
41 TypeMask getMoveNextTypeMask(ForIn node); 38 void setMoveNextSelector(ForIn node, Selector selector);
42 TypeMask getCurrentTypeMask(ForIn node); 39 void setCurrentSelector(ForIn node, Selector selector);
43 void setIteratorTypeMask(ForIn node, TypeMask mask);
44 void setMoveNextTypeMask(ForIn node, TypeMask mask);
45 void setCurrentTypeMask(ForIn node, TypeMask mask);
46 void setConstant(Node node, ConstantExpression constant); 40 void setConstant(Node node, ConstantExpression constant);
47 ConstantExpression getConstant(Node node); 41 ConstantExpression getConstant(Node node);
48 bool isAssert(Send send); 42 bool isAssert(Send send);
49 43
50 /// Returns the [FunctionElement] defined by [node]. 44 /// Returns the [FunctionElement] defined by [node].
51 FunctionElement getFunctionDefinition(FunctionExpression node); 45 FunctionElement getFunctionDefinition(FunctionExpression node);
52 46
53 /// Returns target constructor for the redirecting factory body [node]. 47 /// Returns target constructor for the redirecting factory body [node].
54 ConstructorElement getRedirectingTargetConstructor( 48 ConstructorElement getRedirectingTargetConstructor(
55 RedirectingFactoryBody node); 49 RedirectingFactoryBody node);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 /// Returns the jump target of the [node]. 82 /// Returns the jump target of the [node].
89 JumpTarget getTargetOf(GotoStatement node); 83 JumpTarget getTargetOf(GotoStatement node);
90 84
91 /// Returns the label defined by [node]. 85 /// Returns the label defined by [node].
92 LabelDefinition getLabelDefinition(Label node); 86 LabelDefinition getLabelDefinition(Label node);
93 87
94 /// Returns the label that [node] targets. 88 /// Returns the label that [node] targets.
95 LabelDefinition getTargetLabel(GotoStatement node); 89 LabelDefinition getTargetLabel(GotoStatement node);
96 } 90 }
97 91
98 class TreeElementMapping extends TreeElements { 92 class TreeElementMapping implements TreeElements {
99 final AnalyzableElement analyzedElement; 93 final AnalyzableElement analyzedElement;
100 Map<Spannable, Selector> _selectors; 94 Map<Spannable, Selector> _selectors;
101 Map<Spannable, TypeMask> _typeMasks;
102 Map<Node, DartType> _types; 95 Map<Node, DartType> _types;
103 Setlet<Node> _superUses; 96 Setlet<Node> _superUses;
104 Setlet<Element> _otherDependencies; 97 Setlet<Element> _otherDependencies;
105 Map<Node, ConstantExpression> _constants; 98 Map<Node, ConstantExpression> _constants;
106 Map<VariableElement, List<Node>> _potentiallyMutated; 99 Map<VariableElement, List<Node>> _potentiallyMutated;
107 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn; 100 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn;
108 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure; 101 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure;
109 Map<Node, Map<VariableElement, List<Node>>> _accessedByClosureIn; 102 Map<Node, Map<VariableElement, List<Node>>> _accessedByClosureIn;
110 Setlet<Element> _elements; 103 Setlet<Element> _elements;
111 Setlet<Send> _asserts; 104 Setlet<Send> _asserts;
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 if (_targetLabels == null) { 434 if (_targetLabels == null) {
442 _targetLabels = new Maplet<GotoStatement, LabelDefinition>(); 435 _targetLabels = new Maplet<GotoStatement, LabelDefinition>();
443 } 436 }
444 _targetLabels[node] = label; 437 _targetLabels[node] = label;
445 } 438 }
446 439
447 LabelDefinition getTargetLabel(GotoStatement node) { 440 LabelDefinition getTargetLabel(GotoStatement node) {
448 assert(node.target != null); 441 assert(node.target != null);
449 return _targetLabels != null ? _targetLabels[node] : null; 442 return _targetLabels != null ? _targetLabels[node] : null;
450 } 443 }
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 }
512 } 444 }
513 445
514 TreeElements _ensureTreeElements(AnalyzableElementX element) { 446 TreeElements _ensureTreeElements(AnalyzableElementX element) {
515 if (element._treeElements == null) { 447 if (element._treeElements == null) {
516 element._treeElements = new TreeElementMapping(element); 448 element._treeElements = new TreeElementMapping(element);
517 } 449 }
518 return element._treeElements; 450 return element._treeElements;
519 } 451 }
520 452
521 abstract class AnalyzableElementX implements AnalyzableElement { 453 abstract class AnalyzableElementX implements AnalyzableElement {
522 TreeElements _treeElements; 454 TreeElements _treeElements;
523 455
524 bool get hasTreeElements => _treeElements != null; 456 bool get hasTreeElements => _treeElements != null;
525 457
526 TreeElements get treeElements { 458 TreeElements get treeElements {
527 assert(invariant(this, _treeElements !=null, 459 assert(invariant(this, _treeElements !=null,
528 message: "TreeElements have not been computed for $this.")); 460 message: "TreeElements have not been computed for $this."));
529 return _treeElements; 461 return _treeElements;
530 } 462 }
531 463
532 void reuseElement() { 464 void reuseElement() {
533 _treeElements = null; 465 _treeElements = null;
534 } 466 }
535 } 467 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698