hotspot/src/share/vm/ci/ciMethodHandle.hpp
changeset 13391 30245956af37
parent 10973 3b6e9c685073
child 13963 e5b53c306fb5
equal deleted inserted replaced
13309:50c604cb0d5f 13391:30245956af37
    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