Chromium Code Reviews| Index: pkg/compiler/lib/src/universe/world_impact.dart |
| diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart |
| index bb6ac355a32783b9694fb33874dac21cacbdef25..745df3e6ad06df80c23e5c6b998fa9ea4b1afb27 100644 |
| --- a/pkg/compiler/lib/src/universe/world_impact.dart |
| +++ b/pkg/compiler/lib/src/universe/world_impact.dart |
| @@ -246,3 +246,120 @@ class WorldImpactBuilder { |
| ? _closures : const <LocalFunctionElement>[]; |
| } |
| } |
| + |
|
Johnni Winther
2015/10/26 14:12:37
Moved here from common/resolution.dart
|
| +/// Mutable implementation of [WorldImpact] used to transform |
| +/// [ResolutionImpact] or [CodegenImpact] to [WorldImpact]. |
| +class TransformedWorldImpact implements WorldImpact { |
| + final WorldImpact worldImpact; |
| + |
| + Setlet<Element> _staticUses; |
| + Setlet<InterfaceType> _instantiatedTypes; |
| + Setlet<UniverseSelector> _dynamicGetters; |
| + Setlet<UniverseSelector> _dynamicInvocations; |
| + Setlet<UniverseSelector> _dynamicSetters; |
| + |
| + TransformedWorldImpact(this.worldImpact); |
| + |
| + @override |
| + Iterable<DartType> get asCasts => worldImpact.asCasts; |
| + |
| + @override |
| + Iterable<DartType> get checkedModeChecks => worldImpact.checkedModeChecks; |
| + |
| + @override |
| + Iterable<MethodElement> get closurizedFunctions { |
| + return worldImpact.closurizedFunctions; |
| + } |
| + |
| + @override |
| + Iterable<UniverseSelector> get dynamicGetters { |
| + return _dynamicGetters != null |
| + ? _dynamicGetters : worldImpact.dynamicGetters; |
| + } |
| + |
| + @override |
| + Iterable<UniverseSelector> get dynamicInvocations { |
| + return _dynamicInvocations != null |
| + ? _dynamicInvocations : worldImpact.dynamicInvocations; |
| + } |
| + |
| + @override |
| + Iterable<UniverseSelector> get dynamicSetters { |
| + return _dynamicSetters != null |
| + ? _dynamicSetters : worldImpact.dynamicSetters; |
| + } |
| + |
| + @override |
| + Iterable<DartType> get isChecks => worldImpact.isChecks; |
| + |
| + @override |
| + Iterable<DartType> get onCatchTypes => worldImpact.onCatchTypes; |
| + |
| + _unsupported(String message) => throw new UnsupportedError(message); |
| + |
| + void registerDynamicGetter(UniverseSelector selector) { |
| + if (_dynamicGetters == null) { |
| + _dynamicGetters = new Setlet<UniverseSelector>(); |
| + _dynamicGetters.addAll(worldImpact.dynamicGetters); |
| + } |
| + _dynamicGetters.add(selector); |
| + } |
| + |
| + void registerDynamicInvocation(UniverseSelector selector) { |
| + if (_dynamicInvocations == null) { |
| + _dynamicInvocations = new Setlet<UniverseSelector>(); |
| + _dynamicInvocations.addAll(worldImpact.dynamicInvocations); |
| + } |
| + _dynamicInvocations.add(selector); |
| + } |
| + |
| + void registerDynamicSetter(UniverseSelector selector) { |
| + if (_dynamicSetters == null) { |
| + _dynamicSetters = new Setlet<UniverseSelector>(); |
| + _dynamicSetters.addAll(worldImpact.dynamicSetters); |
| + } |
| + _dynamicSetters.add(selector); |
| + } |
| + |
| + void registerInstantiatedType(InterfaceType type) { |
| + if (_instantiatedTypes == null) { |
| + _instantiatedTypes = new Setlet<InterfaceType>(); |
| + _instantiatedTypes.addAll(worldImpact.instantiatedTypes); |
| + } |
| + _instantiatedTypes.add(type); |
| + } |
| + |
| + @override |
| + Iterable<InterfaceType> get instantiatedTypes { |
| + return _instantiatedTypes != null |
| + ? _instantiatedTypes : worldImpact.instantiatedTypes; |
| + } |
| + |
| + @override |
| + Iterable<DartType> get typeLiterals { |
| + return worldImpact.typeLiterals; |
| + } |
| + |
| + void registerStaticUse(Element element) { |
| + if (_staticUses == null) { |
| + _staticUses = new Setlet<Element>(); |
| + _staticUses.addAll(worldImpact.staticUses); |
| + } |
| + _staticUses.add(element); |
| + } |
| + |
| + @override |
| + Iterable<Element> get staticUses { |
| + return _staticUses != null ? _staticUses : worldImpact.staticUses; |
| + } |
| + |
| + @override |
| + Iterable<LocalFunctionElement> get closures => worldImpact.closures; |
| + |
| + String toString() { |
| + StringBuffer sb = new StringBuffer(); |
| + sb.write('TransformedWorldImpact($worldImpact)'); |
| + WorldImpact.printOn(sb, this); |
| + return sb.toString(); |
| + } |
| +} |