< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

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

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