src/share/vm/prims/methodHandleWalk.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/methodHandleWalk.cpp	Tue Jan  5 18:46:13 2010
--- new/src/share/vm/prims/methodHandleWalk.cpp	Tue Jan  5 18:46:13 2010

*** 955,968 **** --- 955,971 ---- 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; + // 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 **** --- 1018,1028 ---- } // 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