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 |