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..84a156ec7989602819f6f13d1d82ecb78d6884a5 100644 |
--- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
+++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java |
@@ -223,9 +223,17 @@ 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.makeStatic(); |
+ // Set the "const" modifier so that it is easy to compare a constant field to other |
+ // types of constant expressions. |
+ modifiers = modifiers.makeConstant(); |
+ } |
ngeoffray
2011/10/17 10:59:38
Since all initializations must be constant, do you
zundel
2011/10/17 14:14:26
This is just for help in evaluating whether an exp
|
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 |