162 if (constant instanceof HotSpotObjectConstant) { 163 Object obj = ((HotSpotObjectConstantImpl) constant).object(); 164 if (obj instanceof Class) { 165 return runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType((Class<?>) obj); 166 } 167 } 168 if (constant instanceof HotSpotMetaspaceConstant) { 169 MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant); 170 if (obj instanceof HotSpotResolvedObjectTypeImpl) { 171 return (ResolvedJavaType) obj; 172 } 173 } 174 return null; 175 } 176 177 public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) { 178 HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; 179 if (hotspotField.isStatic()) { 180 HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass(); 181 if (holder.isInitialized()) { 182 return memoryAccess.readUnsafeConstant(hotspotField.getJavaKind(), HotSpotObjectConstantImpl.forObject(holder.mirror()), hotspotField.offset()); 183 } 184 } else { 185 if (receiver.isNonNull() && hotspotField.isInObject(((HotSpotObjectConstantImpl) receiver).object())) { 186 return memoryAccess.readUnsafeConstant(hotspotField.getJavaKind(), receiver, hotspotField.offset()); 187 } 188 } 189 return null; 190 } 191 192 @Override 193 public JavaConstant asJavaClass(ResolvedJavaType type) { 194 return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror()); 195 } 196 197 @Override 198 public Constant asObjectHub(ResolvedJavaType type) { 199 if (type instanceof HotSpotResolvedObjectType) { 200 return ((HotSpotResolvedObjectType) type).klass(); 201 } else { 202 throw JVMCIError.unimplemented(); 203 } 204 } 205 } | 162 if (constant instanceof HotSpotObjectConstant) { 163 Object obj = ((HotSpotObjectConstantImpl) constant).object(); 164 if (obj instanceof Class) { 165 return runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType((Class<?>) obj); 166 } 167 } 168 if (constant instanceof HotSpotMetaspaceConstant) { 169 MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant); 170 if (obj instanceof HotSpotResolvedObjectTypeImpl) { 171 return (ResolvedJavaType) obj; 172 } 173 } 174 return null; 175 } 176 177 public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) { 178 HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; 179 if (hotspotField.isStatic()) { 180 HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass(); 181 if (holder.isInitialized()) { 182 return memoryAccess.readFieldValue(hotspotField, holder.mirror()); 183 } 184 } else { 185 if (receiver.isNonNull()) { 186 Object object = ((HotSpotObjectConstantImpl) receiver).object(); 187 if (hotspotField.isInObject(object)) { 188 return memoryAccess.readFieldValue(hotspotField, object); 189 } 190 } 191 } 192 return null; 193 } 194 195 @Override 196 public JavaConstant asJavaClass(ResolvedJavaType type) { 197 return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror()); 198 } 199 200 @Override 201 public Constant asObjectHub(ResolvedJavaType type) { 202 if (type instanceof HotSpotResolvedObjectType) { 203 return ((HotSpotResolvedObjectType) type).klass(); 204 } else { 205 throw JVMCIError.unimplemented(); 206 } 207 } 208 } |