comparison src/share/vm/interpreter/linkResolver.hpp @ 6822:f6b0eb4e44cf

7200949: JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path Reviewed-by: jrose, kvn
author twisti
date Mon, 01 Oct 2012 14:50:10 -0700
parents da91efe96a93
children b2e698d2276c
comparison
equal deleted inserted replaced
6811:1b582b1bf7cb 6822:f6b0eb4e44cf
74 KlassHandle _selected_klass; // dynamic receiver class (same as static, or subklass) 74 KlassHandle _selected_klass; // dynamic receiver class (same as static, or subklass)
75 methodHandle _resolved_method; // static target method 75 methodHandle _resolved_method; // static target method
76 methodHandle _selected_method; // dynamic (actual) target method 76 methodHandle _selected_method; // dynamic (actual) target method
77 int _vtable_index; // vtable index of selected method 77 int _vtable_index; // vtable index of selected method
78 Handle _resolved_appendix; // extra argument in constant pool (if CPCE::has_appendix) 78 Handle _resolved_appendix; // extra argument in constant pool (if CPCE::has_appendix)
79 Handle _resolved_method_type; // MethodType (for invokedynamic and invokehandle call sites)
79 80
80 void set_static( KlassHandle resolved_klass, methodHandle resolved_method , TRAPS); 81 void set_static( KlassHandle resolved_klass, methodHandle resolved_method , TRAPS);
81 void set_interface(KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method , TRAPS); 82 void set_interface(KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method , TRAPS);
82 void set_virtual( KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index, TRAPS); 83 void set_virtual( KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index , TRAPS);
83 void set_handle( methodHandle resolved_method, Handle resolved_appendix, TRAPS); 84 void set_handle( methodHandle resolved_method, Handle resolved_appendix, Handle resolved_method_type, TRAPS);
84 void set_common( KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index, TRAPS); 85 void set_common( KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index , TRAPS);
85 86
86 friend class LinkResolver; 87 friend class LinkResolver;
87 88
88 public: 89 public:
89 KlassHandle resolved_klass() const { return _resolved_klass; } 90 KlassHandle resolved_klass() const { return _resolved_klass; }
90 KlassHandle selected_klass() const { return _selected_klass; } 91 KlassHandle selected_klass() const { return _selected_klass; }
91 methodHandle resolved_method() const { return _resolved_method; } 92 methodHandle resolved_method() const { return _resolved_method; }
92 methodHandle selected_method() const { return _selected_method; } 93 methodHandle selected_method() const { return _selected_method; }
93 Handle resolved_appendix() const { return _resolved_appendix; } 94 Handle resolved_appendix() const { return _resolved_appendix; }
95 Handle resolved_method_type() const { return _resolved_method_type; }
94 96
95 BasicType result_type() const { return selected_method()->result_type(); } 97 BasicType result_type() const { return selected_method()->result_type(); }
96 bool has_vtable_index() const { return _vtable_index >= 0; } 98 bool has_vtable_index() const { return _vtable_index >= 0; }
97 bool is_statically_bound() const { return _vtable_index == Method::nonvirtual_vtable_index; } 99 bool is_statically_bound() const { return _vtable_index == Method::nonvirtual_vtable_index; }
98 int vtable_index() const { 100 int vtable_index() const {
111 private: 113 private:
112 static void lookup_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); 114 static void lookup_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
113 static void lookup_instance_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); 115 static void lookup_instance_method_in_klasses (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
114 static void lookup_method_in_interfaces (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); 116 static void lookup_method_in_interfaces (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
115 static void lookup_polymorphic_method (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, 117 static void lookup_polymorphic_method (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
116 KlassHandle current_klass, Handle* appendix_result_or_null, TRAPS); 118 KlassHandle current_klass, Handle *appendix_result_or_null, Handle *method_type_result, TRAPS);
117 119
118 static int vtable_index_of_miranda_method(KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); 120 static int vtable_index_of_miranda_method(KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
119 121
120 static void resolve_klass (KlassHandle& result, constantPoolHandle pool, int index, TRAPS); 122 static void resolve_klass (KlassHandle& result, constantPoolHandle pool, int index, TRAPS);
121 static void resolve_klass_no_update (KlassHandle& result, constantPoolHandle pool, int index, TRAPS); // no update of constantPool entry 123 static void resolve_klass_no_update (KlassHandle& result, constantPoolHandle pool, int index, TRAPS); // no update of constantPool entry