| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 Element get currentElement; | 8 Element get currentElement; |
| 9 Set<Node> get superUses; | 9 Set<Node> get superUses; |
| 10 | 10 |
| 11 /// A set of additional dependencies. See [registerDependency] below. | 11 /// A set of additional dependencies. See [registerDependency] below. |
| 12 Set<Element> get otherDependencies; | 12 Set<Element> get otherDependencies; |
| 13 | 13 |
| 14 Element operator[](Node node); | 14 Element operator[](Node node); |
| 15 Selector getSelector(Send send); | 15 Selector getSelector(Send send); |
| 16 Selector getGetterSelectorInComplexSendSet(SendSet node); | 16 Selector getGetterSelectorInComplexSendSet(SendSet node); |
| 17 Selector getOperatorSelectorInComplexSendSet(SendSet node); | 17 Selector getOperatorSelectorInComplexSendSet(SendSet node); |
| 18 DartType getType(Node node); | 18 DartType getType(Node node); |
| 19 bool isParameterChecked(Element element); | 19 bool isParameterChecked(Element element); |
| 20 void setSelector(Node node, Selector selector); | 20 void setSelector(Node node, Selector selector); |
| 21 void setGetterSelectorInComplexSendSet(SendSet node, Selector selector); | 21 void setGetterSelectorInComplexSendSet(SendSet node, Selector selector); |
| 22 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector); | 22 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector); |
| 23 Selector getIteratorSelector(ForIn node); |
| 24 Selector getMoveNextSelector(ForIn node); |
| 25 Selector getCurrentSelector(ForIn node); |
| 23 | 26 |
| 24 /// Register additional dependencies required by [currentElement]. | 27 /// Register additional dependencies required by [currentElement]. |
| 25 /// For example, elements that are used by a backend. | 28 /// For example, elements that are used by a backend. |
| 26 void registerDependency(Element element); | 29 void registerDependency(Element element); |
| 27 } | 30 } |
| 28 | 31 |
| 29 class TreeElementMapping implements TreeElements { | 32 class TreeElementMapping implements TreeElements { |
| 30 final Element currentElement; | 33 final Element currentElement; |
| 31 final Map<Spannable, Selector> selectors = | 34 final Map<Spannable, Selector> selectors = |
| 32 new LinkedHashMap<Spannable, Selector>(); | 35 new LinkedHashMap<Spannable, Selector>(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 } | 96 } |
| 94 | 97 |
| 95 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector) { | 98 void setOperatorSelectorInComplexSendSet(SendSet node, Selector selector) { |
| 96 selectors[node.assignmentOperator] = selector; | 99 selectors[node.assignmentOperator] = selector; |
| 97 } | 100 } |
| 98 | 101 |
| 99 Selector getOperatorSelectorInComplexSendSet(SendSet node) { | 102 Selector getOperatorSelectorInComplexSendSet(SendSet node) { |
| 100 return selectors[node.assignmentOperator]; | 103 return selectors[node.assignmentOperator]; |
| 101 } | 104 } |
| 102 | 105 |
| 106 // The following methods set selectors on the "for in" node. Since |
| 107 // we're using three selectors, we need to use children of the node, |
| 108 // and we arbitrarily choose which ones. |
| 109 |
| 110 Selector setIteratorSelector(ForIn node, Selector selector) { |
| 111 selectors[node] = selector; |
| 112 } |
| 113 |
| 114 Selector getIteratorSelector(ForIn node) { |
| 115 return selectors[node]; |
| 116 } |
| 117 |
| 118 Selector setMoveNextSelector(ForIn node, Selector selector) { |
| 119 selectors[node.forToken] = selector; |
| 120 } |
| 121 |
| 122 Selector getMoveNextSelector(ForIn node) { |
| 123 return selectors[node.forToken]; |
| 124 } |
| 125 |
| 126 Selector setCurrentSelector(ForIn node, Selector selector) { |
| 127 selectors[node.inToken] = selector; |
| 128 } |
| 129 |
| 130 Selector getCurrentSelector(ForIn node) { |
| 131 return selectors[node.inToken]; |
| 132 } |
| 133 |
| 103 bool isParameterChecked(Element element) { | 134 bool isParameterChecked(Element element) { |
| 104 return checkedParameters.contains(element); | 135 return checkedParameters.contains(element); |
| 105 } | 136 } |
| 106 | 137 |
| 107 void registerDependency(Element element) { | 138 void registerDependency(Element element) { |
| 108 otherDependencies.add(element.implementation); | 139 otherDependencies.add(element.implementation); |
| 109 } | 140 } |
| 110 | 141 |
| 111 String toString() => 'TreeElementMapping($currentElement)'; | 142 String toString() => 'TreeElementMapping($currentElement)'; |
| 112 } | 143 } |
| (...skipping 2635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2748 mapping[node] = target; | 2779 mapping[node] = target; |
| 2749 } | 2780 } |
| 2750 | 2781 |
| 2751 registerImplicitInvocation(SourceString name, int arity) { | 2782 registerImplicitInvocation(SourceString name, int arity) { |
| 2752 Selector selector = new Selector.call(name, null, arity); | 2783 Selector selector = new Selector.call(name, null, arity); |
| 2753 world.registerDynamicInvocation(name, selector); | 2784 world.registerDynamicInvocation(name, selector); |
| 2754 } | 2785 } |
| 2755 | 2786 |
| 2756 visitForIn(ForIn node) { | 2787 visitForIn(ForIn node) { |
| 2757 LibraryElement library = enclosingElement.getLibrary(); | 2788 LibraryElement library = enclosingElement.getLibrary(); |
| 2789 mapping.setIteratorSelector(node, compiler.iteratorSelector); |
| 2758 world.registerDynamicGetter(compiler.iteratorSelector.name, | 2790 world.registerDynamicGetter(compiler.iteratorSelector.name, |
| 2759 compiler.iteratorSelector); | 2791 compiler.iteratorSelector); |
| 2792 mapping.setCurrentSelector(node, compiler.currentSelector); |
| 2760 world.registerDynamicGetter(compiler.currentSelector.name, | 2793 world.registerDynamicGetter(compiler.currentSelector.name, |
| 2761 compiler.currentSelector); | 2794 compiler.currentSelector); |
| 2795 mapping.setMoveNextSelector(node, compiler.moveNextSelector); |
| 2762 world.registerDynamicInvocation(compiler.moveNextSelector.name, | 2796 world.registerDynamicInvocation(compiler.moveNextSelector.name, |
| 2763 compiler.moveNextSelector); | 2797 compiler.moveNextSelector); |
| 2764 | 2798 |
| 2765 visit(node.expression); | 2799 visit(node.expression); |
| 2766 Scope blockScope = new BlockScope(scope); | 2800 Scope blockScope = new BlockScope(scope); |
| 2767 Node declaration = node.declaredIdentifier; | 2801 Node declaration = node.declaredIdentifier; |
| 2768 visitIn(declaration, blockScope); | 2802 visitIn(declaration, blockScope); |
| 2769 | 2803 |
| 2770 Send send = declaration.asSend(); | 2804 Send send = declaration.asSend(); |
| 2771 VariableDefinitions variableDefinitions = | 2805 VariableDefinitions variableDefinitions = |
| (...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3960 return e; | 3994 return e; |
| 3961 } | 3995 } |
| 3962 | 3996 |
| 3963 /// Assumed to be called by [resolveRedirectingFactory]. | 3997 /// Assumed to be called by [resolveRedirectingFactory]. |
| 3964 Element visitReturn(Return node) { | 3998 Element visitReturn(Return node) { |
| 3965 Node expression = node.expression; | 3999 Node expression = node.expression; |
| 3966 return finishConstructorReference(visit(expression), | 4000 return finishConstructorReference(visit(expression), |
| 3967 expression, expression); | 4001 expression, expression); |
| 3968 } | 4002 } |
| 3969 } | 4003 } |
| OLD | NEW |