| 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 part of resolution; | 5 part of resolution; |
| 6 | 6 |
| 7 /// [ResolutionRegistry] collects all resolution information. It stores node | 7 /// [ResolutionRegistry] collects all resolution information. It stores node |
| 8 /// related information in a [TreeElements] mapping and registers calls with | 8 /// related information in a [TreeElements] mapping and registers calls with |
| 9 /// [Backend], [World] and [Enqueuer]. | 9 /// [Backend], [World] and [Enqueuer]. |
| 10 // TODO(johnniwinther): Split this into an interface and implementation class. | 10 // TODO(johnniwinther): Split this into an interface and implementation class. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 @override | 23 @override |
| 24 Iterable<Element> get otherDependencies => mapping.otherDependencies; | 24 Iterable<Element> get otherDependencies => mapping.otherDependencies; |
| 25 | 25 |
| 26 @override | 26 @override |
| 27 void registerDependency(Element element) { | 27 void registerDependency(Element element) { |
| 28 mapping.registerDependency(element); | 28 mapping.registerDependency(element); |
| 29 } | 29 } |
| 30 | 30 |
| 31 @override | 31 @override |
| 32 void registerDynamicGetter(UniverseSelector selector) { | 32 void registerDynamicGetter(Selector selector) { |
| 33 world.registerDynamicGetter(selector); | 33 world.registerDynamicGetter(selector); |
| 34 } | 34 } |
| 35 | 35 |
| 36 @override | 36 @override |
| 37 void registerDynamicInvocation(UniverseSelector selector) { | 37 void registerDynamicInvocation(Selector selector) { |
| 38 world.registerDynamicInvocation(selector); | 38 world.registerDynamicInvocation(selector); |
| 39 } | 39 } |
| 40 | 40 |
| 41 @override | 41 @override |
| 42 void registerDynamicSetter(UniverseSelector selector) { | 42 void registerDynamicSetter(Selector selector) { |
| 43 world.registerDynamicSetter(selector); | 43 world.registerDynamicSetter(selector); |
| 44 } | 44 } |
| 45 | 45 |
| 46 @override | 46 @override |
| 47 void registerGetOfStaticFunction(FunctionElement element) { | 47 void registerGetOfStaticFunction(FunctionElement element) { |
| 48 world.registerGetOfStaticFunction(element); | 48 world.registerGetOfStaticFunction(element); |
| 49 } | 49 } |
| 50 | 50 |
| 51 @override | 51 @override |
| 52 void registerInstantiation(InterfaceType type) { | 52 void registerInstantiation(InterfaceType type) { |
| 53 // TODO(johnniwinther): Remove the need for passing `this`. | 53 // TODO(johnniwinther): Remove the need for passing `this`. |
| 54 world.registerInstantiatedType(type, this); | 54 world.registerInstantiatedType(type, this); |
| 55 } | 55 } |
| 56 | 56 |
| 57 @override | 57 @override |
| 58 void registerStaticInvocation(Element element) { | 58 void registerStaticInvocation(Element element) { |
| 59 registerDependency(element); | 59 registerDependency(element); |
| 60 world.registerStaticUse(element); | 60 world.registerStaticUse(element); |
| 61 } | 61 } |
| 62 } | 62 } |
| 63 | 63 |
| 64 class ResolutionWorldImpact implements WorldImpact { | 64 class ResolutionWorldImpact implements WorldImpact { |
| 65 final Registry registry; | 65 final Registry registry; |
| 66 Setlet<UniverseSelector> _dynamicInvocations; | 66 Setlet<Selector> _dynamicInvocations; |
| 67 Setlet<UniverseSelector> _dynamicGetters; | 67 Setlet<Selector> _dynamicGetters; |
| 68 Setlet<UniverseSelector> _dynamicSetters; | 68 Setlet<Selector> _dynamicSetters; |
| 69 Setlet<InterfaceType> _instantiatedTypes; | 69 Setlet<InterfaceType> _instantiatedTypes; |
| 70 Setlet<Element> _staticUses; | 70 Setlet<Element> _staticUses; |
| 71 Setlet<DartType> _checkedTypes; | 71 Setlet<DartType> _checkedTypes; |
| 72 Setlet<MethodElement> _closurizedFunctions; | 72 Setlet<MethodElement> _closurizedFunctions; |
| 73 | 73 |
| 74 ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping) | 74 ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping) |
| 75 : this.registry = new EagerRegistry(compiler, mapping); | 75 : this.registry = new EagerRegistry(compiler, mapping); |
| 76 | 76 |
| 77 void registerDynamicGetter(UniverseSelector selector) { | 77 void registerDynamicGetter(Selector selector) { |
| 78 if (_dynamicGetters == null) { | 78 if (_dynamicGetters == null) { |
| 79 _dynamicGetters = new Setlet<UniverseSelector>(); | 79 _dynamicGetters = new Setlet<Selector>(); |
| 80 } | 80 } |
| 81 _dynamicGetters.add(selector); | 81 _dynamicGetters.add(selector); |
| 82 } | 82 } |
| 83 | 83 |
| 84 @override | 84 @override |
| 85 Iterable<UniverseSelector> get dynamicGetters { | 85 Iterable<Selector> get dynamicGetters { |
| 86 return _dynamicGetters != null | 86 return _dynamicGetters != null ? _dynamicGetters : const <Selector>[]; |
| 87 ? _dynamicGetters : const <UniverseSelector>[]; | |
| 88 } | 87 } |
| 89 | 88 |
| 90 void registerDynamicInvocation(UniverseSelector selector) { | 89 void registerDynamicInvocation(Selector selector) { |
| 91 if (_dynamicInvocations == null) { | 90 if (_dynamicInvocations == null) { |
| 92 _dynamicInvocations = new Setlet<UniverseSelector>(); | 91 _dynamicInvocations = new Setlet<Selector>(); |
| 93 } | 92 } |
| 94 _dynamicInvocations.add(selector); | 93 _dynamicInvocations.add(selector); |
| 95 } | 94 } |
| 96 | 95 |
| 97 @override | 96 @override |
| 98 Iterable<UniverseSelector> get dynamicInvocations { | 97 Iterable<Selector> get dynamicInvocations { |
| 99 return _dynamicInvocations != null | 98 return _dynamicInvocations != null |
| 100 ? _dynamicInvocations : const <UniverseSelector>[]; | 99 ? _dynamicInvocations : const <Selector>[]; |
| 101 } | 100 } |
| 102 | 101 |
| 103 void registerDynamicSetter(UniverseSelector selector) { | 102 void registerDynamicSetter(Selector selector) { |
| 104 if (_dynamicSetters == null) { | 103 if (_dynamicSetters == null) { |
| 105 _dynamicSetters = new Setlet<UniverseSelector>(); | 104 _dynamicSetters = new Setlet<Selector>(); |
| 106 } | 105 } |
| 107 _dynamicSetters.add(selector); | 106 _dynamicSetters.add(selector); |
| 108 } | 107 } |
| 109 | 108 |
| 110 @override | 109 @override |
| 111 Iterable<UniverseSelector> get dynamicSetters { | 110 Iterable<Selector> get dynamicSetters { |
| 112 return _dynamicSetters != null | 111 return _dynamicSetters != null ? _dynamicSetters : const <Selector>[]; |
| 113 ? _dynamicSetters : const <UniverseSelector>[]; | |
| 114 } | 112 } |
| 115 | 113 |
| 116 void registerInstantiatedType(InterfaceType type) { | 114 void registerInstantiatedType(InterfaceType type) { |
| 117 // TODO(johnniwinther): Enable this when registration doesn't require a | 115 // TODO(johnniwinther): Enable this when registration doesn't require a |
| 118 // [Registry]. | 116 // [Registry]. |
| 119 throw new UnsupportedError( | 117 throw new UnsupportedError( |
| 120 'Lazy registration of instantiated not supported.'); | 118 'Lazy registration of instantiated not supported.'); |
| 121 if (_instantiatedTypes == null) { | 119 if (_instantiatedTypes == null) { |
| 122 _instantiatedTypes = new Setlet<InterfaceType>(); | 120 _instantiatedTypes = new Setlet<InterfaceType>(); |
| 123 } | 121 } |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 } | 404 } |
| 407 | 405 |
| 408 void registerClosure(LocalFunctionElement element) { | 406 void registerClosure(LocalFunctionElement element) { |
| 409 world.registerClosure(element, this); | 407 world.registerClosure(element, this); |
| 410 } | 408 } |
| 411 | 409 |
| 412 void registerSuperUse(Node node) { | 410 void registerSuperUse(Node node) { |
| 413 mapping.addSuperUse(node); | 411 mapping.addSuperUse(node); |
| 414 } | 412 } |
| 415 | 413 |
| 416 void registerDynamicInvocation(UniverseSelector selector) { | 414 void registerDynamicInvocation(Selector selector) { |
| 417 worldImpact.registerDynamicInvocation(selector); | 415 worldImpact.registerDynamicInvocation(selector); |
| 418 } | 416 } |
| 419 | 417 |
| 420 void registerSuperNoSuchMethod() { | 418 void registerSuperNoSuchMethod() { |
| 421 backend.resolutionCallbacks.onSuperNoSuchMethod(this); | 419 backend.resolutionCallbacks.onSuperNoSuchMethod(this); |
| 422 } | 420 } |
| 423 | 421 |
| 424 void registerClassUsingVariableExpression(ClassElement element) { | 422 void registerClassUsingVariableExpression(ClassElement element) { |
| 425 backend.registerClassUsingVariableExpression(element); | 423 backend.registerClassUsingVariableExpression(element); |
| 426 } | 424 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 455 // TODO(johnniwinther): Remove the [ResolverVisitor] dependency. Its only | 453 // TODO(johnniwinther): Remove the [ResolverVisitor] dependency. Its only |
| 456 // needed to lookup types in the current scope. | 454 // needed to lookup types in the current scope. |
| 457 void registerJsBuiltinCall(Node node, ResolverVisitor visitor) { | 455 void registerJsBuiltinCall(Node node, ResolverVisitor visitor) { |
| 458 world.registerJsBuiltinCall(node, visitor); | 456 world.registerJsBuiltinCall(node, visitor); |
| 459 } | 457 } |
| 460 | 458 |
| 461 void registerGetOfStaticFunction(FunctionElement element) { | 459 void registerGetOfStaticFunction(FunctionElement element) { |
| 462 worldImpact.registerClosurizedFunction(element); | 460 worldImpact.registerClosurizedFunction(element); |
| 463 } | 461 } |
| 464 | 462 |
| 465 void registerDynamicGetter(UniverseSelector selector) { | 463 void registerDynamicGetter(Selector selector) { |
| 466 worldImpact.registerDynamicGetter(selector); | 464 worldImpact.registerDynamicGetter(selector); |
| 467 } | 465 } |
| 468 | 466 |
| 469 void registerDynamicSetter(UniverseSelector selector) { | 467 void registerDynamicSetter(Selector selector) { |
| 470 worldImpact.registerDynamicSetter(selector); | 468 worldImpact.registerDynamicSetter(selector); |
| 471 } | 469 } |
| 472 | 470 |
| 473 void registerConstSymbol(String name) { | 471 void registerConstSymbol(String name) { |
| 474 backend.registerConstSymbol(name, this); | 472 backend.registerConstSymbol(name, this); |
| 475 } | 473 } |
| 476 | 474 |
| 477 void registerSymbolConstructor() { | 475 void registerSymbolConstructor() { |
| 478 backend.resolutionCallbacks.onSymbolConstructor(this); | 476 backend.resolutionCallbacks.onSymbolConstructor(this); |
| 479 } | 477 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 } | 555 } |
| 558 | 556 |
| 559 void registerAsyncMarker(FunctionElement element) { | 557 void registerAsyncMarker(FunctionElement element) { |
| 560 backend.registerAsyncMarker(element, world, this); | 558 backend.registerAsyncMarker(element, world, this); |
| 561 } | 559 } |
| 562 | 560 |
| 563 void registerAsyncForIn(AsyncForIn node) { | 561 void registerAsyncForIn(AsyncForIn node) { |
| 564 backend.resolutionCallbacks.onAsyncForIn(node, this); | 562 backend.resolutionCallbacks.onAsyncForIn(node, this); |
| 565 } | 563 } |
| 566 } | 564 } |
| OLD | NEW |