| Index: pkg/fasta/lib/src/kernel/body_builder.dart
|
| diff --git a/pkg/fasta/lib/src/kernel/body_builder.dart b/pkg/fasta/lib/src/kernel/body_builder.dart
|
| index 62ac65faa4be204b81ebe114eefdf4805c06f824..0e9e1931001eb46d16dc54157f2443c27f222837 100644
|
| --- a/pkg/fasta/lib/src/kernel/body_builder.dart
|
| +++ b/pkg/fasta/lib/src/kernel/body_builder.dart
|
| @@ -303,18 +303,16 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| void doFields(int count) {
|
| - List nodes = popList(count);
|
| - pop(); // Type.
|
| - pop(); // Modifiers.
|
| - for (var node in nodes) {
|
| - if (node is Identifier) {
|
| - // Ignore, there's no initializer.
|
| - } else if (node is VariableDeclaration) {
|
| + for (int i = 0; i < count; i++) {
|
| + Expression initializer = pop();
|
| + Identifier identifier = pop();
|
| + if (initializer != null) {
|
| + String name = identifier.name;
|
| FieldBuilder field;
|
| if (classBuilder != null) {
|
| - field = classBuilder.members[node.name];
|
| + field = classBuilder.members[name];
|
| } else {
|
| - field = library.members[node.name];
|
| + field = library.members[name];
|
| }
|
| if (field.next != null) {
|
| // TODO(ahe): This can happen, for example, if a final field is
|
| @@ -322,11 +320,11 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| internalError(
|
| "Unhandled: '${field.name}' has more than one declaration.");
|
| }
|
| - field.initializer = node.initializer;
|
| - } else {
|
| - internalError("Unhandled: ${node.runtimeType}");
|
| + field.initializer = initializer;
|
| }
|
| }
|
| + pop(); // Type.
|
| + pop(); // Modifiers.
|
| }
|
|
|
| @override
|
| @@ -871,6 +869,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| @override
|
| + void endFieldInitializer(Token assignmentOperator) {
|
| + debugEvent("FieldInitializer");
|
| + assert(assignmentOperator.stringValue == "=");
|
| + push(popForValue());
|
| + }
|
| +
|
| + @override
|
| + void handleNoFieldInitializer(Token token) {
|
| + debugEvent("NoFieldInitializer");
|
| + push(NullValue.FieldInitializer);
|
| + }
|
| +
|
| + @override
|
| void endInitializedIdentifier() {
|
| // TODO(ahe): Use [InitializedIdentifier] here?
|
| debugEvent("InitializedIdentifier");
|
|
|