Mercurial > hg > truffle
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. |