src/share/vm/prims/methodHandleWalk.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6914206 Cdiff src/share/vm/prims/methodHandleWalk.cpp

src/share/vm/prims/methodHandleWalk.cpp

Print this page

        

*** 629,638 **** --- 629,639 ---- // Get return type klass. Handle first_mtype(THREAD, chain().method_type_oop()); // _rklass is NULL for primitives. _rtype = java_lang_Class::as_BasicType(java_dyn_MethodType::rtype(first_mtype()), &_rklass); + if (_rtype == T_ARRAY) _rtype = T_OBJECT; int params = _callee->size_of_parameters(); // Incoming arguments plus receiver. _num_params = for_invokedynamic() ? params - 1 : params; // XXX Check if callee is static? }
*** 955,968 **** klassOop klass = m->method_holder(); symbolOop name = m->name(); symbolOop signature = m->signature(); - // This generated adapter method should be in the same class as the - // DMH target method (for accessability reasons). if (tailcall) { ! _target_klass = klass; } // instanceKlass* ik = instanceKlass::cast(klass); // tty->print_cr("MethodHandleCompiler::make_invoke: %s %s.%s%s", Bytecodes::name(op), ik->external_name(), name->as_C_string(), signature->as_C_string()); --- 956,972 ---- klassOop klass = m->method_holder(); symbolOop name = m->name(); symbolOop signature = m->signature(); if (tailcall) { ! // Actually, in order to make these methods more recognizable, ! // let's put them in holder classes MethodHandle and InvokeDynamic. ! // That way stack walkers and compiler heuristics can recognize them. ! _target_klass = (for_invokedynamic() ! ? SystemDictionary::InvokeDynamic_klass() ! : SystemDictionary::MethodHandle_klass()); } // instanceKlass* ik = instanceKlass::cast(klass); // tty->print_cr("MethodHandleCompiler::make_invoke: %s %s.%s%s", Bytecodes::name(op), ik->external_name(), name->as_C_string(), signature->as_C_string());
*** 1015,1024 **** --- 1019,1029 ---- } // If tailcall, we have walked all the way to a direct method handle. // Otherwise, make a recursive call to some helper routine. BasicType rbt = m->result_type(); + if (rbt == T_ARRAY) rbt = T_OBJECT; ArgToken ret; if (tailcall) { if (rbt != _rtype) { if (rbt == T_VOID) { // push a zero of the right sort
src/share/vm/prims/methodHandleWalk.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File