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

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart

Issue 27524003: Generate tear-off closures dynamically. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 2 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_emitter/metadata_emitter.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
index f4597f3b9946389ee7dedb5a424331c19a09c13a..bfad81636c955b36660503dece89356eba4aeba7 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
@@ -42,9 +42,9 @@ class MetadataEmitter extends CodeEmitterHelper {
});
}
- jsAst.Node reifyDefaultArguments(FunctionElement function) {
+ List<int> reifyDefaultArguments(FunctionElement function) {
FunctionSignature signature = function.computeSignature(compiler);
- if (signature.optionalParameterCount == 0) return null;
+ if (signature.optionalParameterCount == 0) return const [];
List<int> defaultValues = <int>[];
for (Element element in signature.orderedOptionalParameters) {
Constant value =
@@ -55,7 +55,7 @@ class MetadataEmitter extends CodeEmitterHelper {
.getText();
defaultValues.add(addGlobalMetadata(stringRepresentation));
}
- return js.toExpression(defaultValues);
+ return defaultValues;
}
int reifyMetadata(MetadataAnnotation annotation) {
@@ -113,9 +113,17 @@ class MetadataEmitter extends CodeEmitterHelper {
buffer.write('];$n');
}
+ // TODO(ahe): Delete this method.
jsAst.Fun extendWithMetadata(FunctionElement element, jsAst.Fun code) {
if (!backend.retainMetadataOf(element)) return code;
+ List<int> metadata = computeMetadata(element);
+ code.body.statements.add(js.string(metadata.join(',')).toStatement());
+ return code;
+ }
+
+ List<int> computeMetadata(FunctionElement element) {
return compiler.withCurrentElement(element, () {
+ if (!backend.retainMetadataOf(element)) return const <int>[];
List<int> metadata = <int>[];
FunctionSignature signature = element.functionSignature;
if (element.isConstructor()) {
@@ -135,8 +143,7 @@ class MetadataEmitter extends CodeEmitterHelper {
metadata.add(reifyMetadata(link.head));
}
}
- code.body.statements.add(js.string(metadata.join(',')).toStatement());
- return code;
+ return metadata;
});
}
}

Powered by Google App Engine
This is Rietveld 408576698