Mercurial > hg > graal-compiler
comparison src/share/vm/classfile/systemDictionary.cpp @ 12970:1c90f0072f0d
8026502: java/lang/invoke/MethodHandleConstants.java fails on all platforms
Reviewed-by: iveresov, jrose
author | twisti |
---|---|
date | Wed, 23 Oct 2013 15:44:12 -0700 |
parents | 82af7d7a0128 |
children | 096c224171c4 86e6d691f2e1 |
comparison
equal
deleted
inserted
replaced
12969:9acbfe04b5c3 | 12970:1c90f0072f0d |
---|---|
2358 int ref_kind = JVM_REF_invokeVirtual; | 2358 int ref_kind = JVM_REF_invokeVirtual; |
2359 Handle name_str = StringTable::intern(name, CHECK_(empty)); | 2359 Handle name_str = StringTable::intern(name, CHECK_(empty)); |
2360 objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty)); | 2360 objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty)); |
2361 assert(appendix_box->obj_at(0) == NULL, ""); | 2361 assert(appendix_box->obj_at(0) == NULL, ""); |
2362 | 2362 |
2363 // This should not happen. JDK code should take care of that. | |
2364 if (accessing_klass.is_null() || method_type.is_null()) { | |
2365 THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokehandle", empty); | |
2366 } | |
2367 | |
2363 // call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName | 2368 // call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName |
2364 JavaCallArguments args; | 2369 JavaCallArguments args; |
2365 args.push_oop(accessing_klass()->java_mirror()); | 2370 args.push_oop(accessing_klass()->java_mirror()); |
2366 args.push_int(ref_kind); | 2371 args.push_int(ref_kind); |
2367 args.push_oop(mh_klass()->java_mirror()); | 2372 args.push_oop(mh_klass()->java_mirror()); |
2483 Handle empty; | 2488 Handle empty; |
2484 Handle name = java_lang_String::create_from_symbol(name_sym, CHECK_(empty)); | 2489 Handle name = java_lang_String::create_from_symbol(name_sym, CHECK_(empty)); |
2485 Handle type; | 2490 Handle type; |
2486 if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') { | 2491 if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') { |
2487 type = find_method_handle_type(signature, caller, CHECK_(empty)); | 2492 type = find_method_handle_type(signature, caller, CHECK_(empty)); |
2493 } else if (caller.is_null()) { | |
2494 // This should not happen. JDK code should take care of that. | |
2495 THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad MH constant", empty); | |
2488 } else { | 2496 } else { |
2489 ResourceMark rm(THREAD); | 2497 ResourceMark rm(THREAD); |
2490 SignatureStream ss(signature, false); | 2498 SignatureStream ss(signature, false); |
2491 if (!ss.is_done()) { | 2499 if (!ss.is_done()) { |
2492 oop mirror = ss.as_java_mirror(caller->class_loader(), caller->protection_domain(), | 2500 oop mirror = ss.as_java_mirror(caller->class_loader(), caller->protection_domain(), |
2545 guarantee(java_lang_invoke_MethodHandle::is_instance(bsm()), | 2553 guarantee(java_lang_invoke_MethodHandle::is_instance(bsm()), |
2546 "caller must supply a valid BSM"); | 2554 "caller must supply a valid BSM"); |
2547 | 2555 |
2548 Handle method_name = java_lang_String::create_from_symbol(name, CHECK_(empty)); | 2556 Handle method_name = java_lang_String::create_from_symbol(name, CHECK_(empty)); |
2549 Handle method_type = find_method_handle_type(type, caller, CHECK_(empty)); | 2557 Handle method_type = find_method_handle_type(type, caller, CHECK_(empty)); |
2558 | |
2559 // This should not happen. JDK code should take care of that. | |
2560 if (caller.is_null() || method_type.is_null()) { | |
2561 THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokedynamic", empty); | |
2562 } | |
2550 | 2563 |
2551 objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty)); | 2564 objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty)); |
2552 assert(appendix_box->obj_at(0) == NULL, ""); | 2565 assert(appendix_box->obj_at(0) == NULL, ""); |
2553 | 2566 |
2554 // call java.lang.invoke.MethodHandleNatives::linkCallSite(caller, bsm, name, mtype, info, &appendix) | 2567 // call java.lang.invoke.MethodHandleNatives::linkCallSite(caller, bsm, name, mtype, info, &appendix) |