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

Unified Diff: pkg/compiler/lib/src/js_backend/codegen/unsugar.dart

Issue 861093002: Support intercepted getters, setters and index operations. (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_backend/codegen/unsugar.dart
diff --git a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
index aa560120245f4bb17de3819344670be71add2986..688d3f319d6108acf6db8f744ce04cafe91a7bea 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
@@ -6,9 +6,9 @@ import '../../cps_ir/cps_ir_nodes.dart';
import '../../cps_ir/optimizers.dart';
import '../../constants/expressions.dart';
import '../../constants/values.dart';
-import '../../elements/elements.dart' show ClassElement, FieldElement;
+import '../../elements/elements.dart' show ClassElement, FieldElement, Element;
import '../../js_backend/codegen/glue.dart';
-import '../../dart2jslib.dart' show Selector;
+import '../../dart2jslib.dart' show Selector, World;
/// Rewrites the initial CPS IR to make Dart semantics explicit and inserts
/// special nodes that respect JavaScript behavior.
@@ -49,21 +49,22 @@ class UnsugarVisitor extends RecursiveVisitor {
processInvokeMethod(InvokeMethod node) {
Selector selector = node.selector;
+ // TODO(karlklose): should we rewrite all selectors?
asgerf 2015/01/21 14:03:39 I'm a bit torn on this, but I lean toward yes. Js
if (!_glue.isInterceptedSelector(selector)) return;
- if (!selector.isCall && !selector.isOperator) {
- // TODO(karlklose): handle special selectors.
- return;
- }
-
+ Primitive receiver = node.receiver.definition;
Set<ClassElement> interceptedClasses =
_glue.getInterceptedClassesOn(selector);
_glue.registerSpecializedGetInterceptor(interceptedClasses);
- Primitive receiver = node.receiver.definition;
Primitive intercepted = new Interceptor(receiver, interceptedClasses);
insertLetPrim(intercepted, node);
node.arguments.insert(0, node.receiver);
+ node.selector = new JsCallSelector(
+ selector,
+ _glue.invocationName(selector),
+ selector.positionalArgumentCount,
+ selector.namedArguments);
node.receiver = new Reference<Primitive>(intercepted);
}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/task.dart ('k') | pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698