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

Unified Diff: lib/compiler/implementation/emitter.dart

Issue 10191016: Introduce typed selectors for getters and setters also for better tree shaking. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 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/emitter.dart
===================================================================
--- lib/compiler/implementation/emitter.dart (revision 6933)
+++ lib/compiler/implementation/emitter.dart (working copy)
@@ -202,7 +202,7 @@
// TODO(ngeoffray): Have another class generate the code for the
// fields.
if ((member.modifiers === null || !member.modifiers.isFinal()) &&
- compiler.universe.invokedSetters.contains(member.name)) {
+ compiler.universe.hasOneSetter(member, compiler)) {
String setterName = namer.setterName(member.getLibrary(), member.name);
String name = member.isNative()
? member.name.slowToString()
@@ -210,7 +210,7 @@
buffer.add('${attachTo(setterName)} = function(v){\n');
buffer.add(' this.$name = v;\n};\n');
}
- if (compiler.universe.invokedGetters.contains(member.name)) {
+ if (compiler.universe.hasOneGetter(member, compiler)) {
String getterName = namer.getterName(member.getLibrary(), member.name);
String name = member.isNative()
? member.name.slowToString()
@@ -482,21 +482,23 @@
"this.${namer.instanceFieldName(member.getLibrary(), member.name)}";
}
for (Selector selector in selectors) {
- String invocationName =
- namer.instanceMethodInvocationName(member.getLibrary(), member.name,
- selector);
- SourceString callName = Namer.CLOSURE_INVOCATION_NAME;
- String closureCallName =
- namer.instanceMethodInvocationName(member.getLibrary(), callName,
- selector);
- List<String> arguments = <String>[];
- for (int i = 0; i < selector.argumentCount; i++) {
- arguments.add("arg$i");
+ if (selector.applies(member, compiler)) {
+ String invocationName =
+ namer.instanceMethodInvocationName(member.getLibrary(), member.name,
+ selector);
+ SourceString callName = Namer.CLOSURE_INVOCATION_NAME;
+ String closureCallName =
+ namer.instanceMethodInvocationName(member.getLibrary(), callName,
+ selector);
+ List<String> arguments = <String>[];
+ for (int i = 0; i < selector.argumentCount; i++) {
+ arguments.add("arg$i");
+ }
+ String joined = Strings.join(arguments, ", ");
+ buffer.add("${attachTo(invocationName)} = function($joined) {\n");
+ buffer.add(" return $getter.$closureCallName($joined);\n");
+ buffer.add("};\n");
}
- String joined = Strings.join(arguments, ", ");
- buffer.add("${attachTo(invocationName)} = function($joined) {\n");
- buffer.add(" return $getter.$closureCallName($joined);\n");
- buffer.add("};\n");
}
}
@@ -574,7 +576,7 @@
buffer, attachTo, member, selectors);
}
} else if (member.kind == ElementKind.FUNCTION) {
- if (compiler.universe.invokedGetters.contains(member.name)) {
+ if (compiler.universe.hasOneGetter(member, compiler)) {
compiler.emitter.emitDynamicFunctionGetter(buffer, attachTo, member);
}
}
@@ -634,7 +636,8 @@
}
});
- compiler.universe.invokedGetters.forEach((SourceString getterName) {
+ compiler.universe.invokedGetters.forEach((SourceString getterName,
+ Set<Selector> selectors) {
if (getterName.isPrivate()) {
for (LibraryElement lib in libraries) {
String jsName = namer.getterName(lib, getterName);
@@ -648,7 +651,8 @@
}
});
- compiler.universe.invokedSetters.forEach((SourceString setterName) {
+ compiler.universe.invokedSetters.forEach((SourceString setterName,
+ Set<Selector> selectors) {
if (setterName.isPrivate()) {
for (LibraryElement lib in libraries) {
String jsName = namer.setterName(lib, setterName);

Powered by Google App Engine
This is Rietveld 408576698