src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File
open Cdiff src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 20,30 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.vm.ci.hotspot;
- import java.lang.reflect.Array;
import java.util.Objects;
import jdk.vm.ci.common.JVMCIError;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.ConstantReflectionProvider;
--- 20,29 ----
*** 63,73 ****
@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();
} else {
return Objects.equals(x, y);
}
}
--- 62,72 ----
@Override
public Boolean constantEquals(Constant x, Constant y) {
if (x == y) {
return true;
} else if (x instanceof HotSpotObjectConstantImpl) {
! return y instanceof HotSpotObjectConstantImpl && x.equals(y);
} else {
return Objects.equals(x, y);
}
}
*** 75,108 ****
public Integer readArrayLength(JavaConstant array) {
if (array == null || array.getJavaKind() != JavaKind.Object || array.isNull()) {
return null;
}
! Object arrayObject = ((HotSpotObjectConstantImpl) array).object();
! if (!arrayObject.getClass().isArray()) {
! return null;
! }
! return Array.getLength(arrayObject);
}
@Override
public JavaConstant readArrayElement(JavaConstant array, int index) {
if (array == null || array.getJavaKind() != JavaKind.Object || array.isNull()) {
return null;
}
! Object a = ((HotSpotObjectConstantImpl) array).object();
!
! if (!a.getClass().isArray() || index < 0 || index >= Array.getLength(a)) {
! return null;
! }
!
! if (a instanceof Object[]) {
! Object element = ((Object[]) a)[index];
! return HotSpotObjectConstantImpl.forObject(element);
! } else {
! return JavaConstant.forBoxedPrimitive(Array.get(a, index));
! }
}
/**
* Check if the constant is a boxed value that is guaranteed to be cached by the platform.
* Otherwise the generated code might be the only reference to the boxed value and since object
--- 74,94 ----
public Integer readArrayLength(JavaConstant array) {
if (array == null || array.getJavaKind() != JavaKind.Object || array.isNull()) {
return null;
}
! HotSpotObjectConstantImpl arrayObject = ((HotSpotObjectConstantImpl) array);
! return runtime.getReflection().getLength(arrayObject);
}
@Override
public JavaConstant readArrayElement(JavaConstant array, int index) {
if (array == null || array.getJavaKind() != JavaKind.Object || array.isNull()) {
return null;
}
! HotSpotObjectConstantImpl arrayObject = ((HotSpotObjectConstantImpl) array);
! return runtime.getReflection().readArrayElement(arrayObject, index);
}
/**
* Check if the constant is a boxed value that is guaranteed to be cached by the platform.
* Otherwise the generated code might be the only reference to the boxed value and since object
*** 133,175 ****
@Override
public JavaConstant boxPrimitive(JavaConstant source) {
if (source == null || !source.getJavaKind().isPrimitive() || !isBoxCached(source)) {
return null;
}
! return HotSpotObjectConstantImpl.forObject(source.asBoxedPrimitive());
}
@Override
public JavaConstant unboxPrimitive(JavaConstant source) {
if (source == null || !source.getJavaKind().isObject()) {
return null;
}
if (source.isNull()) {
return null;
}
! return JavaConstant.forBoxedPrimitive(((HotSpotObjectConstantImpl) source).object());
}
@Override
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;
--- 119,158 ----
@Override
public JavaConstant boxPrimitive(JavaConstant source) {
if (source == null || !source.getJavaKind().isPrimitive() || !isBoxCached(source)) {
return null;
}
! return runtime.getReflection().boxPrimitive(source);
}
@Override
public JavaConstant unboxPrimitive(JavaConstant source) {
if (source == null || !source.getJavaKind().isObject()) {
return null;
}
if (source.isNull()) {
return null;
}
! return runtime.getReflection().unboxPrimitive((HotSpotObjectConstantImpl) source);
}
@Override
public JavaConstant forString(String value) {
! return runtime.getReflection().forObject(value);
}
public JavaConstant forObject(Object value) {
! return runtime.getReflection().forObject(value);
}
@Override
public ResolvedJavaType asJavaType(Constant constant) {
! if (constant instanceof HotSpotObjectConstantImpl) {
! return ((HotSpotObjectConstantImpl) constant).asJavaType();
}
if (constant instanceof HotSpotMetaspaceConstant) {
! MetaspaceObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant);
if (obj instanceof HotSpotResolvedObjectTypeImpl) {
return (ResolvedJavaType) obj;
}
}
return null;
*** 177,204 ****
@Override
public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) {
HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
if (hotspotField.isStatic()) {
! HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass();
if (holder.isInitialized()) {
! return memoryAccess.readFieldValue(hotspotField, holder.mirror(), field.isVolatile());
}
} else {
! if (receiver.isNonNull()) {
! Object object = ((HotSpotObjectConstantImpl) receiver).object();
if (hotspotField.isInObject(receiver)) {
! return memoryAccess.readFieldValue(hotspotField, object, field.isVolatile());
}
}
}
return null;
}
@Override
public JavaConstant asJavaClass(ResolvedJavaType type) {
! return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror());
}
@Override
public Constant asObjectHub(ResolvedJavaType type) {
if (type instanceof HotSpotResolvedObjectType) {
--- 160,187 ----
@Override
public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) {
HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
if (hotspotField.isStatic()) {
! HotSpotResolvedObjectTypeImpl holder = (HotSpotResolvedObjectTypeImpl) hotspotField.getDeclaringClass();
if (holder.isInitialized()) {
! return holder.readFieldValue(hotspotField, field.isVolatile());
}
} else {
! if (receiver.isNonNull() && receiver instanceof HotSpotObjectConstantImpl) {
! HotSpotObjectConstantImpl object = ((HotSpotObjectConstantImpl) receiver);
if (hotspotField.isInObject(receiver)) {
! return object.readFieldValue(hotspotField, field.isVolatile());
}
}
}
return null;
}
@Override
public JavaConstant asJavaClass(ResolvedJavaType type) {
! return ((HotSpotResolvedJavaType) type).getJavaMirror();
}
@Override
public Constant asObjectHub(ResolvedJavaType type) {
if (type instanceof HotSpotResolvedObjectType) {
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File