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())) {
|