src/share/vm/interpreter/linkResolver.hpp

changeset 3969
1d7922586cf6
parent 2708
1d1603768966
child 4037
da91efe96a93
     1.1 --- a/src/share/vm/interpreter/linkResolver.hpp	Mon Jul 23 13:04:59 2012 -0700
     1.2 +++ b/src/share/vm/interpreter/linkResolver.hpp	Tue Jul 24 10:51:00 2012 -0700
     1.3 @@ -75,11 +75,12 @@
     1.4    methodHandle _resolved_method;        // static target method
     1.5    methodHandle _selected_method;        // dynamic (actual) target method
     1.6    int          _vtable_index;           // vtable index of selected method
     1.7 +  Handle       _resolved_appendix;      // extra argument in constant pool (if CPCE::has_appendix)
     1.8  
     1.9    void         set_static(   KlassHandle resolved_klass,                             methodHandle resolved_method                                                , TRAPS);
    1.10    void         set_interface(KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method                  , TRAPS);
    1.11    void         set_virtual(  KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index, TRAPS);
    1.12 -  void         set_dynamic(                                                          methodHandle resolved_method,                                                 TRAPS);
    1.13 +  void         set_handle(                                                           methodHandle resolved_method,   Handle resolved_appendix,                     TRAPS);
    1.14    void         set_common(   KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index, TRAPS);
    1.15  
    1.16    friend class LinkResolver;
    1.17 @@ -89,6 +90,7 @@
    1.18    KlassHandle  selected_klass() const            { return _selected_klass; }
    1.19    methodHandle resolved_method() const           { return _resolved_method; }
    1.20    methodHandle selected_method() const           { return _selected_method; }
    1.21 +  Handle       resolved_appendix() const         { return _resolved_appendix; }
    1.22  
    1.23    BasicType    result_type() const               { return selected_method()->result_type(); }
    1.24    bool         has_vtable_index() const          { return _vtable_index >= 0; }
    1.25 @@ -110,8 +112,8 @@
    1.26    static void lookup_method_in_klasses          (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
    1.27    static void lookup_instance_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
    1.28    static void lookup_method_in_interfaces       (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
    1.29 -  static void lookup_implicit_method            (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
    1.30 -                                                 KlassHandle current_klass, TRAPS);
    1.31 +  static void lookup_polymorphic_method         (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
    1.32 +                                                 KlassHandle current_klass, Handle* appendix_result_or_null, TRAPS);
    1.33  
    1.34    static int vtable_index_of_miranda_method(KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
    1.35  
    1.36 @@ -139,10 +141,9 @@
    1.37    // constant pool resolving
    1.38    static void check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS);
    1.39  
    1.40 -  // static resolving for all calls except interface calls
    1.41 -  static void resolve_method          (methodHandle& method_result, KlassHandle& klass_result, constantPoolHandle pool, int index, TRAPS);
    1.42 -  static void resolve_dynamic_method  (methodHandle& resolved_method, KlassHandle& resolved_klass, constantPoolHandle pool, int index, TRAPS);
    1.43 -  static void resolve_interface_method(methodHandle& method_result, KlassHandle& klass_result, constantPoolHandle pool, int index, TRAPS);
    1.44 +  // static resolving calls (will not run any Java code); used only from Bytecode_invoke::static_target
    1.45 +  static void resolve_method_statically(methodHandle& method_result, KlassHandle& klass_result,
    1.46 +                                        Bytecodes::Code code, constantPoolHandle pool, int index, TRAPS);
    1.47  
    1.48    // runtime/static resolving for fields
    1.49    static void resolve_field(FieldAccessInfo& result, constantPoolHandle pool, int index, Bytecodes::Code byte, bool check_only, TRAPS);
    1.50 @@ -156,6 +157,8 @@
    1.51    static void resolve_special_call  (CallInfo& result,              KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS);
    1.52    static void resolve_virtual_call  (CallInfo& result, Handle recv, KlassHandle recv_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, bool check_null_and_abstract, TRAPS);
    1.53    static void resolve_interface_call(CallInfo& result, Handle recv, KlassHandle recv_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, bool check_null_and_abstract, TRAPS);
    1.54 +  static void resolve_handle_call   (CallInfo& result,                                      KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, TRAPS);
    1.55 +  static void resolve_dynamic_call  (CallInfo& result,                                      Handle bootstrap_specifier, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, TRAPS);
    1.56  
    1.57    // same as above for compile-time resolution; but returns null handle instead of throwing an exception on error
    1.58    // also, does not initialize klass (i.e., no side effects)
    1.59 @@ -177,6 +180,7 @@
    1.60    static void resolve_invokevirtual  (CallInfo& result, Handle recv, constantPoolHandle pool, int index, TRAPS);
    1.61    static void resolve_invokeinterface(CallInfo& result, Handle recv, constantPoolHandle pool, int index, TRAPS);
    1.62    static void resolve_invokedynamic  (CallInfo& result,              constantPoolHandle pool, int index, TRAPS);
    1.63 +  static void resolve_invokehandle   (CallInfo& result,              constantPoolHandle pool, int index, TRAPS);
    1.64  
    1.65    static void resolve_invoke         (CallInfo& result, Handle recv, constantPoolHandle pool, int index, Bytecodes::Code byte, TRAPS);
    1.66  };

mercurial