| Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| index 19e46d46e3c26bffe2c6839e6d8fa95f4511f91a..89bbabc1d0c553611a3a8f21e5adf1839c99bf85 100644
|
| --- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| +++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| @@ -1096,12 +1096,12 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| element.fields.where((f) => f.type == type));
|
|
|
| // Create toString() method
|
| - var properties = new List<JS.Property>();
|
| + var nameProperties = new List<JS.Property>(fields.length);
|
| for (var i = 0; i < fields.length; ++i) {
|
| - properties.add(new JS.Property(
|
| - js.number(i), js.string('${type.name}.${fields[i].name}')));
|
| + nameProperties[i] = new JS.Property(
|
| + js.number(i), js.string('${type.name}.${fields[i].name}'));
|
| }
|
| - var nameMap = new JS.ObjectInitializer(properties, multiline: true);
|
| + var nameMap = new JS.ObjectInitializer(nameProperties, multiline: true);
|
| var toStringF = new JS.Method(js.string('toString'),
|
| js.call('function() { return #[this.index]; }', nameMap) as JS.Fun);
|
|
|
| @@ -1113,21 +1113,16 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| js.statement('# = #', [id, classExpr])
|
| ];
|
|
|
| - // Create static fields for each enum value
|
| - for (var i = 0; i < fields.length; ++i) {
|
| - result.add(js.statement('#.# = #.const(new #(#));',
|
| - [id, fields[i].name, _runtimeModule, id, js.number(i)]));
|
| - }
|
| -
|
| - // Create static values list
|
| - var values = new JS.ArrayInitializer(new List<JS.Expression>.from(
|
| - fields.map((f) => js.call('#.#', [id, f.name]))));
|
| -
|
| - // dart.constList helper internally depends on _interceptors.JSArray.
|
| + // defineEnumValues internally depends on dart.constList which uses
|
| + // _interceptors.JSArray.
|
| _declareBeforeUse(_jsArray);
|
|
|
| - result.add(js.statement('#.values = #.constList(#, #);',
|
| - [id, _runtimeModule, values, _emitType(type)]));
|
| + // Create static fields for each enum value, and the "values" getter
|
| + result.add(_callHelperStatement('defineEnumValues(#, #);', [
|
| + id,
|
| + new JS.ArrayInitializer(fields.map((f) => _propertyName(f.name)).toList(),
|
| + multiline: true)
|
| + ]));
|
|
|
| return _statement(result);
|
| }
|
|
|