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

Unified Diff: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 11440027: Fix for Issue 7172. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years 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 | « no previous file | tests/language/getter_setter_interceptor_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index 506b8308671cb6bdf214912f30123949d428dec7..692b3c1c864f77cbc10227b066ea385864c58db9 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -980,30 +980,40 @@ $lazyInitializerLogic
// Emit forwarders for the ObjectInterceptor class. We need to
// emit all possible sends on intercepted methods.
for (Selector selector in backend.usedInterceptors) {
+
+ List<js.Parameter> parameters = <js.Parameter>[];
+ List<js.Expression> arguments = <js.Expression>[];
+ parameters.add(new js.Parameter('receiver'));
+
String name;
- String comma = '';
- String parameters = '';
if (selector.isGetter()) {
name = backend.namer.getterName(selector.library, selector.name);
} else if (selector.isSetter()) {
name = backend.namer.setterName(selector.library, selector.name);
+ parameters.add(new js.Parameter('value'));
+ arguments.add(new js.VariableUse('value'));
} else {
assert(selector.isCall() || selector.isOperator());
name = backend.namer.instanceMethodInvocationName(
selector.library, selector.name, selector);
- if (selector.argumentCount > 0) {
- comma = ', ';
- int i = 0;
- for (; i < selector.argumentCount - 1; i++) {
- parameters = '${parameters}a$i, ';
- }
- parameters = '${parameters}a$i';
+ for (int i = 0; i < selector.argumentCount; i++) {
+ String argName = 'a$i';
+ parameters.add(new js.Parameter(argName));
+ arguments.add(new js.VariableUse(argName));
}
}
- StringBuffer body = new StringBuffer(
- "function(receiver$comma$parameters) {"
- " return receiver.$name($parameters); }");
- defineInstanceMember(name, body);
+ js.Fun function =
+ new js.Fun(parameters,
+ new js.Block(
+ <js.Statement>[
+ new js.Return(
+ new js.VariableUse('receiver')
+ .dot(name)
+ .callWith(arguments))]));
+
+ CodeBuffer code = new CodeBuffer();
+ code.add(js.prettyPrint(function, compiler));
+ defineInstanceMember(name, code);
}
}
« no previous file with comments | « no previous file | tests/language/getter_setter_interceptor_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698