Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(935)

Unified Diff: pkg/compiler/lib/src/js_backend/backend_impact.dart

Issue 2531303002: Decouple WorkItem from Compiler (Closed)
Patch Set: Updated cf. comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend_helpers.dart ('k') | pkg/compiler/lib/src/js_backend/enqueuer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_backend/backend_impact.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index afbd270c88f853987f1f028258b68b06cd344413..b5b9e72fdef52ab41af1321a920a65dfe07bc438 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -24,17 +24,21 @@ enum BackendFeature {
/// A set of JavaScript backend dependencies.
class BackendImpact {
final List<Element> staticUses;
+ final List<Element> globalUses;
final List<Selector> dynamicUses;
final List<InterfaceType> instantiatedTypes;
final List<ClassElement> instantiatedClasses;
+ final List<ClassElement> globalClasses;
final List<BackendImpact> otherImpacts;
final EnumSet<BackendFeature> _features;
const BackendImpact(
{this.staticUses: const <Element>[],
+ this.globalUses: const <Element>[],
this.dynamicUses: const <Selector>[],
this.instantiatedTypes: const <InterfaceType>[],
this.instantiatedClasses: const <ClassElement>[],
+ this.globalClasses: const <ClassElement>[],
this.otherImpacts: const <BackendImpact>[],
EnumSet<BackendFeature> features: const EnumSet<BackendFeature>.fixed(0)})
: this._features = features;
@@ -58,172 +62,131 @@ class BackendImpacts {
BackendImpact _getRuntimeTypeArgument;
BackendImpact get getRuntimeTypeArgument {
- if (_getRuntimeTypeArgument == null) {
- _getRuntimeTypeArgument = new BackendImpact(staticUses: [
- helpers.getRuntimeTypeArgument,
- helpers.getTypeArgumentByIndex,
- ]);
- }
- return _getRuntimeTypeArgument;
+ return _getRuntimeTypeArgument ??= new BackendImpact(globalUses: [
+ helpers.getRuntimeTypeArgument,
+ helpers.getTypeArgumentByIndex,
+ ]);
}
BackendImpact _computeSignature;
BackendImpact get computeSignature {
- if (_computeSignature == null) {
- _computeSignature = new BackendImpact(staticUses: [
- helpers.setRuntimeTypeInfo,
- helpers.getRuntimeTypeInfo,
- helpers.computeSignature,
- helpers.getRuntimeTypeArguments
- ], otherImpacts: [
- listValues
- ]);
- }
- return _computeSignature;
+ return _computeSignature ??= new BackendImpact(globalUses: [
+ helpers.setRuntimeTypeInfo,
+ helpers.getRuntimeTypeInfo,
+ helpers.computeSignature,
+ helpers.getRuntimeTypeArguments
+ ], otherImpacts: [
+ listValues
+ ]);
}
BackendImpact _mainWithArguments;
BackendImpact get mainWithArguments {
- if (_mainWithArguments == null) {
- _mainWithArguments = new BackendImpact(
- instantiatedClasses: [
- helpers.jsArrayClass,
- helpers.jsStringClass]);
- }
- return _mainWithArguments;
+ return _mainWithArguments ??= new BackendImpact(
+ instantiatedClasses: [helpers.jsArrayClass, helpers.jsStringClass]);
}
BackendImpact _asyncBody;
BackendImpact get asyncBody {
- if (_asyncBody == null) {
- _asyncBody = new BackendImpact(staticUses: [
- helpers.asyncHelper,
- helpers.syncCompleterConstructor,
- helpers.streamIteratorConstructor,
- helpers.wrapBody
- ]);
- }
- return _asyncBody;
+ return _asyncBody ??= new BackendImpact(staticUses: [
+ helpers.asyncHelper,
+ helpers.syncCompleterConstructor,
+ helpers.streamIteratorConstructor,
+ helpers.wrapBody
+ ]);
}
BackendImpact _syncStarBody;
BackendImpact get syncStarBody {
- if (_syncStarBody == null) {
- _syncStarBody = new BackendImpact(staticUses: [
- helpers.syncStarIterableConstructor,
- helpers.endOfIteration,
- helpers.yieldStar,
- helpers.syncStarUncaughtError
- ], instantiatedClasses: [
- helpers.syncStarIterable
- ]);
- }
- return _syncStarBody;
+ return _syncStarBody ??= new BackendImpact(staticUses: [
+ helpers.syncStarIterableConstructor,
+ helpers.endOfIteration,
+ helpers.yieldStar,
+ helpers.syncStarUncaughtError
+ ], instantiatedClasses: [
+ helpers.syncStarIterable
+ ]);
}
BackendImpact _asyncStarBody;
BackendImpact get asyncStarBody {
- if (_asyncStarBody == null) {
- _asyncStarBody = new BackendImpact(staticUses: [
- helpers.asyncStarHelper,
- helpers.streamOfController,
- helpers.yieldSingle,
- helpers.yieldStar,
- helpers.asyncStarControllerConstructor,
- helpers.streamIteratorConstructor,
- helpers.wrapBody
- ], instantiatedClasses: [
- helpers.asyncStarController
- ]);
- }
- return _asyncStarBody;
+ return _asyncStarBody ??= new BackendImpact(staticUses: [
+ helpers.asyncStarHelper,
+ helpers.streamOfController,
+ helpers.yieldSingle,
+ helpers.yieldStar,
+ helpers.asyncStarControllerConstructor,
+ helpers.streamIteratorConstructor,
+ helpers.wrapBody
+ ], instantiatedClasses: [
+ helpers.asyncStarController
+ ]);
}
BackendImpact _typeVariableBoundCheck;
BackendImpact get typeVariableBoundCheck {
- if (_typeVariableBoundCheck == null) {
- _typeVariableBoundCheck = new BackendImpact(
- staticUses: [helpers.throwTypeError, helpers.assertIsSubtype]);
- }
- return _typeVariableBoundCheck;
+ return _typeVariableBoundCheck ??= new BackendImpact(
+ staticUses: [helpers.throwTypeError, helpers.assertIsSubtype]);
}
BackendImpact _abstractClassInstantiation;
BackendImpact get abstractClassInstantiation {
- if (_abstractClassInstantiation == null) {
- _abstractClassInstantiation = new BackendImpact(
- staticUses: [helpers.throwAbstractClassInstantiationError],
- otherImpacts: [_needsString('Needed to encode the message.')]);
- }
- return _abstractClassInstantiation;
+ return _abstractClassInstantiation ??= new BackendImpact(
+ staticUses: [helpers.throwAbstractClassInstantiationError],
+ otherImpacts: [_needsString('Needed to encode the message.')]);
}
BackendImpact _fallThroughError;
BackendImpact get fallThroughError {
- if (_fallThroughError == null) {
- _fallThroughError =
- new BackendImpact(staticUses: [helpers.fallThroughError]);
- }
- return _fallThroughError;
+ return _fallThroughError ??=
+ new BackendImpact(staticUses: [helpers.fallThroughError]);
}
BackendImpact _asCheck;
BackendImpact get asCheck {
- if (_asCheck == null) {
- _asCheck = new BackendImpact(staticUses: [helpers.throwRuntimeError]);
- }
- return _asCheck;
+ return _asCheck ??=
+ new BackendImpact(staticUses: [helpers.throwRuntimeError]);
}
BackendImpact _throwNoSuchMethod;
BackendImpact get throwNoSuchMethod {
- if (_throwNoSuchMethod == null) {
- _throwNoSuchMethod = new BackendImpact(staticUses: [
- helpers.throwNoSuchMethod
- ], otherImpacts: [
- // Also register the types of the arguments passed to this method.
- _needsList(
- 'Needed to encode the arguments for throw NoSuchMethodError.'),
- _needsString('Needed to encode the name for throw NoSuchMethodError.')
- ]);
- }
- return _throwNoSuchMethod;
+ return _throwNoSuchMethod ??= new BackendImpact(staticUses: [
+ helpers.throwNoSuchMethod
+ ], otherImpacts: [
+ // Also register the types of the arguments passed to this method.
+ _needsList('Needed to encode the arguments for throw NoSuchMethodError.'),
+ _needsString('Needed to encode the name for throw NoSuchMethodError.')
+ ]);
}
BackendImpact _stringValues;
BackendImpact get stringValues {
- if (_stringValues == null) {
- _stringValues =
- new BackendImpact(instantiatedClasses: [helpers.jsStringClass]);
- }
- return _stringValues;
+ return _stringValues ??=
+ new BackendImpact(instantiatedClasses: [helpers.jsStringClass]);
}
BackendImpact _numValues;
BackendImpact get numValues {
- if (_numValues == null) {
- _numValues = new BackendImpact(instantiatedClasses: [
- helpers.jsIntClass,
- helpers.jsPositiveIntClass,
- helpers.jsUInt32Class,
- helpers.jsUInt31Class,
- helpers.jsNumberClass,
- helpers.jsDoubleClass
- ]);
- }
- return _numValues;
+ return _numValues ??= new BackendImpact(instantiatedClasses: [
+ helpers.jsIntClass,
+ helpers.jsPositiveIntClass,
+ helpers.jsUInt32Class,
+ helpers.jsUInt31Class,
+ helpers.jsNumberClass,
+ helpers.jsDoubleClass
+ ]);
}
BackendImpact get intValues => numValues;
@@ -233,67 +196,51 @@ class BackendImpacts {
BackendImpact _boolValues;
BackendImpact get boolValues {
- if (_boolValues == null) {
- _boolValues =
- new BackendImpact(instantiatedClasses: [helpers.jsBoolClass]);
- }
- return _boolValues;
+ return _boolValues ??=
+ new BackendImpact(instantiatedClasses: [helpers.jsBoolClass]);
}
BackendImpact _nullValue;
BackendImpact get nullValue {
- if (_nullValue == null) {
- _nullValue =
- new BackendImpact(instantiatedClasses: [helpers.jsNullClass]);
- }
- return _nullValue;
+ return _nullValue ??=
+ new BackendImpact(instantiatedClasses: [helpers.jsNullClass]);
}
BackendImpact _listValues;
BackendImpact get listValues {
- if (_listValues == null) {
- _listValues = new BackendImpact(instantiatedClasses: [
- helpers.jsArrayClass,
- helpers.jsMutableArrayClass,
- helpers.jsFixedArrayClass,
- helpers.jsExtendableArrayClass,
- helpers.jsUnmodifiableArrayClass
- ]);
- }
- return _listValues;
+ return _listValues ??= new BackendImpact(globalClasses: [
+ helpers.jsArrayClass,
+ helpers.jsMutableArrayClass,
+ helpers.jsFixedArrayClass,
+ helpers.jsExtendableArrayClass,
+ helpers.jsUnmodifiableArrayClass
+ ]);
}
BackendImpact _throwRuntimeError;
BackendImpact get throwRuntimeError {
- if (_throwRuntimeError == null) {
- _throwRuntimeError = new BackendImpact(staticUses: [
- helpers.throwRuntimeError
- ], otherImpacts: [
- // Also register the types of the arguments passed to this method.
- stringValues
- ]);
- }
- return _throwRuntimeError;
+ return _throwRuntimeError ??= new BackendImpact(staticUses: [
+ helpers.throwRuntimeError
+ ], otherImpacts: [
+ // Also register the types of the arguments passed to this method.
+ stringValues
+ ]);
}
BackendImpact _superNoSuchMethod;
BackendImpact get superNoSuchMethod {
- if (_superNoSuchMethod == null) {
- _superNoSuchMethod = new BackendImpact(staticUses: [
- helpers.createInvocationMirror,
- helpers.objectNoSuchMethod
- ], otherImpacts: [
- _needsInt(
- 'Needed to encode the invocation kind of super.noSuchMethod.'),
- _needsList('Needed to encode the arguments of super.noSuchMethod.'),
- _needsString('Needed to encode the name of super.noSuchMethod.')
- ]);
- }
- return _superNoSuchMethod;
+ return _superNoSuchMethod ??= new BackendImpact(staticUses: [
+ helpers.createInvocationMirror,
+ helpers.objectNoSuchMethod
+ ], otherImpacts: [
+ _needsInt('Needed to encode the invocation kind of super.noSuchMethod.'),
+ _needsList('Needed to encode the arguments of super.noSuchMethod.'),
+ _needsString('Needed to encode the name of super.noSuchMethod.')
+ ]);
}
BackendImpact _constantMapLiteral;
@@ -317,22 +264,16 @@ class BackendImpacts {
BackendImpact _symbolConstructor;
BackendImpact get symbolConstructor {
- if (_symbolConstructor == null) {
- _symbolConstructor =
- new BackendImpact(staticUses: [helpers.symbolValidatedConstructor]);
- }
- return _symbolConstructor;
+ return _symbolConstructor ??=
+ new BackendImpact(staticUses: [helpers.symbolValidatedConstructor]);
}
BackendImpact _constSymbol;
BackendImpact get constSymbol {
- if (_constSymbol == null) {
- _constSymbol = new BackendImpact(
- instantiatedClasses: [commonElements.symbolClass],
- staticUses: [commonElements.symbolConstructor.declaration]);
- }
- return _constSymbol;
+ return _constSymbol ??= new BackendImpact(
+ instantiatedClasses: [commonElements.symbolClass],
+ staticUses: [commonElements.symbolConstructor.declaration]);
}
/// Helper for registering that `int` is needed.
@@ -356,52 +297,37 @@ class BackendImpacts {
BackendImpact _assertWithoutMessage;
BackendImpact get assertWithoutMessage {
- if (_assertWithoutMessage == null) {
- _assertWithoutMessage =
- new BackendImpact(staticUses: [helpers.assertHelper]);
- }
- return _assertWithoutMessage;
+ return _assertWithoutMessage ??=
+ new BackendImpact(staticUses: [helpers.assertHelper]);
}
BackendImpact _assertWithMessage;
BackendImpact get assertWithMessage {
- if (_assertWithMessage == null) {
- _assertWithMessage = new BackendImpact(
- staticUses: [helpers.assertTest, helpers.assertThrow]);
- }
- return _assertWithMessage;
+ return _assertWithMessage ??= new BackendImpact(
+ staticUses: [helpers.assertTest, helpers.assertThrow]);
}
BackendImpact _asyncForIn;
BackendImpact get asyncForIn {
- if (_asyncForIn == null) {
- _asyncForIn =
- new BackendImpact(staticUses: [helpers.streamIteratorConstructor]);
- }
- return _asyncForIn;
+ return _asyncForIn ??=
+ new BackendImpact(staticUses: [helpers.streamIteratorConstructor]);
}
BackendImpact _stringInterpolation;
BackendImpact get stringInterpolation {
- if (_stringInterpolation == null) {
- _stringInterpolation = new BackendImpact(
- dynamicUses: [Selectors.toString_],
- staticUses: [helpers.stringInterpolationHelper],
- otherImpacts: [_needsString('Strings are created.')]);
- }
- return _stringInterpolation;
+ return _stringInterpolation ??= new BackendImpact(
+ dynamicUses: [Selectors.toString_],
+ staticUses: [helpers.stringInterpolationHelper],
+ otherImpacts: [_needsString('Strings are created.')]);
}
BackendImpact _stringJuxtaposition;
BackendImpact get stringJuxtaposition {
- if (_stringJuxtaposition == null) {
- _stringJuxtaposition = _needsString('String.concat is used.');
- }
- return _stringJuxtaposition;
+ return _stringJuxtaposition ??= _needsString('String.concat is used.');
}
BackendImpact get nullLiteral => nullValue;
@@ -417,231 +343,368 @@ class BackendImpacts {
BackendImpact _catchStatement;
BackendImpact get catchStatement {
- if (_catchStatement == null) {
- _catchStatement = new BackendImpact(staticUses: [
- helpers.exceptionUnwrapper
- ], instantiatedClasses: [
- helpers.jsPlainJavaScriptObjectClass,
- helpers.jsUnknownJavaScriptObjectClass
- ]);
- }
- return _catchStatement;
+ return _catchStatement ??= new BackendImpact(staticUses: [
+ helpers.exceptionUnwrapper
+ ], instantiatedClasses: [
+ helpers.jsPlainJavaScriptObjectClass,
+ helpers.jsUnknownJavaScriptObjectClass
+ ]);
}
BackendImpact _throwExpression;
BackendImpact get throwExpression {
- if (_throwExpression == null) {
- _throwExpression = new BackendImpact(
- // We don't know ahead of time whether we will need the throw in a
- // statement context or an expression context, so we register both
- // here, even though we may not need the throwExpression helper.
- staticUses: [
- helpers.wrapExceptionHelper,
- helpers.throwExpressionHelper
- ]);
- }
- return _throwExpression;
+ return _throwExpression ??= new BackendImpact(
+ // We don't know ahead of time whether we will need the throw in a
+ // statement context or an expression context, so we register both
+ // here, even though we may not need the throwExpression helper.
+ staticUses: [
+ helpers.wrapExceptionHelper,
+ helpers.throwExpressionHelper
+ ]);
}
BackendImpact _lazyField;
BackendImpact get lazyField {
- if (_lazyField == null) {
- _lazyField = new BackendImpact(staticUses: [helpers.cyclicThrowHelper]);
- }
- return _lazyField;
+ return _lazyField ??=
+ new BackendImpact(staticUses: [helpers.cyclicThrowHelper]);
}
BackendImpact _typeLiteral;
BackendImpact get typeLiteral {
- if (_typeLiteral == null) {
- _typeLiteral = new BackendImpact(
- instantiatedClasses: [backend.backendClasses.typeImplementation],
- staticUses: [helpers.createRuntimeType]);
- }
- return _typeLiteral;
+ return _typeLiteral ??= new BackendImpact(
+ instantiatedClasses: [backend.backendClasses.typeImplementation],
+ staticUses: [helpers.createRuntimeType]);
}
BackendImpact _stackTraceInCatch;
BackendImpact get stackTraceInCatch {
- if (_stackTraceInCatch == null) {
- _stackTraceInCatch = new BackendImpact(
- instantiatedClasses: [helpers.stackTraceClass],
- staticUses: [helpers.traceFromException]);
- }
- return _stackTraceInCatch;
+ return _stackTraceInCatch ??= new BackendImpact(
+ instantiatedClasses: [helpers.stackTraceClass],
+ staticUses: [helpers.traceFromException]);
}
BackendImpact _syncForIn;
BackendImpact get syncForIn {
- if (_syncForIn == null) {
- _syncForIn = new BackendImpact(
- // The SSA builder recognizes certain for-in loops and can generate
- // calls to throwConcurrentModificationError.
- staticUses: [helpers.checkConcurrentModificationError]);
- }
- return _syncForIn;
+ return _syncForIn ??= new BackendImpact(
+ // The SSA builder recognizes certain for-in loops and can generate
+ // calls to throwConcurrentModificationError.
+ staticUses: [helpers.checkConcurrentModificationError]);
}
BackendImpact _typeVariableExpression;
BackendImpact get typeVariableExpression {
- if (_typeVariableExpression == null) {
- _typeVariableExpression = new BackendImpact(staticUses: [
- helpers.setRuntimeTypeInfo,
- helpers.getRuntimeTypeInfo,
- helpers.runtimeTypeToString,
- helpers.createRuntimeType
- ], otherImpacts: [
- listValues,
- getRuntimeTypeArgument,
- _needsInt('Needed for accessing a type variable literal on this.')
- ]);
- }
- return _typeVariableExpression;
+ return _typeVariableExpression ??= new BackendImpact(staticUses: [
+ helpers.setRuntimeTypeInfo,
+ helpers.getRuntimeTypeInfo,
+ helpers.runtimeTypeToString,
+ helpers.createRuntimeType
+ ], otherImpacts: [
+ listValues,
+ getRuntimeTypeArgument,
+ _needsInt('Needed for accessing a type variable literal on this.')
+ ]);
}
BackendImpact _typeCheck;
BackendImpact get typeCheck {
- if (_typeCheck == null) {
- _typeCheck = new BackendImpact(otherImpacts: [boolValues]);
- }
- return _typeCheck;
+ return _typeCheck ??= new BackendImpact(otherImpacts: [boolValues]);
}
BackendImpact _checkedModeTypeCheck;
BackendImpact get checkedModeTypeCheck {
- if (_checkedModeTypeCheck == null) {
- _checkedModeTypeCheck =
- new BackendImpact(staticUses: [helpers.throwRuntimeError]);
- }
- return _checkedModeTypeCheck;
+ return _checkedModeTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.throwRuntimeError]);
}
BackendImpact _malformedTypeCheck;
BackendImpact get malformedTypeCheck {
- if (_malformedTypeCheck == null) {
- _malformedTypeCheck =
- new BackendImpact(staticUses: [helpers.throwTypeError]);
- }
- return _malformedTypeCheck;
+ return _malformedTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.throwTypeError]);
}
BackendImpact _genericTypeCheck;
BackendImpact get genericTypeCheck {
- if (_genericTypeCheck == null) {
- _genericTypeCheck = new BackendImpact(staticUses: [
- helpers.checkSubtype,
- // TODO(johnniwinther): Investigate why this is needed.
- helpers.setRuntimeTypeInfo,
- helpers.getRuntimeTypeInfo
- ], otherImpacts: [
- listValues,
- getRuntimeTypeArgument
- ]);
- }
- return _genericTypeCheck;
+ return _genericTypeCheck ??= new BackendImpact(staticUses: [
+ helpers.checkSubtype,
+ // TODO(johnniwinther): Investigate why this is needed.
+ helpers.setRuntimeTypeInfo,
+ helpers.getRuntimeTypeInfo
+ ], otherImpacts: [
+ listValues,
+ getRuntimeTypeArgument
+ ]);
}
BackendImpact _genericIsCheck;
BackendImpact get genericIsCheck {
- if (_genericIsCheck == null) {
- _genericIsCheck = new BackendImpact(otherImpacts: [intValues]);
- }
- return _genericIsCheck;
+ return _genericIsCheck ??= new BackendImpact(otherImpacts: [intValues]);
}
BackendImpact _genericCheckedModeTypeCheck;
BackendImpact get genericCheckedModeTypeCheck {
- if (_genericCheckedModeTypeCheck == null) {
- _genericCheckedModeTypeCheck =
- new BackendImpact(staticUses: [helpers.assertSubtype]);
- }
- return _genericCheckedModeTypeCheck;
+ return _genericCheckedModeTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.assertSubtype]);
}
BackendImpact _typeVariableTypeCheck;
BackendImpact get typeVariableTypeCheck {
- if (_typeVariableTypeCheck == null) {
- _typeVariableTypeCheck =
- new BackendImpact(staticUses: [helpers.checkSubtypeOfRuntimeType]);
- }
- return _typeVariableTypeCheck;
+ return _typeVariableTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.checkSubtypeOfRuntimeType]);
}
BackendImpact _typeVariableCheckedModeTypeCheck;
BackendImpact get typeVariableCheckedModeTypeCheck {
- if (_typeVariableCheckedModeTypeCheck == null) {
- _typeVariableCheckedModeTypeCheck =
- new BackendImpact(staticUses: [helpers.assertSubtypeOfRuntimeType]);
- }
- return _typeVariableCheckedModeTypeCheck;
+ return _typeVariableCheckedModeTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.assertSubtypeOfRuntimeType]);
}
BackendImpact _functionTypeCheck;
BackendImpact get functionTypeCheck {
- if (_functionTypeCheck == null) {
- _functionTypeCheck =
- new BackendImpact(staticUses: [helpers.functionTypeTestMetaHelper]);
- }
- return _functionTypeCheck;
+ return _functionTypeCheck ??=
+ new BackendImpact(staticUses: [helpers.functionTypeTestMetaHelper]);
}
BackendImpact _nativeTypeCheck;
BackendImpact get nativeTypeCheck {
- if (_nativeTypeCheck == null) {
- _nativeTypeCheck = new BackendImpact(staticUses: [
- // We will neeed to add the "$is" and "$as" properties on the
- // JavaScript object prototype, so we make sure
- // [:defineProperty:] is compiled.
- helpers.defineProperty
- ]);
- }
- return _nativeTypeCheck;
+ return _nativeTypeCheck ??= new BackendImpact(staticUses: [
+ // We will neeed to add the "$is" and "$as" properties on the
+ // JavaScript object prototype, so we make sure
+ // [:defineProperty:] is compiled.
+ helpers.defineProperty
+ ]);
}
BackendImpact _closure;
BackendImpact get closure {
- if (_closure == null) {
- _closure = new BackendImpact(
- instantiatedClasses: [commonElements.functionClass]);
- }
- return _closure;
+ return _closure ??=
+ new BackendImpact(instantiatedClasses: [commonElements.functionClass]);
}
BackendImpact _interceptorUse;
BackendImpact get interceptorUse {
- if (_interceptorUse == null) {
- _interceptorUse = new BackendImpact(
- staticUses: [
- helpers.getNativeInterceptorMethod
- ],
- instantiatedClasses: [
- helpers.jsJavaScriptObjectClass,
- helpers.jsPlainJavaScriptObjectClass,
- helpers.jsJavaScriptFunctionClass
- ],
- features: new EnumSet<BackendFeature>.fromValues([
- BackendFeature.needToInitializeDispatchProperty,
- BackendFeature.needToInitializeIsolateAffinityTag
- ], fixed: true));
- }
- return _interceptorUse;
+ return _interceptorUse ??= new BackendImpact(
+ staticUses: [
+ helpers.getNativeInterceptorMethod
+ ],
+ instantiatedClasses: [
+ helpers.jsJavaScriptObjectClass,
+ helpers.jsPlainJavaScriptObjectClass,
+ helpers.jsJavaScriptFunctionClass
+ ],
+ features: new EnumSet<BackendFeature>.fromValues([
+ BackendFeature.needToInitializeDispatchProperty,
+ BackendFeature.needToInitializeIsolateAffinityTag
+ ], fixed: true));
+ }
+
+ BackendImpact _numClasses;
+
+ BackendImpact get numClasses {
+ return _numClasses ??= new BackendImpact(
+ // The backend will try to optimize number operations and use the
+ // `iae` helper directly.
+ globalUses: [helpers.throwIllegalArgumentException]);
+ }
+
+ BackendImpact _listOrStringClasses;
+
+ BackendImpact get listOrStringClasses {
+ return _listOrStringClasses ??= new BackendImpact(
+ // The backend will try to optimize array and string access and use the
+ // `ioore` and `iae` helpers directly.
+ globalUses: [
+ helpers.throwIndexOutOfRangeException,
+ helpers.throwIllegalArgumentException
+ ]);
+ }
+
+ BackendImpact _functionClass;
+
+ BackendImpact get functionClass {
+ return _functionClass ??=
+ new BackendImpact(globalClasses: [helpers.closureClass]);
+ }
+
+ BackendImpact _mapClass;
+
+ BackendImpact get mapClass {
+ return _mapClass ??= new BackendImpact(
+ // The backend will use a literal list to initialize the entries
+ // of the map.
+ globalClasses: [
+ helpers.coreClasses.listClass,
+ helpers.mapLiteralClass
+ ]);
+ }
+
+ BackendImpact _boundClosureClass;
+
+ BackendImpact get boundClosureClass {
+ return _boundClosureClass ??=
+ new BackendImpact(globalClasses: [helpers.boundClosureClass]);
+ }
+
+ BackendImpact _nativeOrExtendsClass;
+
+ BackendImpact get nativeOrExtendsClass {
+ return _nativeOrExtendsClass ??= new BackendImpact(globalUses: [
+ helpers.getNativeInterceptorMethod
+ ], globalClasses: [
+ helpers.jsInterceptorClass,
+ helpers.jsJavaScriptObjectClass,
+ helpers.jsPlainJavaScriptObjectClass,
+ helpers.jsJavaScriptFunctionClass
+ ]);
+ }
+
+ BackendImpact _mapLiteralClass;
+
+ BackendImpact get mapLiteralClass {
+ return _mapLiteralClass ??= new BackendImpact(globalUses: [
+ helpers.mapLiteralConstructor,
+ helpers.mapLiteralConstructorEmpty,
+ helpers.mapLiteralUntypedMaker,
+ helpers.mapLiteralUntypedEmptyMaker
+ ]);
+ }
+
+ BackendImpact _closureClass;
+
+ BackendImpact get closureClass {
+ return _closureClass ??=
+ new BackendImpact(globalUses: [helpers.closureFromTearOff]);
+ }
+
+ BackendImpact _listClasses;
+
+ BackendImpact get listClasses {
+ return _listClasses ??= new BackendImpact(
+ // Literal lists can be translated into calls to these functions:
+ globalUses: [
+ helpers.jsArrayTypedConstructor,
+ helpers.setRuntimeTypeInfo,
+ helpers.getTypeArgumentByIndex
+ ]);
+ }
+
+ BackendImpact _jsIndexingBehavior;
+
+ BackendImpact get jsIndexingBehavior {
+ return _jsIndexingBehavior ??= new BackendImpact(
+ // These two helpers are used by the emitter and the codegen.
+ // Because we cannot enqueue elements at the time of emission,
+ // we make sure they are always generated.
+ globalUses: [helpers.isJsIndexable]);
+ }
+
+ BackendImpact _enableTypeAssertions;
+
+ BackendImpact get enableTypeAssertions {
+ return _enableTypeAssertions ??= new BackendImpact(
+ // Register the helper that checks if the expression in an if/while/for
+ // is a boolean.
+ // TODO(johnniwinther): Should this be registered through a [Feature]
+ // instead?
+ globalUses: [helpers.boolConversionCheck]);
+ }
+
+ BackendImpact _traceHelper;
+
+ BackendImpact get traceHelper {
+ return _traceHelper ??=
+ new BackendImpact(globalUses: [helpers.traceHelper]);
+ }
+
+ BackendImpact _assertUnreachable;
+
+ BackendImpact get assertUnreachable {
+ return _assertUnreachable ??=
+ new BackendImpact(globalUses: [helpers.assertUnreachableMethod]);
+ }
+
+ BackendImpact _runtimeTypeSupport;
+
+ BackendImpact get runtimeTypeSupport {
+ return _runtimeTypeSupport ??= new BackendImpact(
+ globalClasses: [helpers.coreClasses.listClass],
+ globalUses: [helpers.setRuntimeTypeInfo, helpers.getRuntimeTypeInfo],
+ otherImpacts: [getRuntimeTypeArgument, computeSignature]);
+ }
+
+ BackendImpact _deferredLoading;
+
+ BackendImpact get deferredLoading {
+ return _deferredLoading ??=
+ new BackendImpact(globalUses: [helpers.checkDeferredIsLoaded],
+ // Also register the types of the arguments passed to this method.
+ globalClasses: [helpers.coreClasses.stringClass]);
+ }
+
+ BackendImpact _noSuchMethodSupport;
+
+ BackendImpact get noSuchMethodSupport {
+ return _noSuchMethodSupport ??= new BackendImpact(
+ staticUses: [helpers.createInvocationMirror],
+ dynamicUses: [Selectors.noSuchMethod_]);
+ }
+
+ BackendImpact _isolateSupport;
+
+ /// Backend impact for isolate support.
+ BackendImpact get isolateSupport {
+ return _isolateSupport ??=
+ new BackendImpact(globalUses: [helpers.startRootIsolate]);
+ }
+
+ BackendImpact _isolateSupportForResolution;
+
+ /// Additional backend impact for isolate support in resolution.
+ BackendImpact get isolateSupportForResolution {
+ return _isolateSupportForResolution ??= new BackendImpact(
+ globalUses: [helpers.currentIsolate, helpers.callInIsolate]);
+ }
+
+ BackendImpact _loadLibrary;
+
+ /// Backend impact for accessing a `loadLibrary` function on a deferred
+ /// prefix.
+ BackendImpact get loadLibrary {
+ return _loadLibrary ??=
+ new BackendImpact(globalUses: [helpers.loadLibraryWrapper]);
+ }
+
+ BackendImpact _memberClosure;
+
+ /// Backend impact for performing member closurization.
+ BackendImpact get memberClosure {
+ return _memberClosure ??=
+ new BackendImpact(globalClasses: [helpers.boundClosureClass]);
+ }
+
+ BackendImpact _staticClosure;
+
+ /// Backend impact for performing closurization of a top-level or static
+ /// function.
+ BackendImpact get staticClosure {
+ return _staticClosure ??=
+ new BackendImpact(globalClasses: [helpers.closureClass]);
}
}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend_helpers.dart ('k') | pkg/compiler/lib/src/js_backend/enqueuer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698