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