< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java
Print this page
@@ -20,16 +20,28 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.vm.ci.hotspot;
-import static jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider.Options.*;
+import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset;
+import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale;
-import java.lang.reflect.*;
+import java.lang.reflect.Array;
-import jdk.vm.ci.meta.*;
-import jdk.vm.ci.options.*;
+import jdk.vm.ci.meta.Constant;
+import jdk.vm.ci.meta.ConstantReflectionProvider;
+import jdk.vm.ci.meta.JavaConstant;
+import jdk.vm.ci.meta.JavaField;
+import jdk.vm.ci.meta.JavaKind;
+import jdk.vm.ci.meta.JavaType;
+import jdk.vm.ci.meta.MemoryAccessProvider;
+import jdk.vm.ci.meta.MethodHandleAccessProvider;
+import jdk.vm.ci.meta.ResolvedJavaType;
+import jdk.vm.ci.options.Option;
+import jdk.vm.ci.options.OptionType;
+import jdk.vm.ci.options.OptionValue;
+import jdk.vm.ci.options.StableOptionValue;
/**
* HotSpot implementation of {@link ConstantReflectionProvider}.
*/
public class HotSpotConstantReflectionProvider implements ConstantReflectionProvider, HotSpotProxified {
@@ -59,15 +71,10 @@
public MemoryAccessProvider getMemoryAccessProvider() {
return memoryAccess;
}
@Override
- public boolean isEmbeddable(Constant constant) {
- return true;
- }
-
- @Override
public Boolean constantEquals(Constant x, Constant y) {
if (x == y) {
return true;
} else if (x instanceof HotSpotObjectConstantImpl) {
return y instanceof HotSpotObjectConstantImpl && ((HotSpotObjectConstantImpl) x).object() == ((HotSpotObjectConstantImpl) y).object();
@@ -108,12 +115,12 @@
if (array.getJavaKind() != JavaKind.Object || array.isNull()) {
return -1;
}
Class<?> componentType = ((HotSpotObjectConstantImpl) array).object().getClass().getComponentType();
JavaKind kind = runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType(componentType).getJavaKind();
- int arraybase = runtime.getArrayBaseOffset(kind);
- int scale = runtime.getArrayIndexScale(kind);
+ int arraybase = getArrayBaseOffset(kind);
+ int scale = getArrayIndexScale(kind);
if (offset < arraybase) {
return -1;
}
long index = offset - arraybase;
if (index % scale != 0) {
@@ -205,20 +212,24 @@
public JavaConstant forString(String value) {
return HotSpotObjectConstantImpl.forObject(value);
}
+ public JavaConstant forObject(Object value) {
+ return HotSpotObjectConstantImpl.forObject(value);
+ }
+
@Override
public ResolvedJavaType asJavaType(Constant constant) {
if (constant instanceof HotSpotObjectConstant) {
Object obj = ((HotSpotObjectConstantImpl) constant).object();
if (obj instanceof Class) {
return runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType((Class<?>) obj);
}
}
if (constant instanceof HotSpotMetaspaceConstant) {
- Object obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant);
+ MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant);
if (obj instanceof HotSpotResolvedObjectTypeImpl) {
return (ResolvedJavaType) obj;
}
}
return null;
@@ -249,11 +260,11 @@
* @param value a value read from a {@code final} instance field
* @param receiverClass the {@link Object#getClass() class} of object from which the
* {@code value} was read
*/
protected boolean isFinalInstanceFieldValueConstant(JavaConstant value, Class<?> receiverClass) {
- return !value.isDefaultForKind() || TrustFinalDefaultFields.getValue();
+ return !value.isDefaultForKind() || Options.TrustFinalDefaultFields.getValue();
}
/**
* Determines if a value read from a {@link Stable} instance field is considered constant. The
* implementation in {@link HotSpotConstantReflectionProvider} returns true if {@code value} is
@@ -325,11 +336,11 @@
public JavaConstant readFieldValue(JavaField field, JavaConstant receiver) {
HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
if (!hotspotField.isStable()) {
return readNonStableFieldValue(field, receiver);
} else {
- return readStableFieldValue(field, receiver, false);
+ return readStableFieldValue(field, receiver, hotspotField.isDefaultStable());
}
}
private JavaConstant readNonStableFieldValue(JavaField field, JavaConstant receiver) {
HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
< prev index next >