src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMetaAccessProvider.java
Print this page
*** 39,49 ****
import jdk.vm.ci.common.JVMCIError;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.DeoptimizationReason;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
- import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.MetaAccessProvider;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
import jdk.vm.ci.meta.ResolvedJavaType;
import jdk.vm.ci.meta.Signature;
--- 39,48 ----
*** 109,135 ****
throw new JVMCIError(e);
}
}
public ResolvedJavaField lookupJavaField(Field reflectionField) {
- String name = reflectionField.getName();
Class<?> fieldHolder = reflectionField.getDeclaringClass();
- Class<?> fieldType = reflectionField.getType();
- // java.lang.reflect.Field's modifiers should be enough here since VM internal modifier bits
- // are not used (yet).
- final int modifiers = reflectionField.getModifiers();
- final long offset = Modifier.isStatic(modifiers) ? UNSAFE.staticFieldOffset(reflectionField) : UNSAFE.objectFieldOffset(reflectionField);
HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder);
! JavaType type = runtime.fromClass(fieldType);
!
! if (offset != -1) {
! HotSpotResolvedObjectType resolved = holder;
! return resolved.createField(name, type, offset, modifiers);
} else {
! throw new JVMCIError("unresolved field %s", reflectionField);
}
}
private static int intMaskRight(int n) {
assert n <= 32;
return n == 32 ? -1 : (1 << n) - 1;
--- 108,137 ----
throw new JVMCIError(e);
}
}
public ResolvedJavaField lookupJavaField(Field reflectionField) {
Class<?> fieldHolder = reflectionField.getDeclaringClass();
HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder);
! if (Modifier.isStatic(reflectionField.getModifiers())) {
! final long offset = UNSAFE.staticFieldOffset(reflectionField);
! for (ResolvedJavaField field : holder.getStaticFields()) {
! if (offset == ((HotSpotResolvedJavaField) field).offset()) {
! return field;
! }
! }
} else {
! final long offset = UNSAFE.objectFieldOffset(reflectionField);
! for (ResolvedJavaField field : holder.getInstanceFields(false)) {
! if (offset == ((HotSpotResolvedJavaField) field).offset()) {
! return field;
! }
! }
}
+
+ throw new JVMCIError("unresolved field %s", reflectionField);
}
private static int intMaskRight(int n) {
assert n <= 32;
return n == 32 ? -1 : (1 << n) - 1;