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