Mercurial > hg > graal-jvmci-8
comparison src/share/vm/ci/ciMethodHandle.hpp @ 6275:957c266d8bc5
Merge with http://hg.openjdk.java.net/hsx/hsx24/hotspot/
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 21 Aug 2012 10:39:19 +0200 |
parents | 1d7922586cf6 |
children | b9a9ed0f8eeb |
comparison
equal
deleted
inserted
replaced
5891:fd8832ae511d | 6275:957c266d8bc5 |
---|---|
23 */ | 23 */ |
24 | 24 |
25 #ifndef SHARE_VM_CI_CIMETHODHANDLE_HPP | 25 #ifndef SHARE_VM_CI_CIMETHODHANDLE_HPP |
26 #define SHARE_VM_CI_CIMETHODHANDLE_HPP | 26 #define SHARE_VM_CI_CIMETHODHANDLE_HPP |
27 | 27 |
28 #include "ci/ciCallProfile.hpp" | 28 #include "ci/ciClassList.hpp" |
29 #include "ci/ciInstance.hpp" | 29 #include "ci/ciInstance.hpp" |
30 #include "prims/methodHandles.hpp" | |
31 | 30 |
32 // ciMethodHandle | 31 // ciMethodHandle |
33 // | 32 // |
34 // The class represents a java.lang.invoke.MethodHandle object. | 33 // The class represents a java.lang.invoke.MethodHandle object. |
35 class ciMethodHandle : public ciInstance { | 34 class ciMethodHandle : public ciInstance { |
36 private: | |
37 ciMethod* _callee; | |
38 ciMethod* _caller; | |
39 ciCallProfile _profile; | |
40 ciMethod* _method_handle_adapter; | |
41 ciMethod* _invokedynamic_adapter; | |
42 | |
43 // Return an adapter for this MethodHandle. | |
44 ciMethod* get_adapter_impl(bool is_invokedynamic); | |
45 ciMethod* get_adapter( bool is_invokedynamic); | |
46 | |
47 protected: | |
48 void print_chain_impl() NOT_DEBUG_RETURN; | |
49 | |
50 public: | 35 public: |
51 ciMethodHandle(instanceHandle h_i) : | 36 ciMethodHandle(instanceHandle h_i) : ciInstance(h_i) {} |
52 ciInstance(h_i), | |
53 _callee(NULL), | |
54 _caller(NULL), | |
55 _method_handle_adapter(NULL), | |
56 _invokedynamic_adapter(NULL) | |
57 {} | |
58 | 37 |
59 // What kind of ciObject is this? | 38 // What kind of ciObject is this? |
60 bool is_method_handle() const { return true; } | 39 bool is_method_handle() const { return true; } |
61 | 40 |
62 void set_callee(ciMethod* m) { _callee = m; } | 41 ciMethod* get_vmtarget() const; |
63 void set_caller(ciMethod* m) { _caller = m; } | |
64 void set_call_profile(ciCallProfile profile) { _profile = profile; } | |
65 | |
66 // Return an adapter for a MethodHandle call. | |
67 ciMethod* get_method_handle_adapter() { | |
68 if (_method_handle_adapter == NULL) { | |
69 _method_handle_adapter = get_adapter(false); | |
70 } | |
71 return _method_handle_adapter; | |
72 } | |
73 | |
74 // Return an adapter for an invokedynamic call. | |
75 ciMethod* get_invokedynamic_adapter() { | |
76 if (_invokedynamic_adapter == NULL) { | |
77 _invokedynamic_adapter = get_adapter(true); | |
78 } | |
79 return _invokedynamic_adapter; | |
80 } | |
81 | |
82 void print_chain() NOT_DEBUG_RETURN; | |
83 }; | 42 }; |
84 | 43 |
85 #endif // SHARE_VM_CI_CIMETHODHANDLE_HPP | 44 #endif // SHARE_VM_CI_CIMETHODHANDLE_HPP |