comparison src/share/vm/ci/ciMethodHandle.cpp @ 3371:fabcf26ee72f

6998541: JSR 292 implement missing return-type conversion for OP_RETYPE_RAW Reviewed-by: jrose, kvn, never
author twisti
date Thu, 12 May 2011 14:04:48 -0700
parents e2a92dd0d3d2
children a80577f854f9
comparison
equal deleted inserted replaced
3370:2f17eb233d13 3371:fabcf26ee72f
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "ci/ciClassList.hpp" 26 #include "ci/ciClassList.hpp"
27 #include "ci/ciInstance.hpp" 27 #include "ci/ciInstance.hpp"
28 #include "ci/ciMethodData.hpp"
28 #include "ci/ciMethodHandle.hpp" 29 #include "ci/ciMethodHandle.hpp"
29 #include "ci/ciUtilities.hpp" 30 #include "ci/ciUtilities.hpp"
30 #include "prims/methodHandleWalk.hpp" 31 #include "prims/methodHandleWalk.hpp"
31 #include "prims/methodHandles.hpp" 32 #include "prims/methodHandles.hpp"
32 33
34 35
35 // ------------------------------------------------------------------ 36 // ------------------------------------------------------------------
36 // ciMethodHandle::get_adapter 37 // ciMethodHandle::get_adapter
37 // 38 //
38 // Return an adapter for this MethodHandle. 39 // Return an adapter for this MethodHandle.
39 ciMethod* ciMethodHandle::get_adapter(bool is_invokedynamic) const { 40 ciMethod* ciMethodHandle::get_adapter_impl(bool is_invokedynamic) const {
40 VM_ENTRY_MARK; 41 VM_ENTRY_MARK;
41 Handle h(get_oop()); 42 Handle h(get_oop());
42 methodHandle callee(_callee->get_methodOop()); 43 methodHandle callee(_callee->get_methodOop());
43 // We catch all exceptions here that could happen in the method 44 // We catch all exceptions here that could happen in the method
44 // handle compiler and stop the VM. 45 // handle compiler and stop the VM.
45 MethodHandleCompiler mhc(h, callee, call_profile()->count(), is_invokedynamic, THREAD); 46 MethodHandleCompiler mhc(h, callee, _profile->count(), is_invokedynamic, THREAD);
46 if (!HAS_PENDING_EXCEPTION) { 47 if (!HAS_PENDING_EXCEPTION) {
47 methodHandle m = mhc.compile(THREAD); 48 methodHandle m = mhc.compile(THREAD);
48 if (!HAS_PENDING_EXCEPTION) { 49 if (!HAS_PENDING_EXCEPTION) {
49 return CURRENT_ENV->get_object(m())->as_method(); 50 return CURRENT_ENV->get_object(m())->as_method();
50 } 51 }
56 } 57 }
57 CLEAR_PENDING_EXCEPTION; 58 CLEAR_PENDING_EXCEPTION;
58 return NULL; 59 return NULL;
59 } 60 }
60 61
62 // ------------------------------------------------------------------
63 // ciMethodHandle::get_adapter
64 //
65 // Return an adapter for this MethodHandle.
66 ciMethod* ciMethodHandle::get_adapter(bool is_invokedynamic) const {
67 ciMethod* result = get_adapter_impl(is_invokedynamic);
68 if (result) {
69 // Fake up the MDO maturity.
70 ciMethodData* mdo = result->method_data();
71 if (mdo != NULL && _caller->method_data() != NULL && _caller->method_data()->is_mature()) {
72 mdo->set_mature();
73 }
74 }
75 return result;
76 }
77
61 78
62 // ------------------------------------------------------------------ 79 // ------------------------------------------------------------------
63 // ciMethodHandle::print_impl 80 // ciMethodHandle::print_impl
64 // 81 //
65 // Implementation of the print method. 82 // Implementation of the print method.