< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

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

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