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

Unified Diff: pkg/compiler/lib/src/ssa/codegen.dart

Issue 1031633003: Almost-constant interceptors (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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: pkg/compiler/lib/src/ssa/codegen.dart
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 60403c3c56617bff3fd136a2943688f4a4d2a320..612a46547df2408e95075d65ea9d90fb71dc5721 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1472,14 +1472,24 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
}
void visitInterceptor(HInterceptor node) {
- registry.registerSpecializedGetInterceptor(node.interceptedClasses);
- String name = backend.namer.nameForGetInterceptor(node.interceptedClasses);
- var isolate = new js.VariableUse(
- backend.namer.globalObjectFor(backend.interceptorsLibrary));
- use(node.receiver);
- List<js.Expression> arguments = <js.Expression>[pop()];
- push(js.propertyCall(isolate, name, arguments), node);
- registry.registerUseInterceptor();
+ if (node.inputs.length == 1) {
+ registry.registerSpecializedGetInterceptor(node.interceptedClasses);
+ String name = backend.namer.nameForGetInterceptor(node.interceptedClasses);
+ var isolate = new js.VariableUse(
+ backend.namer.globalObjectFor(backend.interceptorsLibrary));
+ use(node.receiver);
+ List<js.Expression> arguments = <js.Expression>[pop()];
+ push(js.propertyCall(isolate, name, arguments), node);
+ registry.registerUseInterceptor();
+ } else {
+ assert(node.inputs.length == 2);
+ HInstruction receiver = node.receiver;
+ use(receiver);
+ js.Expression receiverExpression = pop();
+ use(node.inputs[1]);
+ js.Expression constant = pop();
+ push(js.js('# && #', [receiverExpression, constant]));
+ }
}
visitInvokeDynamicMethod(HInvokeDynamicMethod node) {

Powered by Google App Engine
This is Rietveld 408576698