hotspot/src/share/vm/interpreter/linkResolver.cpp
changeset 46505 fd4bc78630b1
parent 46458 3c12af929e7d
child 46560 388aa8d67c80
equal deleted inserted replaced
46504:38048d4d20e7 46505:fd4bc78630b1
    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