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

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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/interceptor_simplifier.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..ea200c3cb337ce2af6834488c480f7351e302bed 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1472,14 +1472,25 @@ 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.isConditionalConstantInterceptor) {
+ assert(node.inputs.length == 2);
+ use(node.receiver);
+ js.Expression receiverExpression = pop();
+ use(node.conditionalConstantInterceptor);
+ js.Expression constant = pop();
+ push(js.js('# && #', [receiverExpression, constant]));
+ } else {
+ assert(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();
+ }
}
visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/interceptor_simplifier.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698