Fix another non-const expression binding crash
It's possible to resolve a qualified prefix of an expression that turns
out to be non-constant.
MOE_MIGRATED_REVID=136634305
diff --git a/java/com/google/turbine/binder/ConstEvaluator.java b/java/com/google/turbine/binder/ConstEvaluator.java
index d4c0520..2f6fae9 100644
--- a/java/com/google/turbine/binder/ConstEvaluator.java
+++ b/java/com/google/turbine/binder/ConstEvaluator.java
@@ -160,6 +160,9 @@
/** Evaluates a reference to another constant variable. */
Const evalConstVar(ConstVarName t) {
FieldInfo field = resolveField(t);
+ if (field == null) {
+ return null;
+ }
if ((field.access() & TurbineFlag.ACC_ENUM) == TurbineFlag.ACC_ENUM) {
return new Const.EnumConstantValue(field.sym());
}
@@ -180,6 +183,9 @@
ClassSymbol sym = (ClassSymbol) result.sym();
for (int i = 0; i < result.remaining().size() - 1; i++) {
sym = Resolve.resolve(env, sym, result.remaining().get(i));
+ if (sym == null) {
+ return null;
+ }
}
field = Resolve.resolveField(env, sym, Iterables.getLast(result.remaining()));
if (field != null) {
diff --git a/javatests/com/google/turbine/lower/testdata/non_const.test b/javatests/com/google/turbine/lower/testdata/non_const.test
index def461a..046a8de 100644
--- a/javatests/com/google/turbine/lower/testdata/non_const.test
+++ b/javatests/com/google/turbine/lower/testdata/non_const.test
@@ -12,4 +12,5 @@
public static final int D = -xs.length;
public static final short E = (short) xs.length;
public static final int[] F = {xs.length};
+ public static final int G = Test.xs.length;
}