Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/impact_transformer.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart |
| index 998b9d4b90a6cd857634de36e325e0bf291fc039..1c6312e4e351b53666657d47ea08846cc93d6dde 100644 |
| --- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart |
| +++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart |
| @@ -5,121 +5,146 @@ |
| library js_backend.backend.impact_transformer; |
| import '../common.dart'; |
| +import '../common_elements.dart'; |
| import '../common/backend_api.dart' show ImpactTransformer; |
| import '../common/codegen.dart' show CodegenImpact; |
| -import '../common/resolution.dart' show ResolutionImpact; |
| +import '../common/resolution.dart' show Resolution, ResolutionImpact; |
| import '../constants/expressions.dart'; |
| import '../constants/values.dart'; |
| import '../common_elements.dart' show ElementEnvironment; |
| import '../elements/elements.dart'; |
| import '../elements/resolution_types.dart'; |
| import '../enqueue.dart' show ResolutionEnqueuer; |
| +import '../native/enqueue.dart'; |
| import '../native/native.dart' as native; |
| +import '../options.dart'; |
| import '../universe/feature.dart'; |
| import '../universe/use.dart' |
| show StaticUse, StaticUseKind, TypeUse, TypeUseKind; |
| import '../universe/world_impact.dart' show TransformedWorldImpact, WorldImpact; |
| import '../util/util.dart'; |
| import 'backend.dart'; |
| +import 'backend_helpers.dart'; |
| import 'backend_impact.dart'; |
| import 'backend_usage.dart'; |
| import 'checked_mode_helpers.dart'; |
| +import 'custom_elements_analysis.dart'; |
| +import 'interceptor_data.dart'; |
| +import 'lookup_map_analysis.dart'; |
| +import 'mirrors_data.dart'; |
| +import 'namer.dart'; |
| +import 'native_data.dart'; |
| class JavaScriptImpactTransformer extends ImpactTransformer { |
| - final JavaScriptBackend backend; |
| - |
| - JavaScriptImpactTransformer(this.backend); |
| - |
| - BackendImpacts get impacts => backend.impacts; |
| - |
| - ElementEnvironment get elementEnvironment => |
| - backend.compiler.elementEnvironment; |
| + final CompilerOptions _options; |
| + final Resolution _resolution; |
| + final ElementEnvironment _elementEnvironment; |
| + final CommonElements _commonElements; |
| + final BackendImpacts _impacts; |
| + final NativeClassData _nativeClassData; |
| + final NativeResolutionEnqueuer _nativeResolutionEnqueuer; |
| + final BackendUsageBuilder _backendUsageBuider; |
| + final MirrorsData _mirrorsData; |
| + final CustomElementsResolutionAnalysis _customElementsResolutionAnalysis; |
| + final RuntimeTypesNeedBuilder _rtiNeedBuilder; |
| + |
| + JavaScriptImpactTransformer( |
| + this._options, |
| + this._resolution, |
| + this._elementEnvironment, |
| + this._commonElements, |
| + this._impacts, |
| + this._nativeClassData, |
| + this._nativeResolutionEnqueuer, |
| + this._backendUsageBuider, |
| + this._mirrorsData, |
| + this._customElementsResolutionAnalysis, |
| + this._rtiNeedBuilder); |
| @override |
| WorldImpact transformResolutionImpact( |
| ResolutionEnqueuer enqueuer, ResolutionImpact worldImpact) { |
| - BackendUsageBuilder backendUsage = backend.backendUsageBuilder; |
| TransformedWorldImpact transformed = |
| new TransformedWorldImpact(worldImpact); |
| void registerImpact(BackendImpact impact) { |
| - impact.registerImpact(transformed, elementEnvironment); |
| - backendUsage.processBackendImpact(impact); |
| + impact.registerImpact(transformed, _elementEnvironment); |
| + _backendUsageBuider.processBackendImpact(impact); |
| } |
| for (Feature feature in worldImpact.features) { |
| switch (feature) { |
| case Feature.ABSTRACT_CLASS_INSTANTIATION: |
| - registerImpact(impacts.abstractClassInstantiation); |
| + registerImpact(_impacts.abstractClassInstantiation); |
| break; |
| case Feature.ASSERT: |
| - registerImpact(impacts.assertWithoutMessage); |
| + registerImpact(_impacts.assertWithoutMessage); |
| break; |
| case Feature.ASSERT_WITH_MESSAGE: |
| - registerImpact(impacts.assertWithMessage); |
| + registerImpact(_impacts.assertWithMessage); |
| break; |
| case Feature.ASYNC: |
| - registerImpact(impacts.asyncBody); |
| + registerImpact(_impacts.asyncBody); |
| break; |
| case Feature.ASYNC_FOR_IN: |
| - registerImpact(impacts.asyncForIn); |
| + registerImpact(_impacts.asyncForIn); |
| break; |
| case Feature.ASYNC_STAR: |
| - registerImpact(impacts.asyncStarBody); |
| + registerImpact(_impacts.asyncStarBody); |
| break; |
| case Feature.CATCH_STATEMENT: |
| - registerImpact(impacts.catchStatement); |
| + registerImpact(_impacts.catchStatement); |
| break; |
| case Feature.COMPILE_TIME_ERROR: |
| - if (backend.compiler.options.generateCodeWithCompileTimeErrors) { |
| + if (_options.generateCodeWithCompileTimeErrors) { |
| // TODO(johnniwinther): This should have its own uncatchable error. |
| - registerImpact(impacts.throwRuntimeError); |
| + registerImpact(_impacts.throwRuntimeError); |
| } |
| break; |
| case Feature.FALL_THROUGH_ERROR: |
| - registerImpact(impacts.fallThroughError); |
| + registerImpact(_impacts.fallThroughError); |
| break; |
| case Feature.FIELD_WITHOUT_INITIALIZER: |
| case Feature.LOCAL_WITHOUT_INITIALIZER: |
| transformed.registerTypeUse( |
| - new TypeUse.instantiation(backend.commonElements.nullType)); |
| - registerImpact(impacts.nullLiteral); |
| + new TypeUse.instantiation(_commonElements.nullType)); |
| + registerImpact(_impacts.nullLiteral); |
| break; |
| case Feature.LAZY_FIELD: |
| - registerImpact(impacts.lazyField); |
| + registerImpact(_impacts.lazyField); |
| break; |
| case Feature.STACK_TRACE_IN_CATCH: |
| - registerImpact(impacts.stackTraceInCatch); |
| + registerImpact(_impacts.stackTraceInCatch); |
| break; |
| case Feature.STRING_INTERPOLATION: |
| - registerImpact(impacts.stringInterpolation); |
| + registerImpact(_impacts.stringInterpolation); |
| break; |
| case Feature.STRING_JUXTAPOSITION: |
| - registerImpact(impacts.stringJuxtaposition); |
| + registerImpact(_impacts.stringJuxtaposition); |
| break; |
| case Feature.SUPER_NO_SUCH_METHOD: |
| - registerImpact(impacts.superNoSuchMethod); |
| + registerImpact(_impacts.superNoSuchMethod); |
| break; |
| case Feature.SYMBOL_CONSTRUCTOR: |
| - registerImpact(impacts.symbolConstructor); |
| + registerImpact(_impacts.symbolConstructor); |
| break; |
| case Feature.SYNC_FOR_IN: |
| - registerImpact(impacts.syncForIn); |
| + registerImpact(_impacts.syncForIn); |
| break; |
| case Feature.SYNC_STAR: |
| - registerImpact(impacts.syncStarBody); |
| + registerImpact(_impacts.syncStarBody); |
| break; |
| case Feature.THROW_EXPRESSION: |
| - registerImpact(impacts.throwExpression); |
| + registerImpact(_impacts.throwExpression); |
| break; |
| case Feature.THROW_NO_SUCH_METHOD: |
| - registerImpact(impacts.throwNoSuchMethod); |
| + registerImpact(_impacts.throwNoSuchMethod); |
| break; |
| case Feature.THROW_RUNTIME_ERROR: |
| - registerImpact(impacts.throwRuntimeError); |
| + registerImpact(_impacts.throwRuntimeError); |
| break; |
| case Feature.TYPE_VARIABLE_BOUNDS_CHECK: |
| - registerImpact(impacts.typeVariableBoundCheck); |
| + registerImpact(_impacts.typeVariableBoundCheck); |
| break; |
| } |
| } |
| @@ -142,7 +167,7 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| hasAsCast = true; |
| break; |
| case TypeUseKind.CHECKED_MODE_CHECK: |
| - if (backend.compiler.options.enableTypeAssertions) { |
| + if (_options.enableTypeAssertions) { |
| onIsCheck(type, transformed); |
| } |
| break; |
| @@ -150,7 +175,7 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| onIsCheck(type, transformed); |
| break; |
| case TypeUseKind.TYPE_LITERAL: |
| - backend.customElementsResolutionAnalysis.registerTypeLiteral(type); |
| + _customElementsResolutionAnalysis.registerTypeLiteral(type); |
| if (type.isTypeVariable && type is! MethodTypeVariableType) { |
| // GENERIC_METHODS: The `is!` test above filters away method type |
| // variables, because they have the value `dynamic` with the |
| @@ -158,9 +183,8 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| // '--generic-method-syntax'. This must be revised in order to |
| // support generic methods fully. |
| ClassElement cls = type.element.enclosingClass; |
| - backend.rtiNeedBuilder |
| - .registerClassUsingTypeVariableExpression(cls); |
| - registerImpact(impacts.typeVariableExpression); |
| + _rtiNeedBuilder.registerClassUsingTypeVariableExpression(cls); |
| + registerImpact(_impacts.typeVariableExpression); |
| } |
| hasTypeLiteral = true; |
| break; |
| @@ -168,20 +192,20 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| } |
| if (hasAsCast) { |
| - registerImpact(impacts.asCheck); |
| + registerImpact(_impacts.asCheck); |
| } |
| if (hasTypeLiteral) { |
| - transformed.registerTypeUse( |
| - new TypeUse.instantiation(backend.compiler.commonElements.typeType)); |
| - registerImpact(impacts.typeLiteral); |
| + transformed |
| + .registerTypeUse(new TypeUse.instantiation(_commonElements.typeType)); |
| + registerImpact(_impacts.typeLiteral); |
| } |
| for (MapLiteralUse mapLiteralUse in worldImpact.mapLiterals) { |
| // TODO(johnniwinther): Use the [isEmpty] property when factory |
| // constructors are registered directly. |
| if (mapLiteralUse.isConstant) { |
| - registerImpact(impacts.constantMapLiteral); |
| + registerImpact(_impacts.constantMapLiteral); |
| } else { |
| transformed |
| .registerTypeUse(new TypeUse.instantiation(mapLiteralUse.type)); |
| @@ -200,19 +224,19 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| } |
| if (worldImpact.constSymbolNames.isNotEmpty) { |
| - registerImpact(impacts.constSymbol); |
| + registerImpact(_impacts.constSymbol); |
| for (String constSymbolName in worldImpact.constSymbolNames) { |
| - backend.mirrorsData.registerConstSymbol(constSymbolName); |
| + _mirrorsData.registerConstSymbol(constSymbolName); |
| } |
| } |
| for (StaticUse staticUse in worldImpact.staticUses) { |
| switch (staticUse.kind) { |
| case StaticUseKind.CLOSURE: |
| - registerImpact(impacts.closure); |
| + registerImpact(_impacts.closure); |
| LocalFunctionElement closure = staticUse.element; |
| if (closure.type.containsTypeVariables) { |
| - registerImpact(impacts.computeSignature); |
| + registerImpact(_impacts.computeSignature); |
| } |
| break; |
| case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: |
| @@ -226,19 +250,19 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| for (ConstantExpression constant in worldImpact.constantLiterals) { |
| switch (constant.kind) { |
| case ConstantExpressionKind.NULL: |
| - registerImpact(impacts.nullLiteral); |
| + registerImpact(_impacts.nullLiteral); |
| break; |
| case ConstantExpressionKind.BOOL: |
| - registerImpact(impacts.boolLiteral); |
| + registerImpact(_impacts.boolLiteral); |
| break; |
| case ConstantExpressionKind.INT: |
| - registerImpact(impacts.intLiteral); |
| + registerImpact(_impacts.intLiteral); |
| break; |
| case ConstantExpressionKind.DOUBLE: |
| - registerImpact(impacts.doubleLiteral); |
| + registerImpact(_impacts.doubleLiteral); |
| break; |
| case ConstantExpressionKind.STRING: |
| - registerImpact(impacts.stringLiteral); |
| + registerImpact(_impacts.stringLiteral); |
| break; |
| default: |
| assert(invariant(NO_LOCATION_SPANNABLE, false, |
| @@ -247,8 +271,8 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| } |
| for (native.NativeBehavior behavior in worldImpact.nativeData) { |
| - backend.nativeResolutionEnqueuer |
| - .registerNativeBehavior(transformed, behavior, worldImpact); |
| + _nativeResolutionEnqueuer.registerNativeBehavior( |
| + transformed, behavior, worldImpact); |
| } |
| return transformed; |
| @@ -264,59 +288,92 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| // then the class of the type variable does too. |
| ClassElement contextClass = Types.getClassContext(type); |
| if (contextClass != null) { |
| - backend.rtiNeedBuilder.registerRtiDependency(type.element, contextClass); |
| + _rtiNeedBuilder.registerRtiDependency(type.element, contextClass); |
| } |
| } |
| // TODO(johnniwinther): Maybe split this into [onAssertType] and [onTestType]. |
| void onIsCheck(ResolutionDartType type, TransformedWorldImpact transformed) { |
| - BackendUsageBuilder backendUsage = backend.backendUsageBuilder; |
| - |
| void registerImpact(BackendImpact impact) { |
| - impact.registerImpact(transformed, elementEnvironment); |
| - backendUsage.processBackendImpact(impact); |
| + impact.registerImpact(transformed, _elementEnvironment); |
| + _backendUsageBuider.processBackendImpact(impact); |
| } |
| registerRequiredType(type); |
| - type.computeUnaliased(backend.resolution); |
| + type.computeUnaliased(_resolution); |
| type = type.unaliased; |
| - registerImpact(impacts.typeCheck); |
| + registerImpact(_impacts.typeCheck); |
| - bool inCheckedMode = backend.compiler.options.enableTypeAssertions; |
| + bool inCheckedMode = _options.enableTypeAssertions; |
| if (inCheckedMode) { |
| - registerImpact(impacts.checkedModeTypeCheck); |
| + registerImpact(_impacts.checkedModeTypeCheck); |
| } |
| if (type.isMalformed) { |
| - registerImpact(impacts.malformedTypeCheck); |
| + registerImpact(_impacts.malformedTypeCheck); |
| } |
| if (!type.treatAsRaw || type.containsTypeVariables || type.isFunctionType) { |
| - registerImpact(impacts.genericTypeCheck); |
| + registerImpact(_impacts.genericTypeCheck); |
| if (inCheckedMode) { |
| - registerImpact(impacts.genericCheckedModeTypeCheck); |
| + registerImpact(_impacts.genericCheckedModeTypeCheck); |
| } |
| if (type.isTypeVariable) { |
| - registerImpact(impacts.typeVariableTypeCheck); |
| + registerImpact(_impacts.typeVariableTypeCheck); |
| if (inCheckedMode) { |
| - registerImpact(impacts.typeVariableCheckedModeTypeCheck); |
| + registerImpact(_impacts.typeVariableCheckedModeTypeCheck); |
| } |
| } |
| } |
| if (type is ResolutionFunctionType) { |
| - registerImpact(impacts.functionTypeCheck); |
| + registerImpact(_impacts.functionTypeCheck); |
| } |
| if (type is ResolutionInterfaceType && |
| - backend.nativeClassData.isNativeClass(type.element)) { |
| - registerImpact(impacts.nativeTypeCheck); |
| + _nativeClassData.isNativeClass(type.element)) { |
| + registerImpact(_impacts.nativeTypeCheck); |
| } |
| } |
| +} |
| + |
| +class CodegenImpactTransformer { |
| + // TODO(johnniwinther): Remove this need for this. |
|
Siggi Cherem (dart-lang)
2017/03/14 05:33:01
this need => the need
Johnni Winther
2017/03/15 13:11:50
Done.
|
| + final JavaScriptBackend _backend; |
| + |
| + final CompilerOptions _options; |
| + final ElementEnvironment _elementEnvironment; |
| + final BackendHelpers _helpers; |
| + final BackendImpacts _impacts; |
| + final CheckedModeHelpers _checkedModeHelpers; |
| + final NativeData _nativeData; |
| + final RuntimeTypesNeed _rtiNeed; |
| + final NativeCodegenEnqueuer _nativeCodegenEnqueuer; |
| + final Namer _namer; |
| + final MirrorsData _mirrorsData; |
| + final OneShotInterceptorData _oneShotInterceptorData; |
| + final LookupMapAnalysis _lookupMapAnalysis; |
| + final CustomElementsCodegenAnalysis _customElementsCodegenAnalysis; |
| + |
| + CodegenImpactTransformer( |
| + this._backend, |
| + this._options, |
| + this._elementEnvironment, |
| + this._helpers, |
| + this._impacts, |
| + this._checkedModeHelpers, |
| + this._nativeData, |
| + this._rtiNeed, |
| + this._nativeCodegenEnqueuer, |
| + this._namer, |
| + this._mirrorsData, |
| + this._oneShotInterceptorData, |
| + this._lookupMapAnalysis, |
| + this._customElementsCodegenAnalysis); |
| void onIsCheckForCodegen( |
| ResolutionDartType type, TransformedWorldImpact transformed) { |
| if (type.isDynamic) return; |
| type = type.unaliased; |
| - impacts.typeCheck.registerImpact(transformed, elementEnvironment); |
| + _impacts.typeCheck.registerImpact(transformed, _elementEnvironment); |
| - bool inCheckedMode = backend.compiler.options.enableTypeAssertions; |
| + bool inCheckedMode = _options.enableTypeAssertions; |
| // [registerIsCheck] is also called for checked mode checks, so we |
| // need to register checked mode helpers. |
| if (inCheckedMode) { |
| @@ -324,29 +381,29 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| // calls to [enqueue] with the resolution enqueuer serve as assertions |
| // that the helper was in fact added. |
| // TODO(13155): Find a way to enqueue helpers lazily. |
| - CheckedModeHelper helper = backend.checkedModeHelpers |
| - .getCheckedModeHelper(type, typeCast: false); |
| + CheckedModeHelper helper = |
| + _checkedModeHelpers.getCheckedModeHelper(type, typeCast: false); |
| if (helper != null) { |
| - StaticUse staticUse = helper.getStaticUse(backend.helpers); |
| + StaticUse staticUse = helper.getStaticUse(_helpers); |
| transformed.registerStaticUse(staticUse); |
| } |
| // We also need the native variant of the check (for DOM types). |
| - helper = backend.checkedModeHelpers |
| - .getNativeCheckedModeHelper(type, typeCast: false); |
| + helper = |
| + _checkedModeHelpers.getNativeCheckedModeHelper(type, typeCast: false); |
| if (helper != null) { |
| - StaticUse staticUse = helper.getStaticUse(backend.helpers); |
| + StaticUse staticUse = helper.getStaticUse(_helpers); |
| transformed.registerStaticUse(staticUse); |
| } |
| } |
| if (!type.treatAsRaw || type.containsTypeVariables) { |
| - impacts.genericIsCheck.registerImpact(transformed, elementEnvironment); |
| + _impacts.genericIsCheck.registerImpact(transformed, _elementEnvironment); |
| } |
| if (type is ResolutionInterfaceType && |
| - backend.nativeData.isNativeClass(type.element)) { |
| + _nativeData.isNativeClass(type.element)) { |
| // We will neeed to add the "$is" and "$as" properties on the |
| // JavaScript object prototype, so we make sure |
| // [:defineProperty:] is compiled. |
| - impacts.nativeTypeCheck.registerImpact(transformed, elementEnvironment); |
| + _impacts.nativeTypeCheck.registerImpact(transformed, _elementEnvironment); |
| } |
| } |
| @@ -358,7 +415,7 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| ResolutionDartType type = typeUse.type; |
| switch (typeUse.kind) { |
| case TypeUseKind.INSTANTIATION: |
| - backend.lookupMapAnalysis.registerInstantiatedType(type); |
| + _lookupMapAnalysis.registerInstantiatedType(type); |
| break; |
| case TypeUseKind.IS_CHECK: |
| onIsCheckForCodegen(type, transformed); |
| @@ -368,63 +425,66 @@ class JavaScriptImpactTransformer extends ImpactTransformer { |
| } |
| for (ConstantValue constant in impact.compileTimeConstants) { |
| - backend.computeImpactForCompileTimeConstant(constant, transformed, |
| + _backend.computeImpactForCompileTimeConstant(constant, transformed, |
| forResolution: false); |
| - backend.addCompileTimeConstantForEmission(constant); |
| + _backend.addCompileTimeConstantForEmission(constant); |
| } |
| for (Pair<ResolutionDartType, ResolutionDartType> check |
| in impact.typeVariableBoundsSubtypeChecks) { |
| - backend.registerTypeVariableBoundsSubtypeCheck(check.a, check.b); |
| + _backend.registerTypeVariableBoundsSubtypeCheck(check.a, check.b); |
| } |
| for (StaticUse staticUse in impact.staticUses) { |
| switch (staticUse.kind) { |
| case StaticUseKind.CLOSURE: |
| LocalFunctionElement closure = staticUse.element; |
| - if (backend.rtiNeed.localFunctionNeedsRti(closure)) { |
| - impacts.computeSignature |
| - .registerImpact(transformed, elementEnvironment); |
| + if (_rtiNeed.localFunctionNeedsRti(closure)) { |
| + _impacts.computeSignature |
| + .registerImpact(transformed, _elementEnvironment); |
| } |
| break; |
| case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: |
| case StaticUseKind.CONSTRUCTOR_INVOKE: |
| - backend.lookupMapAnalysis.registerInstantiatedType(staticUse.type); |
| + _lookupMapAnalysis.registerInstantiatedType(staticUse.type); |
| break; |
| default: |
| } |
| } |
| for (String name in impact.constSymbols) { |
| - backend.mirrorsData.registerConstSymbol(name); |
| + _mirrorsData.registerConstSymbol(name); |
| } |
| for (Set<ClassElement> classes in impact.specializedGetInterceptors) { |
| - backend.oneShotInterceptorData |
| - .registerSpecializedGetInterceptor(classes, backend.namer); |
| + _oneShotInterceptorData.registerSpecializedGetInterceptor( |
| + classes, _namer); |
| } |
| if (impact.usesInterceptor) { |
| - if (backend.nativeCodegenEnqueuer.hasInstantiatedNativeClasses) { |
| - impacts.interceptorUse.registerImpact(transformed, elementEnvironment); |
| + if (_nativeCodegenEnqueuer.hasInstantiatedNativeClasses) { |
| + _impacts.interceptorUse |
| + .registerImpact(transformed, _elementEnvironment); |
| } |
| } |
| for (ClassElement element in impact.typeConstants) { |
| - backend.customElementsCodegenAnalysis.registerTypeConstant(element); |
| - backend.lookupMapAnalysis.registerTypeConstant(element); |
| + _customElementsCodegenAnalysis.registerTypeConstant(element); |
| + _lookupMapAnalysis.registerTypeConstant(element); |
| } |
| for (FunctionElement element in impact.asyncMarkers) { |
| switch (element.asyncMarker) { |
| case AsyncMarker.ASYNC: |
| - impacts.asyncBody.registerImpact(transformed, elementEnvironment); |
| + _impacts.asyncBody.registerImpact(transformed, _elementEnvironment); |
| break; |
| case AsyncMarker.SYNC_STAR: |
| - impacts.syncStarBody.registerImpact(transformed, elementEnvironment); |
| + _impacts.syncStarBody |
| + .registerImpact(transformed, _elementEnvironment); |
| break; |
| case AsyncMarker.ASYNC_STAR: |
| - impacts.asyncStarBody.registerImpact(transformed, elementEnvironment); |
| + _impacts.asyncStarBody |
| + .registerImpact(transformed, _elementEnvironment); |
| break; |
| } |
| } |