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"); |