Index: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart |
index dd78c25b56d08625fbe65ad790f781f9116b30d3..209d104f01b961f187a2d9f1f444fb6f659af093 100644 |
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart |
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart |
@@ -30,10 +30,24 @@ import '../../elements/elements.dart' |
TypedefElement, |
VariableElement; |
import '../../elements/entities.dart'; |
+import '../../elements/resolution_types.dart' show Types; |
import '../../elements/types.dart' show DartType; |
import '../../js/js.dart' as js; |
-import '../../js_backend/js_backend.dart' |
- show Namer, JavaScriptBackend, JavaScriptConstantCompiler, StringBackedName; |
+import '../../js_backend/backend.dart' |
+ show |
+ JavaScriptBackend, |
+ RuntimeTypesEncoder, |
+ RuntimeTypesNeed, |
+ SuperMemberData; |
+import '../../js_backend/backend_usage.dart'; |
+import '../../js_backend/constant_handler_javascript.dart' |
+ show JavaScriptConstantCompiler; |
+import '../../js_backend/namer.dart' show Namer, StringBackedName; |
+import '../../js_backend/native_data.dart'; |
+import '../../js_backend/interceptor_data.dart'; |
+import '../../js_backend/mirrors_data.dart'; |
+import '../../native/enqueue.dart' show NativeCodegenEnqueuer; |
+import '../../options.dart'; |
import '../../universe/selector.dart' show Selector; |
import '../../universe/world_builder.dart' |
show CodegenWorldBuilder, SelectorConstraints; |
@@ -84,8 +98,26 @@ class ProgramBuilder { |
compiler, namer, closedWorld, rtiNeededClasses, emitter), |
this._registry = new Registry(compiler); |
- JavaScriptBackend get backend => _compiler.backend; |
- CodegenWorldBuilder get worldBuilder => _compiler.codegenWorldBuilder; |
+ JavaScriptBackend get _backend => _compiler.backend; |
+ CodegenWorldBuilder get _worldBuilder => _compiler.codegenWorldBuilder; |
+ DeferredLoadTask get _deferredLoadTask => _compiler.deferredLoadTask; |
+ Types get _types => _compiler.types; |
+ CommonElements get _commonElements => _compiler.commonElements; |
+ CompilerOptions get _options => _compiler.options; |
+ NativeCodegenEnqueuer get _nativeCodegenEnqueuer => |
+ _backend.nativeCodegenEnqueuer; |
+ Namer get _namer => _backend.namer; |
+ BackendUsage get _backendUsage => _backend.backendUsage; |
+ CodeEmitterTask get _emitter => _backend.emitter; |
+ JavaScriptConstantCompiler get _constantHandler => _backend.constants; |
+ NativeData get _nativeData => _backend.nativeData; |
+ RuntimeTypesNeed get _rtiNeed => _backend.rtiNeed; |
+ MirrorsData get _mirrorsData => _backend.mirrorsData; |
+ InterceptorData get _interceptorData => _backend.interceptorData; |
+ SuperMemberData get _superMemberData => _backend.superMemberData; |
+ RuntimeTypesEncoder get _rtiEncoder => _backend.rtiEncoder; |
+ OneShotInterceptorData get _oneShotInterceptorData => |
+ _backend.oneShotInterceptorData; |
/// Mapping from [ClassElement] to constructed [Class]. We need this to |
/// update the superclass in the [Class]. |
@@ -115,8 +147,7 @@ class ProgramBuilder { |
// Note: In rare cases (mostly tests) output units can be empty. This |
// happens when the deferred code is dead-code eliminated but we still need |
// to check that the library has been loaded. |
- _compiler.deferredLoadTask.allOutputUnits |
- .forEach(_registry.registerOutputUnit); |
+ _deferredLoadTask.allOutputUnits.forEach(_registry.registerOutputUnit); |
collector.outputClassLists.forEach(_registry.registerElements); |
collector.outputStaticLists.forEach(_registry.registerElements); |
collector.outputConstantLists.forEach(_registerConstants); |
@@ -175,13 +206,13 @@ class ProgramBuilder { |
List<Holder> holders = _registry.holders.toList(growable: false); |
bool needsNativeSupport = |
- backend.nativeCodegenEnqueuer.hasInstantiatedNativeClasses; |
+ _nativeCodegenEnqueuer.hasInstantiatedNativeClasses; |
assert(!needsNativeSupport || nativeClasses.isNotEmpty); |
List<js.TokenFinalizer> finalizers = [_task.metadataCollector]; |
- if (backend.namer is js.TokenFinalizer) { |
- var namingFinalizer = backend.namer; |
+ if (_namer is js.TokenFinalizer) { |
+ var namingFinalizer = _namer; |
finalizers.add(namingFinalizer as js.TokenFinalizer); |
} |
@@ -189,7 +220,7 @@ class ProgramBuilder { |
_buildTypeToInterceptorMap(), _task.metadataCollector, finalizers, |
needsNativeSupport: needsNativeSupport, |
outputContainsConstantList: collector.outputContainsConstantList, |
- hasIsolateSupport: backend.backendUsage.isIsolateInUse); |
+ hasIsolateSupport: _backendUsage.isIsolateInUse); |
} |
void _markEagerClasses() { |
@@ -199,7 +230,7 @@ class ProgramBuilder { |
/// Builds a map from loadId to outputs-to-load. |
Map<String, List<Fragment>> _buildLoadMap() { |
Map<String, List<Fragment>> loadMap = <String, List<Fragment>>{}; |
- _compiler.deferredLoadTask.hunksToLoad |
+ _deferredLoadTask.hunksToLoad |
.forEach((String loadId, List<OutputUnit> outputUnits) { |
loadMap[loadId] = outputUnits |
.map((OutputUnit unit) => _outputs[unit]) |
@@ -210,7 +241,7 @@ class ProgramBuilder { |
js.Expression _buildTypeToInterceptorMap() { |
InterceptorStubGenerator stubGenerator = |
- new InterceptorStubGenerator(_compiler, namer, backend, closedWorld); |
+ new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld); |
return stubGenerator.generateTypeToInterceptorMap(); |
} |
@@ -232,14 +263,14 @@ class ProgramBuilder { |
if (_compiler.isMockCompilation) return js.js.comment("Mock compilation"); |
MainCallStubGenerator generator = |
- new MainCallStubGenerator(backend, backend.emitter); |
+ new MainCallStubGenerator(_backend, _emitter); |
return generator.generateInvokeMain(_compiler.mainFunction); |
} |
DeferredFragment _buildDeferredFragment(LibrariesMap librariesMap) { |
DeferredFragment result = new DeferredFragment( |
librariesMap.outputUnit, |
- backend.deferredPartFileName(librariesMap.name, addExtension: false), |
+ _backend.deferredPartFileName(librariesMap.name, addExtension: false), |
librariesMap.name, |
_buildLibraries(librariesMap), |
_buildStaticNonFinalFields(librariesMap), |
@@ -267,8 +298,8 @@ class ProgramBuilder { |
} |
StaticField _buildStaticField(FieldElement element) { |
- JavaScriptConstantCompiler handler = backend.constants; |
- ConstantValue initialValue = handler.getConstantValue(element.constant); |
+ ConstantValue initialValue = |
+ _constantHandler.getConstantValue(element.constant); |
// TODO(zarah): The holder should not be registered during building of |
// a static field. |
_registry.registerHolder(namer.globalObjectForConstant(initialValue), |
@@ -288,12 +319,11 @@ class ProgramBuilder { |
List<StaticField> _buildStaticLazilyInitializedFields( |
LibrariesMap librariesMap) { |
- JavaScriptConstantCompiler handler = backend.constants; |
- DeferredLoadTask loadTask = _compiler.deferredLoadTask; |
- Iterable<FieldElement> lazyFields = handler |
+ Iterable<FieldElement> lazyFields = _constantHandler |
.getLazilyInitializedFieldsForEmission() |
.where((element) => |
- loadTask.outputUnitForElement(element) == librariesMap.outputUnit); |
+ _deferredLoadTask.outputUnitForElement(element) == |
+ librariesMap.outputUnit); |
return Elements |
.sortedByPosition(lazyFields) |
.map(_buildLazyField) |
@@ -302,7 +332,7 @@ class ProgramBuilder { |
} |
StaticField _buildLazyField(FieldElement element) { |
- js.Expression code = backend.generatedCode[element]; |
+ js.Expression code = _backend.generatedCode[element]; |
// The code is null if we ended up not needing the lazily |
// initialized field after all because of constant folding |
// before code generation. |
@@ -329,13 +359,13 @@ class ProgramBuilder { |
} |
void _addJsInteropStubs(LibrariesMap librariesMap) { |
- if (_classes.containsKey(_compiler.commonElements.objectClass)) { |
+ if (_classes.containsKey(_commonElements.objectClass)) { |
var toStringInvocation = namer.invocationName(Selectors.toString_); |
// TODO(jacobr): register toString as used so that it is always accessible |
// from JavaScript. |
- _classes[_compiler.commonElements.objectClass].callStubs.add( |
- _buildStubMethod(new StringBackedName("toString"), |
- js.js('function() { return this.#(this) }', toStringInvocation))); |
+ _classes[_commonElements.objectClass].callStubs.add(_buildStubMethod( |
+ new StringBackedName("toString"), |
+ js.js('function() { return this.#(this) }', toStringInvocation))); |
} |
// We add all members from classes marked with isJsInterop to the base |
@@ -345,18 +375,17 @@ class ProgramBuilder { |
// a regular getter that returns a JavaScript function and tearing off |
// a method in the case where there exist multiple JavaScript classes |
// that conflict on whether the member is a getter or a method. |
- var interceptorClass = |
- _classes[_compiler.commonElements.jsJavaScriptObjectClass]; |
+ var interceptorClass = _classes[_commonElements.jsJavaScriptObjectClass]; |
var stubNames = new Set<String>(); |
librariesMap.forEach((LibraryElement library, List<Element> elements) { |
for (Element e in elements) { |
- if (e is ClassElement && backend.nativeData.isJsInteropClass(e)) { |
+ if (e is ClassElement && _nativeData.isJsInteropClass(e)) { |
e.declaration.forEachMember((_, Element member) { |
- var jsName = |
- backend.nativeData.computeUnescapedJSInteropName(member.name); |
+ var jsName = _nativeData.computeUnescapedJSInteropName(member.name); |
if (!member.isInstanceMember) return; |
if (member.isGetter || member.isField || member.isFunction) { |
- var selectors = worldBuilder.getterInvocationsByName(member.name); |
+ var selectors = |
+ _worldBuilder.getterInvocationsByName(member.name); |
if (selectors != null && !selectors.isEmpty) { |
for (var selector in selectors.keys) { |
var stubName = namer.invocationName(selector); |
@@ -370,7 +399,8 @@ class ProgramBuilder { |
} |
if (member.isSetter || (member.isField && !member.isConst)) { |
- var selectors = worldBuilder.setterInvocationsByName(member.name); |
+ var selectors = |
+ _worldBuilder.setterInvocationsByName(member.name); |
if (selectors != null && !selectors.isEmpty) { |
var stubName = namer.setterForElement(member); |
if (stubNames.add(stubName.key)) { |
@@ -390,16 +420,16 @@ class ProgramBuilder { |
FunctionElement fn = member; |
functionType = fn.type; |
} else if (member.isGetter) { |
- if (_compiler.options.trustTypeAnnotations) { |
+ if (_options.trustTypeAnnotations) { |
GetterElement getter = member; |
ResolutionDartType returnType = getter.type.returnType; |
if (returnType.isFunctionType) { |
functionType = returnType; |
} else if (returnType.treatAsDynamic || |
- _compiler.types.isSubtype( |
+ _types.isSubtype( |
returnType, |
// ignore: UNNECESSARY_CAST |
- backend.commonElements.functionType as DartType)) { |
+ _commonElements.functionType as DartType)) { |
if (returnType.isTypedef) { |
ResolutionTypedefType typedef = returnType; |
// TODO(jacobr): can we just use typdef.unaliased instead? |
@@ -425,7 +455,7 @@ class ProgramBuilder { |
minArgs = 0; |
maxArgs = 32767; |
} |
- var selectors = worldBuilder.invocationsByName(member.name); |
+ var selectors = _worldBuilder.invocationsByName(member.name); |
// Named arguments are not yet supported. In the future we |
// may want to map named arguments to an object literal containing |
// all named arguments. |
@@ -474,7 +504,7 @@ class ProgramBuilder { |
.map(_buildStaticMethod) |
.toList(); |
- if (library == _compiler.commonElements.interceptorsLibrary) { |
+ if (library == _commonElements.interceptorsLibrary) { |
statics.addAll(_generateGetInterceptorMethods()); |
statics.addAll(_generateOneShotInterceptors()); |
} |
@@ -496,8 +526,8 @@ class ProgramBuilder { |
Class _buildClass(ClassElement element) { |
bool onlyForRti = collector.classesOnlyNeededForRti.contains(element); |
- bool hasRtiField = backend.rtiNeed.classNeedsRtiField(element); |
- if (backend.nativeData.isJsInteropClass(element)) { |
+ bool hasRtiField = _rtiNeed.classNeedsRtiField(element); |
+ if (_nativeData.isJsInteropClass(element)) { |
// TODO(jacobr): check whether the class has any active static fields |
// if it does not we can suppress it completely. |
onlyForRti = true; |
@@ -507,8 +537,8 @@ class ProgramBuilder { |
List<StubMethod> callStubs = <StubMethod>[]; |
ClassStubGenerator classStubGenerator = new ClassStubGenerator( |
- namer, backend, worldBuilder, closedWorld, |
- enableMinification: _compiler.options.enableMinification); |
+ namer, _backend, _worldBuilder, closedWorld, |
+ enableMinification: _options.enableMinification); |
RuntimeTypeGenerator runtimeTypeGenerator = |
new RuntimeTypeGenerator(_compiler, _task, namer); |
@@ -523,7 +553,7 @@ class ProgramBuilder { |
} |
if (member.isGetter || member.isField) { |
Map<Selector, SelectorConstraints> selectors = |
- worldBuilder.invocationsByName(member.name); |
+ _worldBuilder.invocationsByName(member.name); |
if (selectors != null && !selectors.isEmpty) { |
Map<js.Name, js.Expression> callStubsForMember = |
classStubGenerator.generateCallStubsForGetter(member, selectors); |
@@ -536,14 +566,14 @@ class ProgramBuilder { |
List<StubMethod> noSuchMethodStubs = <StubMethod>[]; |
- if (backend.backendUsage.isNoSuchMethodUsed && element.isObject) { |
+ if (_backendUsage.isNoSuchMethodUsed && element.isObject) { |
Map<js.Name, Selector> selectors = |
classStubGenerator.computeSelectorsForNsmHandlers(); |
selectors.forEach((js.Name name, Selector selector) { |
// If the program contains `const Symbol` names we have to retain them. |
String selectorName = selector.name; |
if (selector.isSetter) selectorName = "$selectorName="; |
- if (backend.mirrorsData.symbolsUsed.contains(selectorName)) { |
+ if (_mirrorsData.symbolsUsed.contains(selectorName)) { |
_symbolsMap[name] = selectorName; |
} |
noSuchMethodStubs.add( |
@@ -551,7 +581,7 @@ class ProgramBuilder { |
}); |
} |
- if (element == _compiler.commonElements.closureClass) { |
+ if (element == _commonElements.closureClass) { |
// We add a special getter here to allow for tearing off a closure from |
// itself. |
js.Name name = namer.getterForMember(Names.call); |
@@ -566,8 +596,7 @@ class ProgramBuilder { |
if (!onlyForRti && !element.isMixinApplication) { |
implementation.forEachMember(visitMember, includeBackendMembers: true); |
} |
- bool isInterceptedClass = |
- backend.interceptorData.isInterceptedClass(element); |
+ bool isInterceptedClass = _interceptorData.isInterceptedClass(element); |
List<Field> instanceFields = onlyForRti |
? const <Field>[] |
: _buildFields(element, |
@@ -582,9 +611,9 @@ class ProgramBuilder { |
List<StubMethod> checkedSetters = <StubMethod>[]; |
List<StubMethod> isChecks = <StubMethod>[]; |
- if (backend.nativeData.isJsInteropClass(element)) { |
+ if (_nativeData.isJsInteropClass(element)) { |
typeTests.properties.forEach((js.Name name, js.Node code) { |
- _classes[_compiler.commonElements.jsInterceptorClass] |
+ _classes[_commonElements.jsInterceptorClass] |
.isChecks |
.add(_buildStubMethod(name, code)); |
}); |
@@ -593,7 +622,7 @@ class ProgramBuilder { |
if (field.needsCheckedSetter) { |
assert(!field.needsUncheckedSetter); |
FieldElement element = field.element; |
- js.Expression code = backend.generatedCode[element]; |
+ js.Expression code = _backend.generatedCode[element]; |
assert(code != null); |
js.Name name = namer.deriveSetterName(field.accessorName); |
checkedSetters.add(_buildStubMethod(name, code, element: element)); |
@@ -610,12 +639,12 @@ class ProgramBuilder { |
// TODO(floitsch): we shouldn't update the registry in the middle of |
// building a class. |
Holder holder = _registry.registerHolder(holderName); |
- bool isInstantiated = !backend.nativeData.isJsInteropClass(element) && |
- worldBuilder.directlyInstantiatedClasses.contains(element); |
+ bool isInstantiated = !_nativeData.isJsInteropClass(element) && |
+ _worldBuilder.directlyInstantiatedClasses.contains(element); |
Class result; |
if (element.isMixinApplication && !onlyForRti) { |
- assert(!backend.nativeData.isNativeClass(element)); |
+ assert(!_nativeData.isNativeClass(element)); |
assert(methods.isEmpty); |
result = new MixinApplication( |
@@ -647,7 +676,7 @@ class ProgramBuilder { |
isDirectlyInstantiated: isInstantiated, |
hasRtiField: hasRtiField, |
onlyForRti: onlyForRti, |
- isNative: backend.nativeData.isNativeClass(element)); |
+ isNative: _nativeData.isNativeClass(element)); |
} |
_classes[element] = result; |
return result; |
@@ -658,11 +687,11 @@ class ProgramBuilder { |
} |
bool _methodCanBeReflected(MethodElement method) { |
- return backend.mirrorsData.isMemberAccessibleByReflection(method); |
+ return _mirrorsData.isMemberAccessibleByReflection(method); |
} |
bool _methodCanBeApplied(FunctionElement method) { |
- return backend.backendUsage.isFunctionApplyUsed && |
+ return _backendUsage.isFunctionApplyUsed && |
closedWorld.getMightBePassedToApply(method); |
} |
@@ -672,14 +701,14 @@ class ProgramBuilder { |
optionalParameterDefaultValues = new Map<String, ConstantValue>(); |
signature.forEachOptionalParameter((ParameterElement parameter) { |
ConstantValue def = |
- backend.constants.getConstantValue(parameter.constant); |
+ _constantHandler.getConstantValue(parameter.constant); |
optionalParameterDefaultValues[parameter.name] = def; |
}); |
} else { |
optionalParameterDefaultValues = <ConstantValue>[]; |
signature.forEachOptionalParameter((ParameterElement parameter) { |
ConstantValue def = |
- backend.constants.getConstantValue(parameter.constant); |
+ _constantHandler.getConstantValue(parameter.constant); |
optionalParameterDefaultValues.add(def); |
}); |
} |
@@ -689,7 +718,7 @@ class ProgramBuilder { |
DartMethod _buildMethod(MethodElement element) { |
assert(element.isDeclaration); |
js.Name name = namer.methodPropertyName(element); |
- js.Expression code = backend.generatedCode[element]; |
+ js.Expression code = _backend.generatedCode[element]; |
// TODO(kasperl): Figure out under which conditions code is null. |
if (code == null) return null; |
@@ -702,7 +731,7 @@ class ProgramBuilder { |
bool canBeReflected = _methodCanBeReflected(element); |
bool canBeApplied = _methodCanBeApplied(element); |
- js.Name aliasName = backend.superMemberData.isAliasedSuperMember(element) |
+ js.Name aliasName = _superMemberData.isAliasedSuperMember(element) |
? namer.aliasedSuperMemberPropertyName(element) |
: null; |
@@ -714,10 +743,10 @@ class ProgramBuilder { |
isClosureCallMethod = true; |
} else { |
// Careful with operators. |
- canTearOff = worldBuilder.hasInvokedGetter(element, closedWorld) || |
+ canTearOff = _worldBuilder.hasInvokedGetter(element, closedWorld) || |
(canBeReflected && !element.isOperator); |
assert(canTearOff || |
- !worldBuilder.methodsNeedingSuperGetter.contains(element)); |
+ !_worldBuilder.methodsNeedingSuperGetter.contains(element)); |
tearOffName = namer.getterForElement(element); |
} |
} |
@@ -748,8 +777,7 @@ class ProgramBuilder { |
js.Expression functionType; |
if (canTearOff || canBeReflected) { |
- OutputUnit outputUnit = |
- _compiler.deferredLoadTask.outputUnitForElement(element); |
+ OutputUnit outputUnit = _deferredLoadTask.outputUnitForElement(element); |
functionType = _generateFunctionType(memberType, outputUnit); |
} |
@@ -779,10 +807,10 @@ class ProgramBuilder { |
ResolutionDartType type, OutputUnit outputUnit) { |
if (type.containsTypeVariables) { |
js.Expression thisAccess = js.js(r'this.$receiver'); |
- return backend.rtiEncoder |
- .getSignatureEncoding(backend.emitter.emitter, type, thisAccess); |
+ return _rtiEncoder.getSignatureEncoding( |
+ _emitter.emitter, type, thisAccess); |
} else { |
- return backend.emitter.metadataCollector |
+ return _emitter.metadataCollector |
.reifyTypeForOutputUnit(type, outputUnit); |
} |
} |
@@ -792,7 +820,7 @@ class ProgramBuilder { |
if (!_methodNeedsStubs(element)) return const <ParameterStubMethod>[]; |
ParameterStubGenerator generator = |
- new ParameterStubGenerator(_compiler, namer, backend, closedWorld); |
+ new ParameterStubGenerator(_compiler, namer, _backend, closedWorld); |
return generator.generateParameterStubs(element, canTearOff: canTearOff); |
} |
@@ -810,10 +838,10 @@ class ProgramBuilder { |
// accessible. |
void _markEagerInterceptorClasses() { |
Iterable<js.Name> names = |
- backend.oneShotInterceptorData.specializedGetInterceptorNames; |
+ _oneShotInterceptorData.specializedGetInterceptorNames; |
for (js.Name name in names) { |
- for (ClassElement element in backend.oneShotInterceptorData |
- .getSpecializedGetInterceptorsFor(name)) { |
+ for (ClassElement element |
+ in _oneShotInterceptorData.getSpecializedGetInterceptorsFor(name)) { |
Class cls = _classes[element]; |
if (cls != null) cls.isEager = true; |
} |
@@ -822,19 +850,19 @@ class ProgramBuilder { |
Iterable<StaticStubMethod> _generateGetInterceptorMethods() { |
InterceptorStubGenerator stubGenerator = |
- new InterceptorStubGenerator(_compiler, namer, backend, closedWorld); |
+ new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld); |
- String holderName = namer |
- .globalObjectForLibrary(_compiler.commonElements.interceptorsLibrary); |
+ String holderName = |
+ namer.globalObjectForLibrary(_commonElements.interceptorsLibrary); |
// TODO(floitsch): we shouldn't update the registry in the middle of |
// generating the interceptor methods. |
Holder holder = _registry.registerHolder(holderName); |
Iterable<js.Name> names = |
- backend.oneShotInterceptorData.specializedGetInterceptorNames; |
+ _oneShotInterceptorData.specializedGetInterceptorNames; |
return names.map((js.Name name) { |
Set<ClassEntity> classes = |
- backend.oneShotInterceptorData.getSpecializedGetInterceptorsFor(name); |
+ _oneShotInterceptorData.getSpecializedGetInterceptorsFor(name); |
js.Expression code = stubGenerator.generateGetInterceptorMethod(classes); |
return new StaticStubMethod(name, holder, code); |
}); |
@@ -855,7 +883,7 @@ class ProgramBuilder { |
int getterFlags = 0; |
if (needsGetter) { |
if (visitStatics || |
- !backend.interceptorData.fieldHasInterceptedGetter(field)) { |
+ !_interceptorData.fieldHasInterceptedGetter(field)) { |
getterFlags = 1; |
} else { |
getterFlags += 2; |
@@ -871,7 +899,7 @@ class ProgramBuilder { |
int setterFlags = 0; |
if (needsSetter) { |
if (visitStatics || |
- !backend.interceptorData.fieldHasInterceptedSetter(field)) { |
+ !_interceptorData.fieldHasInterceptedSetter(field)) { |
setterFlags = 1; |
} else { |
setterFlags += 2; |
@@ -890,16 +918,15 @@ class ProgramBuilder { |
Iterable<StaticStubMethod> _generateOneShotInterceptors() { |
InterceptorStubGenerator stubGenerator = |
- new InterceptorStubGenerator(_compiler, namer, backend, closedWorld); |
+ new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld); |
- String holderName = namer |
- .globalObjectForLibrary(_compiler.commonElements.interceptorsLibrary); |
+ String holderName = |
+ namer.globalObjectForLibrary(_commonElements.interceptorsLibrary); |
// TODO(floitsch): we shouldn't update the registry in the middle of |
// generating the interceptor methods. |
Holder holder = _registry.registerHolder(holderName); |
- List<js.Name> names = |
- backend.oneShotInterceptorData.oneShotInterceptorNames; |
+ List<js.Name> names = _oneShotInterceptorData.oneShotInterceptorNames; |
return names.map((js.Name name) { |
js.Expression code = stubGenerator.generateOneShotInterceptor(name); |
return new StaticStubMethod(name, holder, code); |
@@ -909,7 +936,7 @@ class ProgramBuilder { |
StaticDartMethod _buildStaticMethod(MethodElement element) { |
js.Name name = namer.methodPropertyName(element); |
String holder = namer.globalObjectFor(element); |
- js.Expression code = backend.generatedCode[element]; |
+ js.Expression code = _backend.generatedCode[element]; |
bool isApplyTarget = !element.isConstructor && !element.isAccessor; |
bool canBeApplied = _methodCanBeApplied(element); |
@@ -917,7 +944,7 @@ class ProgramBuilder { |
bool needsTearOff = isApplyTarget && |
(canBeReflected || |
- worldBuilder.staticFunctionsNeedingGetter.contains(element)); |
+ _worldBuilder.staticFunctionsNeedingGetter.contains(element)); |
js.Name tearOffName = |
needsTearOff ? namer.staticClosureName(element) : null; |
@@ -931,8 +958,7 @@ class ProgramBuilder { |
js.Expression functionType; |
ResolutionDartType type = element.type; |
if (needsTearOff || canBeReflected) { |
- OutputUnit outputUnit = |
- _compiler.deferredLoadTask.outputUnitForElement(element); |
+ OutputUnit outputUnit = _deferredLoadTask.outputUnitForElement(element); |
functionType = _generateFunctionType(type, outputUnit); |
} |