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

Unified Diff: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart

Issue 2818463002: Remove Compiler and JavaScriptBackend from interceptor_stub_generator. (Closed)
Patch Set: Created 3 years, 8 months 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_emitter/interceptor_stub_generator.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 209d104f01b961f187a2d9f1f444fb6f659af093..0212336df6582da43697e5fb8b06c2cfec880812 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
@@ -42,6 +42,7 @@ import '../../js_backend/backend.dart'
import '../../js_backend/backend_usage.dart';
import '../../js_backend/constant_handler_javascript.dart'
show JavaScriptConstantCompiler;
+import '../../js_backend/custom_elements_analysis.dart';
import '../../js_backend/namer.dart' show Namer, StringBackedName;
import '../../js_backend/native_data.dart';
import '../../js_backend/interceptor_data.dart';
@@ -73,9 +74,9 @@ part 'registry.dart';
/// emitted more easily by the individual emitters.
class ProgramBuilder {
final Compiler _compiler;
- final Namer namer;
+ final Namer _namer;
final CodeEmitterTask _task;
- final ClosedWorld closedWorld;
+ final ClosedWorld _closedWorld;
/// Contains the collected information the program builder used to build
/// the model.
@@ -89,13 +90,13 @@ class ProgramBuilder {
/// True if the program should store function types in the metadata.
bool _storeFunctionTypesInMetadata = false;
- ProgramBuilder(Compiler compiler, Namer namer, this._task, Emitter emitter,
+ ProgramBuilder(Compiler compiler, Namer _namer, this._task, Emitter emitter,
ClosedWorld closedWorld, Set<ClassElement> rtiNeededClasses)
: this._compiler = compiler,
- this.namer = namer,
- this.closedWorld = closedWorld,
+ this._namer = _namer,
+ this._closedWorld = closedWorld,
this.collector = new Collector(
- compiler, namer, closedWorld, rtiNeededClasses, emitter),
+ compiler, _namer, closedWorld, rtiNeededClasses, emitter),
this._registry = new Registry(compiler);
JavaScriptBackend get _backend => _compiler.backend;
@@ -106,7 +107,6 @@ class ProgramBuilder {
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;
@@ -118,6 +118,8 @@ class ProgramBuilder {
RuntimeTypesEncoder get _rtiEncoder => _backend.rtiEncoder;
OneShotInterceptorData get _oneShotInterceptorData =>
_backend.oneShotInterceptorData;
+ CustomElementsCodegenAnalysis get _customElementsCodegenAnalysis =>
+ _backend.customElementsCodegenAnalysis;
/// Mapping from [ClassElement] to constructed [Class]. We need this to
/// update the superclass in the [Class].
@@ -240,8 +242,19 @@ class ProgramBuilder {
}
js.Expression _buildTypeToInterceptorMap() {
- InterceptorStubGenerator stubGenerator =
- new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld);
+ InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+ _options,
+ _commonElements,
+ _emitter,
+ _nativeCodegenEnqueuer,
+ _constantHandler,
+ _namer,
+ _nativeData,
+ _interceptorData,
+ _oneShotInterceptorData,
+ _customElementsCodegenAnalysis,
+ _worldBuilder,
+ _closedWorld);
return stubGenerator.generateTypeToInterceptorMap();
}
@@ -302,10 +315,10 @@ class ProgramBuilder {
_constantHandler.getConstantValue(element.constant);
// TODO(zarah): The holder should not be registered during building of
// a static field.
- _registry.registerHolder(namer.globalObjectForConstant(initialValue),
+ _registry.registerHolder(_namer.globalObjectForConstant(initialValue),
isConstantsHolder: true);
js.Expression code = _task.emitter.constantReference(initialValue);
- js.Name name = namer.globalPropertyName(element);
+ js.Name name = _namer.globalPropertyName(element);
bool isFinal = false;
bool isLazy = false;
@@ -338,7 +351,7 @@ class ProgramBuilder {
// before code generation.
if (code == null) return null;
- js.Name name = namer.globalPropertyName(element);
+ js.Name name = _namer.globalPropertyName(element);
bool isFinal = element.isFinal;
bool isLazy = true;
// TODO(floitsch): we shouldn't update the registry in the middle of
@@ -360,7 +373,7 @@ class ProgramBuilder {
void _addJsInteropStubs(LibrariesMap librariesMap) {
if (_classes.containsKey(_commonElements.objectClass)) {
- var toStringInvocation = namer.invocationName(Selectors.toString_);
+ var toStringInvocation = _namer.invocationName(Selectors.toString_);
// TODO(jacobr): register toString as used so that it is always accessible
// from JavaScript.
_classes[_commonElements.objectClass].callStubs.add(_buildStubMethod(
@@ -388,7 +401,7 @@ class ProgramBuilder {
_worldBuilder.getterInvocationsByName(member.name);
if (selectors != null && !selectors.isEmpty) {
for (var selector in selectors.keys) {
- var stubName = namer.invocationName(selector);
+ var stubName = _namer.invocationName(selector);
if (stubNames.add(stubName.key)) {
interceptorClass.callStubs.add(_buildStubMethod(stubName,
js.js('function(obj) { return obj.# }', [jsName]),
@@ -402,7 +415,7 @@ class ProgramBuilder {
var selectors =
_worldBuilder.setterInvocationsByName(member.name);
if (selectors != null && !selectors.isEmpty) {
- var stubName = namer.setterForElement(member);
+ var stubName = _namer.setterForElement(member);
if (stubNames.add(stubName.key)) {
interceptorClass.callStubs.add(_buildStubMethod(stubName,
js.js('function(obj, v) { return obj.# = v }', [jsName]),
@@ -467,7 +480,7 @@ class ProgramBuilder {
if (selector.namedArgumentCount > 0) continue;
if (argumentCount < minArgs) continue;
if (argumentCount > maxArgs) continue;
- var stubName = namer.invocationName(selector);
+ var stubName = _namer.invocationName(selector);
if (!stubNames.add(stubName.key)) continue;
var parameters =
new List<String>.generate(argumentCount, (i) => 'p$i');
@@ -537,10 +550,10 @@ class ProgramBuilder {
List<StubMethod> callStubs = <StubMethod>[];
ClassStubGenerator classStubGenerator = new ClassStubGenerator(
- namer, _backend, _worldBuilder, closedWorld,
+ _namer, _backend, _worldBuilder, _closedWorld,
enableMinification: _options.enableMinification);
RuntimeTypeGenerator runtimeTypeGenerator =
- new RuntimeTypeGenerator(_compiler, _task, namer);
+ new RuntimeTypeGenerator(_compiler, _task, _namer);
void visitMember(ClassElement enclosing, MemberElement member) {
assert(invariant(element, member.isDeclaration));
@@ -584,7 +597,7 @@ class ProgramBuilder {
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);
+ js.Name name = _namer.getterForMember(Names.call);
js.Fun function = js.js('function() { return this; }');
callStubs.add(_buildStubMethod(name, function));
}
@@ -624,7 +637,7 @@ class ProgramBuilder {
FieldElement element = field.element;
js.Expression code = _backend.generatedCode[element];
assert(code != null);
- js.Name name = namer.deriveSetterName(field.accessorName);
+ js.Name name = _namer.deriveSetterName(field.accessorName);
checkedSetters.add(_buildStubMethod(name, code, element: element));
}
}
@@ -634,8 +647,8 @@ class ProgramBuilder {
});
}
- js.Name name = namer.className(element);
- String holderName = namer.globalObjectFor(element);
+ js.Name name = _namer.className(element);
+ String holderName = _namer.globalObjectFor(element);
// TODO(floitsch): we shouldn't update the registry in the middle of
// building a class.
Holder holder = _registry.registerHolder(holderName);
@@ -692,7 +705,7 @@ class ProgramBuilder {
bool _methodCanBeApplied(FunctionElement method) {
return _backendUsage.isFunctionApplyUsed &&
- closedWorld.getMightBePassedToApply(method);
+ _closedWorld.getMightBePassedToApply(method);
}
/* Map | List */ _computeParameterDefaultValues(FunctionSignature signature) {
@@ -717,7 +730,7 @@ class ProgramBuilder {
DartMethod _buildMethod(MethodElement element) {
assert(element.isDeclaration);
- js.Name name = namer.methodPropertyName(element);
+ js.Name name = _namer.methodPropertyName(element);
js.Expression code = _backend.generatedCode[element];
// TODO(kasperl): Figure out under which conditions code is null.
@@ -732,7 +745,7 @@ class ProgramBuilder {
bool canBeApplied = _methodCanBeApplied(element);
js.Name aliasName = _superMemberData.isAliasedSuperMember(element)
- ? namer.aliasedSuperMemberPropertyName(element)
+ ? _namer.aliasedSuperMemberPropertyName(element)
: null;
if (isNotApplyTarget) {
@@ -743,11 +756,11 @@ 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));
- tearOffName = namer.getterForElement(element);
+ tearOffName = _namer.getterForElement(element);
}
}
@@ -761,7 +774,7 @@ class ProgramBuilder {
if (canTearOff) {
Selector callSelector =
new Selector.fromElement(element).toCallSelector();
- callName = namer.invocationName(callSelector);
+ callName = _namer.invocationName(callSelector);
}
ResolutionDartType memberType;
@@ -820,7 +833,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);
}
@@ -849,11 +862,22 @@ class ProgramBuilder {
}
Iterable<StaticStubMethod> _generateGetInterceptorMethods() {
- InterceptorStubGenerator stubGenerator =
- new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld);
+ InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+ _options,
+ _commonElements,
+ _emitter,
+ _nativeCodegenEnqueuer,
+ _constantHandler,
+ _namer,
+ _nativeData,
+ _interceptorData,
+ _oneShotInterceptorData,
+ _customElementsCodegenAnalysis,
+ _worldBuilder,
+ _closedWorld);
String holderName =
- namer.globalObjectForLibrary(_commonElements.interceptorsLibrary);
+ _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);
@@ -871,7 +895,7 @@ class ProgramBuilder {
List<Field> _buildFields(Element holder,
{bool visitStatics, bool isHolderInterceptedClass: false}) {
List<Field> fields = <Field>[];
- new FieldVisitor(_compiler, namer, closedWorld)
+ new FieldVisitor(_compiler, _namer, _closedWorld)
.visitFields(holder, visitStatics, (FieldElement field,
js.Name name,
js.Name accessorName,
@@ -917,11 +941,22 @@ class ProgramBuilder {
}
Iterable<StaticStubMethod> _generateOneShotInterceptors() {
- InterceptorStubGenerator stubGenerator =
- new InterceptorStubGenerator(_compiler, namer, _backend, closedWorld);
+ InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+ _options,
+ _commonElements,
+ _emitter,
+ _nativeCodegenEnqueuer,
+ _constantHandler,
+ _namer,
+ _nativeData,
+ _interceptorData,
+ _oneShotInterceptorData,
+ _customElementsCodegenAnalysis,
+ _worldBuilder,
+ _closedWorld);
String holderName =
- namer.globalObjectForLibrary(_commonElements.interceptorsLibrary);
+ _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);
@@ -934,8 +969,8 @@ class ProgramBuilder {
}
StaticDartMethod _buildStaticMethod(MethodElement element) {
- js.Name name = namer.methodPropertyName(element);
- String holder = namer.globalObjectFor(element);
+ js.Name name = _namer.methodPropertyName(element);
+ String holder = _namer.globalObjectFor(element);
js.Expression code = _backend.generatedCode[element];
bool isApplyTarget = !element.isConstructor && !element.isAccessor;
@@ -947,13 +982,13 @@ class ProgramBuilder {
_worldBuilder.staticFunctionsNeedingGetter.contains(element));
js.Name tearOffName =
- needsTearOff ? namer.staticClosureName(element) : null;
+ needsTearOff ? _namer.staticClosureName(element) : null;
js.Name callName = null;
if (needsTearOff) {
Selector callSelector =
new Selector.fromElement(element).toCallSelector();
- callName = namer.invocationName(callSelector);
+ callName = _namer.invocationName(callSelector);
}
js.Expression functionType;
ResolutionDartType type = element.type;
@@ -991,8 +1026,8 @@ class ProgramBuilder {
for (ConstantValue constantValue in constantValues) {
_registry.registerConstant(outputUnit, constantValue);
assert(!_constants.containsKey(constantValue));
- js.Name name = namer.constantName(constantValue);
- String constantObject = namer.globalObjectForConstant(constantValue);
+ js.Name name = _namer.constantName(constantValue);
+ String constantObject = _namer.globalObjectForConstant(constantValue);
Holder holder =
_registry.registerHolder(constantObject, isConstantsHolder: true);
Constant constant = new Constant(name, holder, constantValue);
@@ -1001,7 +1036,7 @@ class ProgramBuilder {
}
Holder _registerStaticStateHolder() {
- return _registry.registerHolder(namer.staticStateHolder,
+ return _registry.registerHolder(_namer.staticStateHolder,
isStaticStateHolder: true);
}
}
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698