Index: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
diff --git a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
index 895474515596b1d8a3ac97cd6ba8360b927e6efd..0c3bad6ad32730b495efcd01b6ef4ec87af8984e 100644 |
--- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
+++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
@@ -223,9 +223,14 @@ public class MemberBuilder { |
private FieldElement buildField(DartField fieldNode, Type type) { |
assert !fieldNode.getModifiers().isAbstractField(); |
+ Modifiers modifiers = fieldNode.getModifiers(); |
+ if (modifiers.isFinal() && (modifiers.isStatic() || context == topLevelContext)) { |
+ // final toplevel fields are implicitly compile-time constants. |
+ modifiers = modifiers.makeConstant(); |
floitsch
2011/10/14 14:36:58
This sounds wrong.
zundel
2011/10/14 20:59:52
I'm still changing the modifiers. Final and Const
|
+ } |
FieldElement fieldElement = fieldNode.getSymbol(); |
if (fieldElement == null) { |
- fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, fieldNode.getModifiers()); |
+ fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, modifiers); |
addField(currentHolder, fieldElement); |
} else { |
// This is a top-level element, and an element was already created in |