Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ public static WordBase getFieldWord(Object obj, InterpreterResolvedJavaField wor
public static boolean getFieldBoolean(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return field.getUnmaterializedConstant().asBoolean();
return getUnmaterializedConstant(field).asBoolean();
}
if (field.isVolatile()) {
return U.getBooleanVolatile(obj, field.getOffset());
Expand All @@ -348,7 +348,7 @@ public static boolean getFieldBoolean(Object obj, InterpreterResolvedJavaField f
public static int getFieldInt(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return field.getUnmaterializedConstant().asInt();
return getUnmaterializedConstant(field).asInt();
}
if (field.isVolatile()) {
return U.getIntVolatile(obj, field.getOffset());
Expand All @@ -360,7 +360,7 @@ public static int getFieldInt(Object obj, InterpreterResolvedJavaField field) {
public static long getFieldLong(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return field.getUnmaterializedConstant().asLong();
return getUnmaterializedConstant(field).asLong();
}
if (field.isVolatile()) {
return U.getLongVolatile(obj, field.getOffset());
Expand All @@ -372,7 +372,7 @@ public static long getFieldLong(Object obj, InterpreterResolvedJavaField field)
public static byte getFieldByte(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return (byte) field.getUnmaterializedConstant().asInt();
return (byte) getUnmaterializedConstant(field).asInt();
}
if (field.isVolatile()) {
return U.getByteVolatile(obj, field.getOffset());
Expand All @@ -384,7 +384,7 @@ public static byte getFieldByte(Object obj, InterpreterResolvedJavaField field)
public static short getFieldShort(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return (short) field.getUnmaterializedConstant().asInt();
return (short) getUnmaterializedConstant(field).asInt();
}
if (field.isVolatile()) {
return U.getShortVolatile(obj, field.getOffset());
Expand All @@ -396,7 +396,7 @@ public static short getFieldShort(Object obj, InterpreterResolvedJavaField field
public static float getFieldFloat(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return field.getUnmaterializedConstant().asFloat();
return getUnmaterializedConstant(field).asFloat();
}
if (field.isVolatile()) {
return U.getFloatVolatile(obj, field.getOffset());
Expand All @@ -408,7 +408,7 @@ public static float getFieldFloat(Object obj, InterpreterResolvedJavaField field
public static double getFieldDouble(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return field.getUnmaterializedConstant().asDouble();
return getUnmaterializedConstant(field).asDouble();
}
if (field.isVolatile()) {
return U.getDoubleVolatile(obj, field.getOffset());
Expand All @@ -420,7 +420,7 @@ public static double getFieldDouble(Object obj, InterpreterResolvedJavaField fie
public static Object getFieldObject(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
JavaConstant constant = field.getUnmaterializedConstant();
JavaConstant constant = getUnmaterializedConstant(field);
if (JavaConstant.NULL_POINTER.equals(constant)) {
return null;
}
Expand All @@ -438,7 +438,7 @@ public static Object getFieldObject(Object obj, InterpreterResolvedJavaField fie
public static char getFieldChar(Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
if (field.isUnmaterializedConstant()) {
return (char) field.getUnmaterializedConstant().asInt();
return (char) getUnmaterializedConstant(field).asInt();
}
if (field.isVolatile()) {
return U.getCharVolatile(obj, field.getOffset());
Expand All @@ -447,7 +447,17 @@ public static char getFieldChar(Object obj, InterpreterResolvedJavaField field)
}
}

private static JavaConstant getUnmaterializedConstant(InterpreterResolvedJavaField field) {
JavaConstant constant = field.getUnmaterializedConstant();
if (constant == null) {
throw VMError.shouldNotReachHere("Cannot load unmaterialized field " + field);
}
return constant;
}

public static void setFieldBoolean(boolean value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putBooleanVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -457,6 +467,7 @@ public static void setFieldBoolean(boolean value, Object obj, InterpreterResolve

public static void setFieldByte(byte value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putByteVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -466,6 +477,7 @@ public static void setFieldByte(byte value, Object obj, InterpreterResolvedJavaF

public static void setFieldChar(char value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putCharVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -475,6 +487,7 @@ public static void setFieldChar(char value, Object obj, InterpreterResolvedJavaF

public static void setFieldShort(short value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putShortVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -484,6 +497,7 @@ public static void setFieldShort(short value, Object obj, InterpreterResolvedJav

public static void setFieldInt(int value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
assert field.getJavaKind() == JavaKind.Int || field.isWordStorage();
if (field.isVolatile()) {
U.putIntVolatile(obj, field.getOffset(), value);
Expand All @@ -494,6 +508,7 @@ public static void setFieldInt(int value, Object obj, InterpreterResolvedJavaFie

public static void setFieldLong(long value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
assert field.getJavaKind() == JavaKind.Long || field.isWordStorage();
if (field.isVolatile()) {
U.putLongVolatile(obj, field.getOffset(), value);
Expand All @@ -504,6 +519,7 @@ public static void setFieldLong(long value, Object obj, InterpreterResolvedJavaF

public static void setFieldWord(WordBase value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
switch (wordJavaKind()) {
case Int -> setFieldInt((int) value.rawValue(), obj, field);
case Long -> setFieldLong(value.rawValue(), obj, field);
Expand All @@ -513,6 +529,7 @@ public static void setFieldWord(WordBase value, Object obj, InterpreterResolvedJ

public static void setFieldFloat(float value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putFloatVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -522,6 +539,7 @@ public static void setFieldFloat(float value, Object obj, InterpreterResolvedJav

public static void setFieldDouble(double value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putDoubleVolatile(obj, field.getOffset(), value);
} else {
Expand All @@ -531,13 +549,22 @@ public static void setFieldDouble(double value, Object obj, InterpreterResolvedJ

public static void setFieldObject(Object value, Object obj, InterpreterResolvedJavaField field) {
assert obj != null;
ensureMaterialized(field);
if (field.isVolatile()) {
U.putReferenceVolatile(obj, field.getOffset(), value);
} else {
U.putReference(obj, field.getOffset(), value);
}
}

private static void ensureMaterialized(InterpreterResolvedJavaField field) {
if (RuntimeClassLoading.isSupported() && field.isUnmaterializedConstant()) {
throw VMError.shouldNotReachHere("Cannot set unmaterialized field " + field);
} else {
InterpreterUtil.assertion(field.getOffset() >= 0, "Bad field offset");
}
}

/**
* Subtyping among Array Types The following rules define the direct supertype relation among
* array types:
Expand Down