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

Unified Diff: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart

Issue 865223002: dart2js: store call stubs in the model. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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
Index: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
index 7f53cbd5ab054cfdb3b6d2cae107412beb767613..e79e424e656d1975df979157d4d2a51211ad82eb 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
@@ -240,90 +240,6 @@ class ContainerBuilder extends CodeEmitterHelper {
}
}
- /**
- * Documentation wanted -- johnniwinther
- *
- * Invariant: [member] must be a declaration element.
- */
- void emitCallStubForGetter(Element member,
- Set<Selector> selectors,
- AddPropertyFunction addProperty) {
- assert(invariant(member, member.isDeclaration));
- LibraryElement memberLibrary = member.library;
- // If the method is intercepted, the stub gets the
- // receiver explicitely and we need to pass it to the getter call.
- bool isInterceptedMethod = backend.isInterceptedMethod(member);
- bool isInterceptorClass =
- backend.isInterceptorClass(member.enclosingClass);
-
- const String receiverArgumentName = r'$receiver';
-
- jsAst.Expression buildGetter() {
- jsAst.Expression receiver =
- js(isInterceptorClass ? receiverArgumentName : 'this');
- if (member.isGetter) {
- String getterName = namer.getterName(member);
- if (isInterceptedMethod) {
- return js('this.#(#)', [getterName, receiver]);
- }
- return js('#.#()', [receiver, getterName]);
- } else {
- String fieldName = namer.instanceFieldPropertyName(member);
- return js('#.#', [receiver, fieldName]);
- }
- }
-
- // Two selectors may match but differ only in type. To avoid generating
- // identical stubs for each we track untyped selectors which already have
- // stubs.
- Set<Selector> generatedSelectors = new Set<Selector>();
- for (Selector selector in selectors) {
- if (selector.applies(member, compiler.world)) {
- selector = selector.asUntyped;
- if (generatedSelectors.contains(selector)) continue;
- generatedSelectors.add(selector);
-
- String invocationName = namer.invocationName(selector);
- Selector callSelector = new Selector.callClosureFrom(selector);
- String closureCallName = namer.invocationName(callSelector);
-
- List<jsAst.Parameter> parameters = <jsAst.Parameter>[];
- List<jsAst.Expression> arguments = <jsAst.Expression>[];
- if (isInterceptedMethod) {
- parameters.add(new jsAst.Parameter(receiverArgumentName));
- }
-
- for (int i = 0; i < selector.argumentCount; i++) {
- String name = 'arg$i';
- parameters.add(new jsAst.Parameter(name));
- arguments.add(js('#', name));
- }
-
- jsAst.Fun function = js(
- 'function(#) { return #.#(#); }',
- [ parameters, buildGetter(), closureCallName, arguments]);
-
- compiler.dumpInfoTask.registerElementAst(member,
- addProperty(invocationName, function));
- }
- }
- }
-
- /**
- * Documentation wanted -- johnniwinther
- *
- * Invariant: [member] must be a declaration element.
- */
- void emitExtraAccessors(Element member, ClassBuilder builder) {
- assert(invariant(member, member.isDeclaration));
- if (member.isGetter || member.isField) {
- Set<Selector> selectors = compiler.codegenWorld.invokedNames[member.name];
- if (selectors != null && !selectors.isEmpty) {
- emitCallStubForGetter(member, selectors, builder.addProperty);
- }
- }
- }
-
void addMember(Element member, ClassBuilder builder) {
assert(invariant(member, member.isDeclaration));
@@ -338,7 +254,6 @@ class ContainerBuilder extends CodeEmitterHelper {
compiler.internalError(member,
'Unexpected kind: "${member.kind}".');
}
- if (member.isInstanceMember) emitExtraAccessors(member, builder);
}
void addMemberMethod(FunctionElement member, ClassBuilder builder) {

Powered by Google App Engine
This is Rietveld 408576698