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

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

Issue 12517012: Revert "Revert "Use interceptor convention for methods declared on native classes."" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 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: sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
index 359a88e321a142435d521eb6f360cceb49df1fc2..bf9f5c088814b59b949345163d2c20e7b7ade3c0 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
@@ -191,6 +191,7 @@ function(cls, desc) {
List<jsAst.Statement> generateParameterStubStatements(
Element member,
+ bool isInterceptedMethod,
String invocationName,
List<jsAst.Parameter> stubParameters,
List<jsAst.Expression> argumentsBuffer,
@@ -211,6 +212,7 @@ function(cls, desc) {
potentiallyConvertDartClosuresToJs(statements, member, stubParameters);
String target;
+ jsAst.Expression receiver;
List<jsAst.Expression> arguments;
if (!nativeMethods.contains(member)) {
@@ -222,12 +224,18 @@ function(cls, desc) {
// When calling a JS method, we call it with the native name, and only the
// arguments up until the last one provided.
target = member.fixedBackendName();
- arguments = argumentsBuffer.getRange(
- 0, indexOfLastOptionalArgumentInParameters + 1);
+
+ if (isInterceptedMethod) {
+ receiver = argumentsBuffer[0];
+ arguments = argumentsBuffer.getRange(1,
+ indexOfLastOptionalArgumentInParameters);
+ } else {
+ receiver = new jsAst.VariableUse('this');
+ arguments = argumentsBuffer.getRange(0,
+ indexOfLastOptionalArgumentInParameters + 1);
+ }
}
- statements.add(
- new jsAst.Return(
- new jsAst.VariableUse('this')[target](arguments)));
+ statements.add(new jsAst.Return(receiver[target](arguments)));
if (!overriddenMethods.contains(member)) {
// Call the method directly.

Powered by Google App Engine
This is Rietveld 408576698