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

Unified Diff: lib/compiler/implementation/ssa/codegen.dart

Issue 10825337: Add name and library to selectors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Make library == null for non-private selectors. Created 8 years, 4 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: lib/compiler/implementation/ssa/codegen.dart
diff --git a/lib/compiler/implementation/ssa/codegen.dart b/lib/compiler/implementation/ssa/codegen.dart
index 25fd77484649b5809f2ed359dddce9a330666cef..3b5cabcdcec72d21961e343d6e5d3846d39678c8 100644
--- a/lib/compiler/implementation/ssa/codegen.dart
+++ b/lib/compiler/implementation/ssa/codegen.dart
@@ -1420,7 +1420,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
push(jsPropertyCall(object, methodName, arguments), node);
}
- Selector getOptimizedSelectorFor(HInvoke node, Selector defaultSelector) {
+ Selector getOptimizedSelectorFor(HInvokeDynamic node,
+ Selector defaultSelector) {
// TODO(4434): For private members we need to use the untyped selector.
if (node.name.isPrivate()) return defaultSelector;
Type receiverType = node.inputs[0].propagatedType.computeType(compiler);
@@ -1437,8 +1438,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
compiler.namer.setterName(currentLibrary, node.name),
visitArguments(node.inputs)),
node);
+ Selector setter = new Selector.setter(node.name, currentLibrary);
world.registerDynamicSetter(
- node.name, getOptimizedSelectorFor(node, Selector.SETTER));
+ node.name, getOptimizedSelectorFor(node, setter));
}
visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
@@ -1447,8 +1449,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
compiler.namer.getterName(currentLibrary, node.name),
visitArguments(node.inputs)),
node);
+ Selector getter = new Selector.getter(node.name, currentLibrary);
world.registerDynamicGetter(
- node.name, getOptimizedSelectorFor(node, Selector.GETTER));
+ node.name, getOptimizedSelectorFor(node, getter));
}
visitInvokeClosure(HInvokeClosure node) {
@@ -1458,8 +1461,13 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
visitArguments(node.inputs)),
node);
// TODO(floitsch): we should have a separate list for closure invocations.
+ Selector call = new Selector.call(
+ compiler.namer.CLOSURE_INVOCATION_NAME,
+ node.selector.library,
+ node.selector.argumentCount,
+ node.selector.namedArguments);
world.registerDynamicInvocation(compiler.namer.CLOSURE_INVOCATION_NAME,
- node.selector);
+ call);
}
visitInvokeStatic(HInvokeStatic node) {
@@ -1517,11 +1525,12 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
// If we don't have an element we register a dynamic field getter.
// This might lead to unnecessary getters, but these cases should be
// rare.
- world.registerDynamicGetter(node.fieldName, Selector.GETTER);
+ Selector getter = new Selector.getter(node.fieldName, node.library);
+ world.registerDynamicGetter(node.fieldName, getter);
} else {
Type type = node.receiver.propagatedType.computeType(compiler);
if (type != null) {
- world.registerFieldGetter(node.element.name, type);
+ world.registerFieldGetter(node.element.name, node.library, type);
}
}
}
@@ -1554,12 +1563,13 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
// If we don't have an element we register a dynamic field setter.
// This might lead to unnecessary setters, but these cases should be
// rare.
- world.registerDynamicSetter(node.fieldName, Selector.SETTER);
+ Selector setter = new Selector.setter(node.fieldName, node.library);
+ world.registerDynamicSetter(node.fieldName, setter);
} else {
Type type = node.receiver.propagatedType.computeType(compiler);
if (type != null) {
if (!work.element.isGenerativeConstructorBody()) {
- world.registerFieldSetter(node.element.name, type);
+ world.registerFieldSetter(node.element.name, node.library, type);
}
// Determine the types seen so far for the field. If only number
// types have been seen and the value of the field set is a

Powered by Google App Engine
This is Rietveld 408576698