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)