| 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 263ba2a921b635d4f05640fd1680bc2382c0f150..50cb902976812fc42c8d3cfb702f0a0a542b4def 100644
|
| --- a/pkg/compiler/lib/src/universe/world_impact.dart
|
| +++ b/pkg/compiler/lib/src/universe/world_impact.dart
|
| @@ -11,6 +11,9 @@ import '../elements/elements.dart' show
|
| Element,
|
| LocalFunctionElement,
|
| MethodElement;
|
| +import '../util/util.dart' show
|
| + Setlet;
|
| +
|
| import 'universe.dart' show
|
| UniverseSelector;
|
|
|
| @@ -68,3 +71,157 @@ class WorldImpact {
|
| return sb.toString();
|
| }
|
| }
|
| +
|
| +class WorldImpactBuilder {
|
| + // TODO(johnniwinther): Do we benefit from lazy initialization of the
|
| + // [Setlet]s?
|
| + Setlet<UniverseSelector> _dynamicInvocations;
|
| + Setlet<UniverseSelector> _dynamicGetters;
|
| + Setlet<UniverseSelector> _dynamicSetters;
|
| + Setlet<InterfaceType> _instantiatedTypes;
|
| + Setlet<Element> _staticUses;
|
| + Setlet<DartType> _isChecks;
|
| + Setlet<DartType> _asCasts;
|
| + Setlet<DartType> _checkedModeChecks;
|
| + Setlet<MethodElement> _closurizedFunctions;
|
| + Setlet<LocalFunctionElement> _closures;
|
| + Setlet<DartType> _typeLiterals;
|
| +
|
| + void registerDynamicGetter(UniverseSelector selector) {
|
| + assert(selector != null);
|
| + if (_dynamicGetters == null) {
|
| + _dynamicGetters = new Setlet<UniverseSelector>();
|
| + }
|
| + _dynamicGetters.add(selector);
|
| + }
|
| +
|
| + Iterable<UniverseSelector> get dynamicGetters {
|
| + return _dynamicGetters != null
|
| + ? _dynamicGetters : const <UniverseSelector>[];
|
| + }
|
| +
|
| + void registerDynamicInvocation(UniverseSelector selector) {
|
| + assert(selector != null);
|
| + if (_dynamicInvocations == null) {
|
| + _dynamicInvocations = new Setlet<UniverseSelector>();
|
| + }
|
| + _dynamicInvocations.add(selector);
|
| + }
|
| +
|
| + Iterable<UniverseSelector> get dynamicInvocations {
|
| + return _dynamicInvocations != null
|
| + ? _dynamicInvocations : const <UniverseSelector>[];
|
| + }
|
| +
|
| + void registerDynamicSetter(UniverseSelector selector) {
|
| + assert(selector != null);
|
| + if (_dynamicSetters == null) {
|
| + _dynamicSetters = new Setlet<UniverseSelector>();
|
| + }
|
| + _dynamicSetters.add(selector);
|
| + }
|
| +
|
| + Iterable<UniverseSelector> get dynamicSetters {
|
| + return _dynamicSetters != null
|
| + ? _dynamicSetters : const <UniverseSelector>[];
|
| + }
|
| +
|
| + void registerInstantiatedType(InterfaceType type) {
|
| + assert(type != null);
|
| + if (_instantiatedTypes == null) {
|
| + _instantiatedTypes = new Setlet<InterfaceType>();
|
| + }
|
| + _instantiatedTypes.add(type);
|
| + }
|
| +
|
| + Iterable<InterfaceType> get instantiatedTypes {
|
| + return _instantiatedTypes != null
|
| + ? _instantiatedTypes : const <InterfaceType>[];
|
| + }
|
| +
|
| + void registerTypeLiteral(DartType type) {
|
| + assert(type != null);
|
| + if (_typeLiterals == null) {
|
| + _typeLiterals = new Setlet<DartType>();
|
| + }
|
| + _typeLiterals.add(type);
|
| + }
|
| +
|
| + Iterable<DartType> get typeLiterals {
|
| + return _typeLiterals != null
|
| + ? _typeLiterals : const <DartType>[];
|
| + }
|
| +
|
| + void registerStaticUse(Element element) {
|
| + assert(element != null);
|
| + if (_staticUses == null) {
|
| + _staticUses = new Setlet<Element>();
|
| + }
|
| + _staticUses.add(element);
|
| + }
|
| +
|
| + Iterable<Element> get staticUses {
|
| + return _staticUses != null ? _staticUses : const <Element>[];
|
| + }
|
| +
|
| + void registerIsCheck(DartType type) {
|
| + assert(type != null);
|
| + if (_isChecks == null) {
|
| + _isChecks = new Setlet<DartType>();
|
| + }
|
| + _isChecks.add(type);
|
| + }
|
| +
|
| + Iterable<DartType> get isChecks {
|
| + return _isChecks != null
|
| + ? _isChecks : const <DartType>[];
|
| + }
|
| +
|
| + void registerAsCast(DartType type) {
|
| + if (_asCasts == null) {
|
| + _asCasts = new Setlet<DartType>();
|
| + }
|
| + _asCasts.add(type);
|
| + }
|
| +
|
| + Iterable<DartType> get asCasts {
|
| + return _asCasts != null
|
| + ? _asCasts : const <DartType>[];
|
| + }
|
| +
|
| + void registerCheckedModeCheckedType(DartType type) {
|
| + if (_checkedModeChecks == null) {
|
| + _checkedModeChecks = new Setlet<DartType>();
|
| + }
|
| + _checkedModeChecks.add(type);
|
| + }
|
| +
|
| + Iterable<DartType> get checkedModeChecks {
|
| + return _checkedModeChecks != null
|
| + ? _checkedModeChecks : const <DartType>[];
|
| + }
|
| +
|
| + void registerClosurizedFunction(MethodElement element) {
|
| + if (_closurizedFunctions == null) {
|
| + _closurizedFunctions = new Setlet<MethodElement>();
|
| + }
|
| + _closurizedFunctions.add(element);
|
| + }
|
| +
|
| + Iterable<MethodElement> get closurizedFunctions {
|
| + return _closurizedFunctions != null
|
| + ? _closurizedFunctions : const <MethodElement>[];
|
| + }
|
| +
|
| + void registerClosure(LocalFunctionElement element) {
|
| + if (_closures == null) {
|
| + _closures = new Setlet<LocalFunctionElement>();
|
| + }
|
| + _closures.add(element);
|
| + }
|
| +
|
| + Iterable<LocalFunctionElement> get closures {
|
| + return _closures != null
|
| + ? _closures : const <LocalFunctionElement>[];
|
| + }
|
| +}
|
|
|