540 JVMCIObject sym = JVMCIENV->create_string(cp->name_ref_at(which), JVMCI_CHECK_NULL);
541 return JVMCIENV->get_jobject(sym);
542 C2V_END
543
544 C2V_VMENTRY(jobject, lookupSignatureInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which))
545 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
546 JVMCIObject sym = JVMCIENV->create_string(cp->signature_ref_at(which), JVMCI_CHECK_NULL);
547 return JVMCIENV->get_jobject(sym);
548 C2V_END
549
550 C2V_VMENTRY(jint, lookupKlassRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index))
551 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
552 return cp->klass_ref_index_at(index);
553 C2V_END
554
555 C2V_VMENTRY(jobject, resolveTypeInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index))
556 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
557 Klass* klass = cp->klass_at(index, CHECK_NULL);
558 JVMCIKlassHandle resolved_klass(THREAD, klass);
559 if (resolved_klass->is_instance_klass()) {
560 InstanceKlass::cast(resolved_klass())->link_class_or_fail(THREAD);
561 }
562 JVMCIObject klassObject = JVMCIENV->get_jvmci_type(resolved_klass, JVMCI_CHECK_NULL);
563 return JVMCIENV->get_jobject(klassObject);
564 C2V_END
565
566 C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
567 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
568 Klass* loading_klass = cp->pool_holder();
569 bool is_accessible = false;
570 JVMCIKlassHandle klass(THREAD, JVMCIRuntime::get_klass_by_index(cp, index, is_accessible, loading_klass));
571 Symbol* symbol = NULL;
572 if (klass.is_null()) {
573 constantTag tag = cp->tag_at(index);
574 if (tag.is_klass()) {
575 // The klass has been inserted into the constant pool
576 // very recently.
577 klass = cp->resolved_klass_at(index);
578 } else if (tag.is_symbol()) {
579 symbol = cp->symbol_at(index);
580 } else {
|
540 JVMCIObject sym = JVMCIENV->create_string(cp->name_ref_at(which), JVMCI_CHECK_NULL);
541 return JVMCIENV->get_jobject(sym);
542 C2V_END
543
544 C2V_VMENTRY(jobject, lookupSignatureInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint which))
545 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
546 JVMCIObject sym = JVMCIENV->create_string(cp->signature_ref_at(which), JVMCI_CHECK_NULL);
547 return JVMCIENV->get_jobject(sym);
548 C2V_END
549
550 C2V_VMENTRY(jint, lookupKlassRefIndexInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index))
551 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
552 return cp->klass_ref_index_at(index);
553 C2V_END
554
555 C2V_VMENTRY(jobject, resolveTypeInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index))
556 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
557 Klass* klass = cp->klass_at(index, CHECK_NULL);
558 JVMCIKlassHandle resolved_klass(THREAD, klass);
559 if (resolved_klass->is_instance_klass()) {
560 bool linked = InstanceKlass::cast(resolved_klass())->link_class_or_fail(CHECK_NULL);
561 if (!linked) {
562 return NULL;
563 }
564 }
565 JVMCIObject klassObject = JVMCIENV->get_jvmci_type(resolved_klass, JVMCI_CHECK_NULL);
566 return JVMCIENV->get_jobject(klassObject);
567 C2V_END
568
569 C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv* env, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
570 constantPoolHandle cp = JVMCIENV->asConstantPool(jvmci_constant_pool);
571 Klass* loading_klass = cp->pool_holder();
572 bool is_accessible = false;
573 JVMCIKlassHandle klass(THREAD, JVMCIRuntime::get_klass_by_index(cp, index, is_accessible, loading_klass));
574 Symbol* symbol = NULL;
575 if (klass.is_null()) {
576 constantTag tag = cp->tag_at(index);
577 if (tag.is_klass()) {
578 // The klass has been inserted into the constant pool
579 // very recently.
580 klass = cp->resolved_klass_at(index);
581 } else if (tag.is_symbol()) {
582 symbol = cp->symbol_at(index);
583 } else {
|