comparison src/share/vm/ci/ciMethodHandle.cpp @ 3785:ddd894528dbc

7056328: JSR 292 invocation sometimes fails in adapters for types not on boot class path Reviewed-by: never
author jrose
date Thu, 23 Jun 2011 17:14:06 -0700
parents f918d6096e23
children c26de9aef2ed
comparison
equal deleted inserted replaced
3784:aabf25fa3f05 3785:ddd894528dbc
39 // Return an adapter for this MethodHandle. 39 // Return an adapter for this MethodHandle.
40 ciMethod* ciMethodHandle::get_adapter_impl(bool is_invokedynamic) const { 40 ciMethod* ciMethodHandle::get_adapter_impl(bool is_invokedynamic) const {
41 VM_ENTRY_MARK; 41 VM_ENTRY_MARK;
42 Handle h(get_oop()); 42 Handle h(get_oop());
43 methodHandle callee(_callee->get_methodOop()); 43 methodHandle callee(_callee->get_methodOop());
44 assert(callee->is_method_handle_invoke(), "");
45 oop mt1 = callee->method_handle_type();
46 oop mt2 = java_lang_invoke_MethodHandle::type(h());
47 if (!java_lang_invoke_MethodType::equals(mt1, mt2)) {
48 if (PrintMiscellaneous && (Verbose || WizardMode)) {
49 tty->print_cr("ciMethodHandle::get_adapter: types not equal");
50 mt1->print(); mt2->print();
51 }
52 return NULL;
53 }
44 // We catch all exceptions here that could happen in the method 54 // We catch all exceptions here that could happen in the method
45 // handle compiler and stop the VM. 55 // handle compiler and stop the VM.
46 MethodHandleCompiler mhc(h, callee->name(), callee->signature(), _profile.count(), is_invokedynamic, THREAD); 56 MethodHandleCompiler mhc(h, callee->name(), callee->signature(), _profile.count(), is_invokedynamic, THREAD);
47 if (!HAS_PENDING_EXCEPTION) { 57 if (!HAS_PENDING_EXCEPTION) {
48 methodHandle m = mhc.compile(THREAD); 58 methodHandle m = mhc.compile(THREAD);
51 } 61 }
52 } 62 }
53 if (PrintMiscellaneous && (Verbose || WizardMode)) { 63 if (PrintMiscellaneous && (Verbose || WizardMode)) {
54 tty->print("*** ciMethodHandle::get_adapter => "); 64 tty->print("*** ciMethodHandle::get_adapter => ");
55 PENDING_EXCEPTION->print(); 65 PENDING_EXCEPTION->print();
56 tty->print("*** get_adapter (%s): ", is_invokedynamic ? "indy" : "mh"); ((ciObject*)this)->print(); //@@ 66 tty->print("*** get_adapter (%s): ", is_invokedynamic ? "indy" : "mh"); ((ciObject*)this)->print();
57 } 67 }
58 CLEAR_PENDING_EXCEPTION; 68 CLEAR_PENDING_EXCEPTION;
59 return NULL; 69 return NULL;
60 } 70 }
61 71