equal
deleted
inserted
replaced
22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "classfile/defaultMethods.hpp" |
26 #include "classfile/defaultMethods.hpp" |
|
27 #include "classfile/javaClasses.hpp" |
27 #include "classfile/symbolTable.hpp" |
28 #include "classfile/symbolTable.hpp" |
28 #include "classfile/systemDictionary.hpp" |
29 #include "classfile/systemDictionary.hpp" |
29 #include "classfile/vmSymbols.hpp" |
30 #include "classfile/vmSymbols.hpp" |
30 #include "compiler/compileBroker.hpp" |
31 #include "compiler/compileBroker.hpp" |
31 #include "gc/shared/collectedHeap.inline.hpp" |
32 #include "gc/shared/collectedHeap.inline.hpp" |
129 |
130 |
130 CompilationPolicy::compile_if_required(selected_method, THREAD); |
131 CompilationPolicy::compile_if_required(selected_method, THREAD); |
131 } |
132 } |
132 |
133 |
133 // utility query for unreflecting a method |
134 // utility query for unreflecting a method |
134 CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass) { |
135 CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass, TRAPS) { |
135 Klass* resolved_method_holder = resolved_method->method_holder(); |
136 Klass* resolved_method_holder = resolved_method->method_holder(); |
136 if (resolved_klass == NULL) { // 2nd argument defaults to holder of 1st |
137 if (resolved_klass == NULL) { // 2nd argument defaults to holder of 1st |
137 resolved_klass = resolved_method_holder; |
138 resolved_klass = resolved_method_holder; |
138 } |
139 } |
139 _resolved_klass = resolved_klass; |
140 _resolved_klass = resolved_klass; |
178 } |
179 } |
179 assert(index == Method::nonvirtual_vtable_index || index >= 0, "bad index %d", index); |
180 assert(index == Method::nonvirtual_vtable_index || index >= 0, "bad index %d", index); |
180 _call_kind = kind; |
181 _call_kind = kind; |
181 _call_index = index; |
182 _call_index = index; |
182 _resolved_appendix = Handle(); |
183 _resolved_appendix = Handle(); |
|
184 // Find or create a ResolvedMethod instance for this Method* |
|
185 set_resolved_method_name(CHECK); |
|
186 |
183 DEBUG_ONLY(verify()); |
187 DEBUG_ONLY(verify()); |
|
188 } |
|
189 |
|
190 void CallInfo::set_resolved_method_name(TRAPS) { |
|
191 Method* m = _resolved_method(); |
|
192 assert(m != NULL, "Should already have a Method*"); |
|
193 oop rmethod_name = java_lang_invoke_ResolvedMethodName::find_resolved_method(m, CHECK); |
|
194 _resolved_method_name = Handle(THREAD, rmethod_name); |
184 } |
195 } |
185 |
196 |
186 #ifdef ASSERT |
197 #ifdef ASSERT |
187 void CallInfo::verify() { |
198 void CallInfo::verify() { |
188 switch (call_kind()) { // the meaning and allowed value of index depends on kind |
199 switch (call_kind()) { // the meaning and allowed value of index depends on kind |