mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-14 18:03:44 +00:00
8355481: Clean up MHN_copyOutBootstrapArguments
Reviewed-by: dholmes, coleenp
This commit is contained in:
parent
effe40a24c
commit
133c6fb4f3
@ -1236,6 +1236,9 @@ JVM_ENTRY(void, MHN_copyOutBootstrapArguments(JNIEnv* env, jobject igcls,
|
||||
jint start, jint end,
|
||||
jobjectArray buf_jh, jint pos,
|
||||
jboolean resolve, jobject ifna_jh)) {
|
||||
// caller->constants->copy_bootstrap_arguments_at performs a runtime
|
||||
// range check, but let's assert earlier as well.
|
||||
assert(start < end && start >= 0, "invariant");
|
||||
Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller_jh));
|
||||
if (caller_k == nullptr || !caller_k->is_instance_klass()) {
|
||||
THROW_MSG(vmSymbols::java_lang_InternalError(), "bad caller");
|
||||
@ -1256,54 +1259,9 @@ JVM_ENTRY(void, MHN_copyOutBootstrapArguments(JNIEnv* env, jobject igcls,
|
||||
!= caller->constants()->bootstrap_argument_count_at(bss_index_in_pool)) {
|
||||
THROW_MSG(vmSymbols::java_lang_InternalError(), "bad index info (1)");
|
||||
}
|
||||
objArrayHandle buf(THREAD, (objArrayOop) JNIHandles::resolve(buf_jh));
|
||||
if (start < 0) {
|
||||
for (int pseudo_index = -4; pseudo_index < 0; pseudo_index++) {
|
||||
if (start == pseudo_index) {
|
||||
if (start >= end || 0 > pos || pos >= buf->length()) break;
|
||||
oop pseudo_arg = nullptr;
|
||||
switch (pseudo_index) {
|
||||
case -4: // bootstrap method
|
||||
{
|
||||
int bsm_index = caller->constants()->bootstrap_method_ref_index_at(bss_index_in_pool);
|
||||
pseudo_arg = caller->constants()->resolve_possibly_cached_constant_at(bsm_index, CHECK);
|
||||
break;
|
||||
}
|
||||
case -3: // name
|
||||
{
|
||||
Symbol* name = caller->constants()->name_ref_at(bss_index_in_pool, Bytecodes::_invokedynamic);
|
||||
Handle str = java_lang_String::create_from_symbol(name, CHECK);
|
||||
pseudo_arg = str();
|
||||
break;
|
||||
}
|
||||
case -2: // type
|
||||
{
|
||||
Symbol* type = caller->constants()->signature_ref_at(bss_index_in_pool, Bytecodes::_invokedynamic);
|
||||
Handle th;
|
||||
if (type->char_at(0) == JVM_SIGNATURE_FUNC) {
|
||||
th = SystemDictionary::find_method_handle_type(type, caller, CHECK);
|
||||
} else {
|
||||
th = SystemDictionary::find_java_mirror_for_type(type, caller, SignatureStream::NCDFError, CHECK);
|
||||
}
|
||||
pseudo_arg = th();
|
||||
break;
|
||||
}
|
||||
case -1: // argument count
|
||||
{
|
||||
int argc = caller->constants()->bootstrap_argument_count_at(bss_index_in_pool);
|
||||
jvalue argc_value; argc_value.i = (jint)argc;
|
||||
pseudo_arg = java_lang_boxing_object::create(T_INT, &argc_value, CHECK);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Store the pseudo-argument, and advance the pointers.
|
||||
buf->obj_at_put(pos++, pseudo_arg);
|
||||
++start;
|
||||
}
|
||||
}
|
||||
// When we are done with this there may be regular arguments to process too.
|
||||
}
|
||||
objArrayHandle buf(THREAD, (objArrayOop)JNIHandles::resolve(buf_jh));
|
||||
|
||||
Handle ifna(THREAD, JNIHandles::resolve(ifna_jh));
|
||||
caller->constants()->
|
||||
copy_bootstrap_arguments_at(bss_index_in_pool,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user