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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2488543002: fix #27775, enum declaration where "name" is a property (Closed)
Patch Set: Created 4 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: 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);
}
« no previous file with comments | « pkg/dev_compiler/lib/sdk/ddc_sdk.sum ('k') | pkg/dev_compiler/test/codegen/language/enum_value_name_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698