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