< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

 434     JVMCI_THROW_NULL(NullPointerException);
 435   }
 436   if (!is_klass) {
 437     cp = (UNPACK_PAIR(Method, klass_or_method))->constMethod()->constants();
 438   } else {
 439     cp = InstanceKlass::cast(UNPACK_PAIR(Klass, klass_or_method))->constants();
 440   }
 441 
 442   JVMCIObject result = JVMCIENV->get_jvmci_constant_pool(constantPoolHandle(THREAD, cp), JVMCI_CHECK_NULL);
 443   return JVMCIENV->get_jobject(result);
 444 }
 445 
 446 C2V_VMENTRY_NULL(jobject, getResolvedJavaType0, (JNIEnv* env, jobject, jobject base, jlong offset, jboolean compressed))
 447   JVMCIObject base_object = JVMCIENV->wrap(base);
 448   if (base_object.is_null()) {
 449     JVMCI_THROW_MSG_NULL(NullPointerException, "base object is null");
 450   }
 451 
 452   const char* base_desc = nullptr;
 453   JVMCIKlassHandle klass(THREAD);
 454   if (offset == oopDesc::klass_offset_in_bytes()) {
 455     if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) {
 456       Handle base_oop = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL);
 457       klass = base_oop->klass();
 458     } else {
 459       goto unexpected;
 460     }
 461   } else if (!compressed) {
 462     if (JVMCIENV->isa_HotSpotConstantPool(base_object)) {
 463       ConstantPool* cp = JVMCIENV->asConstantPool(base_object);
 464       if (offset == in_bytes(ConstantPool::pool_holder_offset())) {
 465         klass = cp->pool_holder();
 466       } else {
 467         base_desc = FormatBufferResource("[constant pool for %s]", cp->pool_holder()->signature_name());
 468         goto unexpected;
 469       }
 470     } else if (JVMCIENV->isa_HotSpotResolvedObjectTypeImpl(base_object)) {
 471       Klass* base_klass = JVMCIENV->asKlass(base_object);
 472       if (offset == in_bytes(Klass::subklass_offset())) {
 473         klass = base_klass->subklass();
 474       } else if (offset == in_bytes(Klass::super_offset())) {

 434     JVMCI_THROW_NULL(NullPointerException);
 435   }
 436   if (!is_klass) {
 437     cp = (UNPACK_PAIR(Method, klass_or_method))->constMethod()->constants();
 438   } else {
 439     cp = InstanceKlass::cast(UNPACK_PAIR(Klass, klass_or_method))->constants();
 440   }
 441 
 442   JVMCIObject result = JVMCIENV->get_jvmci_constant_pool(constantPoolHandle(THREAD, cp), JVMCI_CHECK_NULL);
 443   return JVMCIENV->get_jobject(result);
 444 }
 445 
 446 C2V_VMENTRY_NULL(jobject, getResolvedJavaType0, (JNIEnv* env, jobject, jobject base, jlong offset, jboolean compressed))
 447   JVMCIObject base_object = JVMCIENV->wrap(base);
 448   if (base_object.is_null()) {
 449     JVMCI_THROW_MSG_NULL(NullPointerException, "base object is null");
 450   }
 451 
 452   const char* base_desc = nullptr;
 453   JVMCIKlassHandle klass(THREAD);
 454   if (offset == 1 /*oopDesc::klass_offset_in_bytes()*/) {
 455     if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) {
 456       Handle base_oop = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL);
 457       klass = base_oop->klass();
 458     } else {
 459       goto unexpected;
 460     }
 461   } else if (!compressed) {
 462     if (JVMCIENV->isa_HotSpotConstantPool(base_object)) {
 463       ConstantPool* cp = JVMCIENV->asConstantPool(base_object);
 464       if (offset == in_bytes(ConstantPool::pool_holder_offset())) {
 465         klass = cp->pool_holder();
 466       } else {
 467         base_desc = FormatBufferResource("[constant pool for %s]", cp->pool_holder()->signature_name());
 468         goto unexpected;
 469       }
 470     } else if (JVMCIENV->isa_HotSpotResolvedObjectTypeImpl(base_object)) {
 471       Klass* base_klass = JVMCIENV->asKlass(base_object);
 472       if (offset == in_bytes(Klass::subklass_offset())) {
 473         klass = base_klass->subklass();
 474       } else if (offset == in_bytes(Klass::super_offset())) {
< prev index next >