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

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, 1 month 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 6fb21d33098f5aeeee2ffdad53fd302aee7c1aa9..fc7f47f37a401f0baa25b7eb70fa323f5a2785d4 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) {
@@ -118,21 +118,19 @@ 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, true);
+ code.body.statements.add(js.string(metadata.join(',')).toStatement());
+ return code;
+ }
+
+ // TODO(ahe): Remove optional argument.
+ List<int> computeMetadata(FunctionElement element, [bool includeNames = false]) {
return compiler.withCurrentElement(element, () {
+ if (!backend.retainMetadataOf(element)) return const <int>[];
List<int> metadata = <int>[];
- FunctionSignature signature = element.functionSignature;
- if (element.isConstructor()) {
- metadata.add(reifyType(element.getEnclosingClass().thisType));
- } else {
- metadata.add(reifyType(signature.returnType));
- }
- signature.forEachParameter((Element parameter) {
- metadata
- ..add(reifyName(parameter.name))
- ..add(reifyType(parameter.computeType(compiler)));
- });
Link link = element.metadata;
// TODO(ahe): Why is metadata sometimes null?
if (link != null) {
@@ -140,8 +138,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