Mercurial > hg > truffle
comparison src/share/vm/runtime/sharedRuntime.cpp @ 665:c89f86385056
6814659: separable cleanups and subroutines for 6655638
Summary: preparatory but separable changes for method handles
Reviewed-by: kvn, never
author | jrose |
---|---|
date | Fri, 20 Mar 2009 23:19:36 -0700 |
parents | 7bb995fbd3c0 |
children | e5b0439ef4ae |
comparison
equal
deleted
inserted
replaced
647:bd441136a5ce | 665:c89f86385056 |
---|---|
671 | 671 |
672 | 672 |
673 JRT_ENTRY(void, SharedRuntime::yield_all(JavaThread* thread, int attempts)) | 673 JRT_ENTRY(void, SharedRuntime::yield_all(JavaThread* thread, int attempts)) |
674 os::yield_all(attempts); | 674 os::yield_all(attempts); |
675 JRT_END | 675 JRT_END |
676 | |
677 | |
678 // --------------------------------------------------------------------------------------------------------- | |
679 // Non-product code | |
680 #ifndef PRODUCT | |
681 | |
682 void SharedRuntime::verify_caller_frame(frame caller_frame, methodHandle callee_method) { | |
683 ResourceMark rm; | |
684 assert (caller_frame.is_interpreted_frame(), "sanity check"); | |
685 assert (callee_method->has_compiled_code(), "callee must be compiled"); | |
686 methodHandle caller_method (Thread::current(), caller_frame.interpreter_frame_method()); | |
687 jint bci = caller_frame.interpreter_frame_bci(); | |
688 methodHandle method = find_callee_method_inside_interpreter(caller_frame, caller_method, bci); | |
689 assert (callee_method == method, "incorrect method"); | |
690 } | |
691 | |
692 methodHandle SharedRuntime::find_callee_method_inside_interpreter(frame caller_frame, methodHandle caller_method, int bci) { | |
693 EXCEPTION_MARK; | |
694 Bytecode_invoke* bytecode = Bytecode_invoke_at(caller_method, bci); | |
695 methodHandle staticCallee = bytecode->static_target(CATCH); // Non-product code | |
696 | |
697 bytecode = Bytecode_invoke_at(caller_method, bci); | |
698 int bytecode_index = bytecode->index(); | |
699 Bytecodes::Code bc = bytecode->adjusted_invoke_code(); | |
700 | |
701 Handle receiver; | |
702 if (bc == Bytecodes::_invokeinterface || | |
703 bc == Bytecodes::_invokevirtual || | |
704 bc == Bytecodes::_invokespecial) { | |
705 symbolHandle signature (THREAD, staticCallee->signature()); | |
706 receiver = Handle(THREAD, retrieve_receiver(signature, caller_frame)); | |
707 } else { | |
708 receiver = Handle(); | |
709 } | |
710 CallInfo result; | |
711 constantPoolHandle constants (THREAD, caller_method->constants()); | |
712 LinkResolver::resolve_invoke(result, receiver, constants, bytecode_index, bc, CATCH); // Non-product code | |
713 methodHandle calleeMethod = result.selected_method(); | |
714 return calleeMethod; | |
715 } | |
716 | |
717 #endif // PRODUCT | |
718 | 676 |
719 | 677 |
720 JRT_ENTRY_NO_ASYNC(void, SharedRuntime::register_finalizer(JavaThread* thread, oopDesc* obj)) | 678 JRT_ENTRY_NO_ASYNC(void, SharedRuntime::register_finalizer(JavaThread* thread, oopDesc* obj)) |
721 assert(obj->is_oop(), "must be a valid oop"); | 679 assert(obj->is_oop(), "must be a valid oop"); |
722 assert(obj->klass()->klass_part()->has_finalizer(), "shouldn't be here otherwise"); | 680 assert(obj->klass()->klass_part()->has_finalizer(), "shouldn't be here otherwise"); |