Chromium Code Reviews| 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 417dca932d2030a87bbb16b2dfc317f37986eded..7eb9d6bcd1448a4b91d5b95c6068c029b893e85d 100644 |
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
| @@ -1161,7 +1161,8 @@ class CodeEmitterTask extends CompilerTask { |
| if (member.isAbstract(compiler)) return; |
| jsAst.Expression code = backend.generatedCode[member]; |
| if (code == null) return; |
| - builder.addProperty(namer.getName(member), code); |
| + String name = namer.getName(member); |
| + builder.addProperty(name, code); |
| code = backend.generatedBailoutCode[member]; |
| if (code != null) { |
| builder.addProperty(namer.getBailoutName(member), code); |
| @@ -1171,6 +1172,10 @@ class CodeEmitterTask extends CompilerTask { |
| if (!parameters.optionalParameters.isEmpty) { |
| addParameterStubs(member, builder.addProperty); |
| } |
| + var metadata = buildMetadataFunction(member); |
| + if (metadata != null) { |
| + builder.addProperty('@$name', metadata); |
| + } |
| } else if (!member.isField()) { |
| compiler.internalError('unexpected kind: "${member.kind}"', |
| element: member); |
| @@ -1796,7 +1801,13 @@ class CodeEmitterTask extends CompilerTask { |
| for (Element element in Elements.sortedByPosition(elements)) { |
| CodeBuffer buffer = bufferForElement(element, eagerBuffer); |
| jsAst.Expression code = backend.generatedCode[element]; |
| - emitStaticFunction(buffer, namer.getName(element), code); |
| + String name = namer.getName(element); |
| + emitStaticFunction(buffer, name, code); |
| + var metadata = buildMetadataFunction(element); |
| + if (metadata != null) { |
| + buffer.write(',$n$n"@$name":$_'); |
| + buffer.write(jsAst.prettyPrint(metadata, compiler)); |
| + } |
| jsAst.Expression bailoutCode = backend.generatedBailoutCode[element]; |
| if (bailoutCode != null) { |
| pendingElementsWithBailouts.remove(element); |
| @@ -3252,11 +3263,23 @@ if (typeof document !== "undefined" && document.readyState !== "complete") { |
| for (var property in descriptor) { |
| if (!hasOwnProperty.call(descriptor, property)) continue; |
| var element = descriptor[property]; |
| - if (typeof element === "function") { |
| + if (property.substring(0, 1) == "@") { |
| + property = property.substring(1); |
| + ${namer.CURRENT_ISOLATE}[property].\$metadata = element; |
|
ngeoffray
2013/06/03 06:51:55
Move '\$metadata' to a helper getter ?
ahe
2013/06/03 09:13:54
Done.
|
| + } else if (typeof element === "function") { |
| ${namer.CURRENT_ISOLATE}[property] = element; |
| functions.push(property); |
| } else { |
| - $classesCollector[property] = element; |
| + var newDesc = {} |
| + for (var prop in element) { |
| + if (!hasOwnProperty.call(element, prop)) continue; |
| + if (prop.substring(0, 1) == "@" && prop != "@") { |
| + newDesc[prop.substring(1)].\$metadata = element[prop]; |
| + } else { |
| + newDesc[prop] = element[prop]; |
| + } |
| + } |
| + $classesCollector[property] = newDesc; |
| classes.push(property); |
| classes.push(element[""]); |
| } |