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

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 17389003: interceptedNames should include all interceptor method generated, not just the ones called. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 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: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index 7721152828ca122906778004e701eeb526b89d91..f361e8649034d8dfad65785383893f869cdf6599 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -75,6 +75,7 @@ class CodeEmitterTask extends CompilerTask {
final List<ClassElement> nativeClasses = <ClassElement>[];
final List<Selector> trivialNsmHandlers = <Selector>[];
final Map<String, String> mangledFieldNames = <String, String>{};
+ final Set<String> interceptorInvocationNames = new Set<String>();
// TODO(ngeoffray): remove this field.
Set<ClassElement> instantiatedClasses;
@@ -958,6 +959,7 @@ class CodeEmitterTask extends CompilerTask {
count++;
parametersBuffer[0] = new jsAst.Parameter(receiverArgumentName);
argumentsBuffer[0] = js(receiverArgumentName);
+ interceptorInvocationNames.add(invocationName);
}
int optionalParameterStart = positionalArgumentCount + extraArgumentCount;
@@ -1175,6 +1177,9 @@ class CodeEmitterTask extends CompilerTask {
jsAst.Expression code = backend.generatedCode[member];
if (code == null) return;
String name = namer.getName(member);
+ if (backend.isInterceptedMethod(member)) {
+ interceptorInvocationNames.add(name);
+ }
builder.addProperty(name, code);
var metadata = buildMetadataFunction(member);
if (metadata != null) {
@@ -2977,18 +2982,21 @@ if (typeof document !== "undefined" && document.readyState !== "complete") {
* method with an extra parameter.
*/
void emitInterceptedNames(CodeBuffer buffer) {
+ // TODO(ahe): We should not include this list, it can be generated
ngeoffray 2013/06/18 12:45:02 I don't understand this comment: 'include' = 'gene
ahe 2013/06/18 12:55:07 Done.
+ // automatically given subclasses of Interceptor (which can easily be
+ // identified).
if (!compiler.enabledInvokeOn) return;
String name = backend.namer.getName(backend.interceptedNames);
int index = 0;
- List<jsAst.ArrayElement> elements = backend.usedInterceptors.map(
- (Selector selector) {
- jsAst.Literal str = js.string(namer.invocationName(selector));
+ var invocationNames = interceptorInvocationNames.toList()..sort();
+ List<jsAst.ArrayElement> elements = invocationNames.map(
+ (String invocationName) {
+ jsAst.Literal str = js.string(invocationName);
return new jsAst.ArrayElement(index++, str);
}).toList();
- jsAst.ArrayInitializer array = new jsAst.ArrayInitializer(
- backend.usedInterceptors.length,
- elements);
+ jsAst.ArrayInitializer array =
+ new jsAst.ArrayInitializer(invocationNames.length, elements);
jsAst.Expression assignment = js('$isolateProperties.$name = #', array);

Powered by Google App Engine
This is Rietveld 408576698