| 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 b1786bb2679fcc29fcf8ec808665599bc779dc0a..e85e9e9be7603cca263ae3a01eefba128d3088d6 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
|
| @@ -73,6 +73,7 @@ class CodeEmitterTask extends CompilerTask {
|
| final List<ClassElement> deferredClasses = <ClassElement>[];
|
| final List<ClassElement> nativeClasses = <ClassElement>[];
|
| final List<Selector> trivialNsmHandlers = <Selector>[];
|
| + final Map<String, String> mangledFieldNames = <String, String>{};
|
|
|
| // TODO(ngeoffray): remove this field.
|
| Set<ClassElement> instantiatedClasses;
|
| @@ -1460,6 +1461,21 @@ class CodeEmitterTask extends CompilerTask {
|
| /* Do nothing. */
|
| }
|
|
|
| + void recordMangledField(Element member,
|
| + String accessorName,
|
| + String memberName) {
|
| + String previousName = mangledFieldNames.putIfAbsent(
|
| + '${namer.getterPrefix}$accessorName',
|
| + () => memberName);
|
| + assert(invariant(member, previousName == memberName,
|
| + message: '$previousName != ${memberName}'));
|
| + previousName = mangledFieldNames.putIfAbsent(
|
| + '${namer.setterPrefix}$accessorName',
|
| + () => '${memberName}=');
|
| + assert(invariant(member, previousName == '${memberName}=',
|
| + message: '$previousName != ${memberName}='));
|
| + }
|
| +
|
| /// Returns `true` if fields added.
|
| bool emitClassFields(ClassElement classElement,
|
| ClassBuilder builder,
|
| @@ -1500,6 +1516,9 @@ class CodeEmitterTask extends CompilerTask {
|
| hasMetadata = true;
|
| }
|
| }
|
| + if (compiler.mirrorsEnabled) {
|
| + recordMangledField(member, accessorName, member.name.slowToString());
|
| + }
|
| if (!needsAccessor) {
|
| // Emit field for constructor generation.
|
| assert(!classIsNative);
|
| @@ -3087,6 +3106,22 @@ if (typeof document !== "undefined" && document.readyState !== "complete") {
|
| if (compiler.enableMinification) {
|
| mainBuffer.write(';');
|
| }
|
| + if (!mangledFieldNames.isEmpty) {
|
| + var keys = mangledFieldNames.keys.toList();
|
| + keys.sort();
|
| + var properties = [];
|
| + for (String key in keys) {
|
| + var value = js.string('${mangledFieldNames[key]}');
|
| + properties.add(new jsAst.Property(js.string(key), value));
|
| + }
|
| + var map = new jsAst.ObjectInitializer(properties);
|
| + mainBuffer.write(
|
| + jsAst.prettyPrint(
|
| + js('init.mangledNames = #', map).toStatement(), compiler));
|
| + if (compiler.enableMinification) {
|
| + mainBuffer.write(';');
|
| + }
|
| + }
|
| mainBuffer
|
| ..write(getReflectionDataParser())
|
| ..write('([$n');
|
|
|