| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.resolution.registry; | 5 library dart2js.resolution.registry; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/backend_api.dart' show | 8 import '../common/backend_api.dart' show |
| 9 Backend, | 9 Backend, |
| 10 ForeignResolver; | 10 ForeignResolver; |
| 11 import '../common/resolution.dart' show | 11 import '../common/resolution.dart' show |
| 12 Feature, | 12 Feature, |
| 13 ListLiteralUse, | 13 ListLiteralUse, |
| 14 MapLiteralUse, | 14 MapLiteralUse, |
| 15 ResolutionWorldImpact; | 15 ResolutionImpact; |
| 16 import '../common/registry.dart' show | 16 import '../common/registry.dart' show |
| 17 Registry; | 17 Registry; |
| 18 import '../compiler.dart' show | 18 import '../compiler.dart' show |
| 19 Compiler; | 19 Compiler; |
| 20 import '../constants/expressions.dart'; | 20 import '../constants/expressions.dart'; |
| 21 import '../dart_types.dart'; | 21 import '../dart_types.dart'; |
| 22 import '../enqueue.dart' show | 22 import '../enqueue.dart' show |
| 23 ResolutionEnqueuer; | 23 ResolutionEnqueuer; |
| 24 import '../elements/elements.dart'; | 24 import '../elements/elements.dart'; |
| 25 import '../tree/tree.dart'; | 25 import '../tree/tree.dart'; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 | 92 |
| 93 @override | 93 @override |
| 94 void registerStaticInvocation(Element element) { | 94 void registerStaticInvocation(Element element) { |
| 95 registerDependency(element); | 95 registerDependency(element); |
| 96 world.registerStaticUse(element); | 96 world.registerStaticUse(element); |
| 97 } | 97 } |
| 98 | 98 |
| 99 String toString() => 'EagerRegistry for ${mapping.analyzedElement}'; | 99 String toString() => 'EagerRegistry for ${mapping.analyzedElement}'; |
| 100 } | 100 } |
| 101 | 101 |
| 102 class _ResolutionWorldImpact implements ResolutionWorldImpact { | 102 class _ResolutionWorldImpact implements ResolutionImpact { |
| 103 final Registry registry; | 103 final Registry registry; |
| 104 // TODO(johnniwinther): Do we benefit from lazy initialization of the | 104 // TODO(johnniwinther): Do we benefit from lazy initialization of the |
| 105 // [Setlet]s? | 105 // [Setlet]s? |
| 106 Setlet<UniverseSelector> _dynamicInvocations; | 106 Setlet<UniverseSelector> _dynamicInvocations; |
| 107 Setlet<UniverseSelector> _dynamicGetters; | 107 Setlet<UniverseSelector> _dynamicGetters; |
| 108 Setlet<UniverseSelector> _dynamicSetters; | 108 Setlet<UniverseSelector> _dynamicSetters; |
| 109 Setlet<InterfaceType> _instantiatedTypes; | 109 Setlet<InterfaceType> _instantiatedTypes; |
| 110 Setlet<Element> _staticUses; | 110 Setlet<Element> _staticUses; |
| 111 Setlet<DartType> _isChecks; | 111 Setlet<DartType> _isChecks; |
| 112 Setlet<DartType> _asCasts; | 112 Setlet<DartType> _asCasts; |
| 113 Setlet<DartType> _checkedModeChecks; | 113 Setlet<DartType> _checkedModeChecks; |
| 114 Setlet<MethodElement> _closurizedFunctions; | 114 Setlet<MethodElement> _closurizedFunctions; |
| 115 Setlet<LocalFunctionElement> _closures; | 115 Setlet<LocalFunctionElement> _closures; |
| 116 Setlet<Feature> _features; | 116 Setlet<Feature> _features; |
| 117 // TODO(johnniwinther): This seems to be a union of other sets. | 117 // TODO(johnniwinther): This seems to be a union of other sets. |
| 118 Setlet<DartType> _requiredTypes; | 118 Setlet<DartType> _requiredTypes; |
| 119 Setlet<MapLiteralUse> _mapLiterals; | 119 Setlet<MapLiteralUse> _mapLiterals; |
| 120 Setlet<ListLiteralUse> _listLiterals; | 120 Setlet<ListLiteralUse> _listLiterals; |
| 121 Setlet<DartType> _typeLiterals; | 121 Setlet<DartType> _typeLiterals; |
| 122 Setlet<String> _constSymbolNames; | 122 Setlet<String> _constSymbolNames; |
| 123 | 123 |
| 124 _ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping) | 124 _ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping) |
| 125 : this.registry = new EagerRegistry(compiler, mapping); | 125 : this.registry = new EagerRegistry(compiler, mapping); |
| 126 | 126 |
| 127 void registerDependency(Element element) { | 127 void registerDependency(Element element) { |
| 128 assert(element != null); |
| 128 registry.registerDependency(element); | 129 registry.registerDependency(element); |
| 129 } | 130 } |
| 130 | 131 |
| 131 void registerDynamicGetter(UniverseSelector selector) { | 132 void registerDynamicGetter(UniverseSelector selector) { |
| 133 assert(selector != null); |
| 132 if (_dynamicGetters == null) { | 134 if (_dynamicGetters == null) { |
| 133 _dynamicGetters = new Setlet<UniverseSelector>(); | 135 _dynamicGetters = new Setlet<UniverseSelector>(); |
| 134 } | 136 } |
| 135 _dynamicGetters.add(selector); | 137 _dynamicGetters.add(selector); |
| 136 } | 138 } |
| 137 | 139 |
| 138 @override | 140 @override |
| 139 Iterable<UniverseSelector> get dynamicGetters { | 141 Iterable<UniverseSelector> get dynamicGetters { |
| 140 return _dynamicGetters != null | 142 return _dynamicGetters != null |
| 141 ? _dynamicGetters : const <UniverseSelector>[]; | 143 ? _dynamicGetters : const <UniverseSelector>[]; |
| 142 } | 144 } |
| 143 | 145 |
| 144 void registerDynamicInvocation(UniverseSelector selector) { | 146 void registerDynamicInvocation(UniverseSelector selector) { |
| 147 assert(selector != null); |
| 145 if (_dynamicInvocations == null) { | 148 if (_dynamicInvocations == null) { |
| 146 _dynamicInvocations = new Setlet<UniverseSelector>(); | 149 _dynamicInvocations = new Setlet<UniverseSelector>(); |
| 147 } | 150 } |
| 148 _dynamicInvocations.add(selector); | 151 _dynamicInvocations.add(selector); |
| 149 } | 152 } |
| 150 | 153 |
| 151 @override | 154 @override |
| 152 Iterable<UniverseSelector> get dynamicInvocations { | 155 Iterable<UniverseSelector> get dynamicInvocations { |
| 153 return _dynamicInvocations != null | 156 return _dynamicInvocations != null |
| 154 ? _dynamicInvocations : const <UniverseSelector>[]; | 157 ? _dynamicInvocations : const <UniverseSelector>[]; |
| 155 } | 158 } |
| 156 | 159 |
| 157 void registerDynamicSetter(UniverseSelector selector) { | 160 void registerDynamicSetter(UniverseSelector selector) { |
| 161 assert(selector != null); |
| 158 if (_dynamicSetters == null) { | 162 if (_dynamicSetters == null) { |
| 159 _dynamicSetters = new Setlet<UniverseSelector>(); | 163 _dynamicSetters = new Setlet<UniverseSelector>(); |
| 160 } | 164 } |
| 161 _dynamicSetters.add(selector); | 165 _dynamicSetters.add(selector); |
| 162 } | 166 } |
| 163 | 167 |
| 164 @override | 168 @override |
| 165 Iterable<UniverseSelector> get dynamicSetters { | 169 Iterable<UniverseSelector> get dynamicSetters { |
| 166 return _dynamicSetters != null | 170 return _dynamicSetters != null |
| 167 ? _dynamicSetters : const <UniverseSelector>[]; | 171 ? _dynamicSetters : const <UniverseSelector>[]; |
| 168 } | 172 } |
| 169 | 173 |
| 170 void registerInstantiatedType(InterfaceType type) { | 174 void registerInstantiatedType(InterfaceType type) { |
| 175 assert(type != null); |
| 171 if (_instantiatedTypes == null) { | 176 if (_instantiatedTypes == null) { |
| 172 _instantiatedTypes = new Setlet<InterfaceType>(); | 177 _instantiatedTypes = new Setlet<InterfaceType>(); |
| 173 } | 178 } |
| 174 _instantiatedTypes.add(type); | 179 _instantiatedTypes.add(type); |
| 175 } | 180 } |
| 176 | 181 |
| 177 @override | 182 @override |
| 178 Iterable<InterfaceType> get instantiatedTypes { | 183 Iterable<InterfaceType> get instantiatedTypes { |
| 179 return _instantiatedTypes != null | 184 return _instantiatedTypes != null |
| 180 ? _instantiatedTypes : const <InterfaceType>[]; | 185 ? _instantiatedTypes : const <InterfaceType>[]; |
| 181 } | 186 } |
| 182 | 187 |
| 183 void registerTypeLiteral(DartType type) { | 188 void registerTypeLiteral(DartType type) { |
| 189 assert(type != null); |
| 184 if (_typeLiterals == null) { | 190 if (_typeLiterals == null) { |
| 185 _typeLiterals = new Setlet<DartType>(); | 191 _typeLiterals = new Setlet<DartType>(); |
| 186 } | 192 } |
| 187 _typeLiterals.add(type); | 193 _typeLiterals.add(type); |
| 188 } | 194 } |
| 189 | 195 |
| 190 @override | 196 @override |
| 191 Iterable<DartType> get typeLiterals { | 197 Iterable<DartType> get typeLiterals { |
| 192 return _typeLiterals != null | 198 return _typeLiterals != null |
| 193 ? _typeLiterals : const <DartType>[]; | 199 ? _typeLiterals : const <DartType>[]; |
| 194 } | 200 } |
| 195 | 201 |
| 196 void registerRequiredType(DartType type) { | 202 void registerRequiredType(DartType type) { |
| 203 assert(type != null); |
| 197 if (_requiredTypes == null) { | 204 if (_requiredTypes == null) { |
| 198 _requiredTypes = new Setlet<DartType>(); | 205 _requiredTypes = new Setlet<DartType>(); |
| 199 } | 206 } |
| 200 _requiredTypes.add(type); | 207 _requiredTypes.add(type); |
| 201 } | 208 } |
| 202 | 209 |
| 203 @override | 210 @override |
| 204 Iterable<DartType> get requiredTypes { | 211 Iterable<DartType> get requiredTypes { |
| 205 return _requiredTypes != null | 212 return _requiredTypes != null |
| 206 ? _requiredTypes : const <DartType>[]; | 213 ? _requiredTypes : const <DartType>[]; |
| 207 } | 214 } |
| 208 | 215 |
| 209 void registerMapLiteral(MapLiteralUse mapLiteralUse) { | 216 void registerMapLiteral(MapLiteralUse mapLiteralUse) { |
| 217 assert(mapLiteralUse != null); |
| 210 if (_mapLiterals == null) { | 218 if (_mapLiterals == null) { |
| 211 _mapLiterals = new Setlet<MapLiteralUse>(); | 219 _mapLiterals = new Setlet<MapLiteralUse>(); |
| 212 } | 220 } |
| 213 _mapLiterals.add(mapLiteralUse); | 221 _mapLiterals.add(mapLiteralUse); |
| 214 } | 222 } |
| 215 | 223 |
| 216 @override | 224 @override |
| 217 Iterable<MapLiteralUse> get mapLiterals { | 225 Iterable<MapLiteralUse> get mapLiterals { |
| 218 return _mapLiterals != null | 226 return _mapLiterals != null |
| 219 ? _mapLiterals : const <MapLiteralUse>[]; | 227 ? _mapLiterals : const <MapLiteralUse>[]; |
| 220 } | 228 } |
| 221 | 229 |
| 222 void registerListLiteral(ListLiteralUse listLiteralUse) { | 230 void registerListLiteral(ListLiteralUse listLiteralUse) { |
| 231 assert(listLiteralUse != null); |
| 223 if (_listLiterals == null) { | 232 if (_listLiterals == null) { |
| 224 _listLiterals = new Setlet<ListLiteralUse>(); | 233 _listLiterals = new Setlet<ListLiteralUse>(); |
| 225 } | 234 } |
| 226 _listLiterals.add(listLiteralUse); | 235 _listLiterals.add(listLiteralUse); |
| 227 } | 236 } |
| 228 | 237 |
| 229 @override | 238 @override |
| 230 Iterable<ListLiteralUse> get listLiterals { | 239 Iterable<ListLiteralUse> get listLiterals { |
| 231 return _listLiterals != null | 240 return _listLiterals != null |
| 232 ? _listLiterals : const <ListLiteralUse>[]; | 241 ? _listLiterals : const <ListLiteralUse>[]; |
| 233 } | 242 } |
| 234 | 243 |
| 235 void registerStaticUse(Element element) { | 244 void registerStaticUse(Element element) { |
| 245 assert(element != null); |
| 236 if (_staticUses == null) { | 246 if (_staticUses == null) { |
| 237 _staticUses = new Setlet<Element>(); | 247 _staticUses = new Setlet<Element>(); |
| 238 } | 248 } |
| 239 _staticUses.add(element); | 249 _staticUses.add(element); |
| 240 } | 250 } |
| 241 | 251 |
| 242 @override | 252 @override |
| 243 Iterable<Element> get staticUses { | 253 Iterable<Element> get staticUses { |
| 244 return _staticUses != null ? _staticUses : const <Element>[]; | 254 return _staticUses != null ? _staticUses : const <Element>[]; |
| 245 } | 255 } |
| 246 | 256 |
| 247 void registerIsCheck(DartType type) { | 257 void registerIsCheck(DartType type) { |
| 258 assert(type != null); |
| 248 if (_isChecks == null) { | 259 if (_isChecks == null) { |
| 249 _isChecks = new Setlet<DartType>(); | 260 _isChecks = new Setlet<DartType>(); |
| 250 } | 261 } |
| 251 _isChecks.add(type); | 262 _isChecks.add(type); |
| 252 } | 263 } |
| 253 | 264 |
| 254 @override | 265 @override |
| 255 Iterable<DartType> get isChecks { | 266 Iterable<DartType> get isChecks { |
| 256 return _isChecks != null | 267 return _isChecks != null |
| 257 ? _isChecks : const <DartType>[]; | 268 ? _isChecks : const <DartType>[]; |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 @override | 791 @override |
| 781 void registerInstantiatedType(InterfaceType type) { | 792 void registerInstantiatedType(InterfaceType type) { |
| 782 registry.registerInstantiatedType(type); | 793 registry.registerInstantiatedType(type); |
| 783 } | 794 } |
| 784 | 795 |
| 785 @override | 796 @override |
| 786 DartType resolveTypeFromString(Node node, String typeName) { | 797 DartType resolveTypeFromString(Node node, String typeName) { |
| 787 return visitor.resolveTypeFromString(node, typeName); | 798 return visitor.resolveTypeFromString(node, typeName); |
| 788 } | 799 } |
| 789 } | 800 } |
| OLD | NEW |