< prev index next >

src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java

Print this page

        

*** 20,35 **** * 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 java.lang.reflect.*; ! import jdk.vm.ci.meta.*; ! import jdk.vm.ci.options.*; /** * HotSpot implementation of {@link ConstantReflectionProvider}. */ public class HotSpotConstantReflectionProvider implements ConstantReflectionProvider, HotSpotProxified { --- 20,47 ---- * 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.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; ! import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; ! import java.lang.reflect.Array; ! 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,73 **** 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(); --- 71,80 ----
*** 108,119 **** 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); if (offset < arraybase) { return -1; } long index = offset - arraybase; if (index % scale != 0) { --- 115,126 ---- 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 = getArrayBaseOffset(kind); ! int scale = getArrayIndexScale(kind); if (offset < arraybase) { return -1; } long index = offset - arraybase; if (index % scale != 0) {
*** 205,224 **** public JavaConstant forString(String 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); if (obj instanceof HotSpotResolvedObjectTypeImpl) { return (ResolvedJavaType) obj; } } return null; --- 212,235 ---- 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) { ! MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant); if (obj instanceof HotSpotResolvedObjectTypeImpl) { return (ResolvedJavaType) obj; } } return null;
*** 249,259 **** * @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(); } /** * 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 --- 260,270 ---- * @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() || 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,335 **** public JavaConstant readFieldValue(JavaField field, JavaConstant receiver) { HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; if (!hotspotField.isStable()) { return readNonStableFieldValue(field, receiver); } else { ! return readStableFieldValue(field, receiver, false); } } private JavaConstant readNonStableFieldValue(JavaField field, JavaConstant receiver) { HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; --- 336,346 ---- public JavaConstant readFieldValue(JavaField field, JavaConstant receiver) { HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; if (!hotspotField.isStable()) { return readNonStableFieldValue(field, receiver); } else { ! return readStableFieldValue(field, receiver, hotspotField.isDefaultStable()); } } private JavaConstant readNonStableFieldValue(JavaField field, JavaConstant receiver) { HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
< prev index next >