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

Unified Diff: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java

Issue 8231031: Check for compile-time constants in DartCompiler (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Feedback from floitsch Created 9 years, 2 months 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: 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

Powered by Google App Engine
This is Rietveld 408576698