Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/vm/ci/ciMethodHandle.cpp
          +++ new/src/share/vm/ci/ciMethodHandle.cpp
↓ open down ↓ 17 lines elided ↑ open up ↑
  18   18   *
  19   19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20   20   * or visit www.oracle.com if you need additional information or have any
  21   21   * questions.
  22   22   *
  23   23   */
  24   24  
  25   25  #include "precompiled.hpp"
  26   26  #include "ci/ciClassList.hpp"
  27   27  #include "ci/ciInstance.hpp"
       28 +#include "ci/ciMethodData.hpp"
  28   29  #include "ci/ciMethodHandle.hpp"
  29   30  #include "ci/ciUtilities.hpp"
  30   31  #include "prims/methodHandleWalk.hpp"
  31   32  #include "prims/methodHandles.hpp"
  32   33  
  33   34  // ciMethodHandle
  34   35  
  35   36  // ------------------------------------------------------------------
  36   37  // ciMethodHandle::get_adapter
  37   38  //
  38   39  // Return an adapter for this MethodHandle.
  39      -ciMethod* ciMethodHandle::get_adapter(bool is_invokedynamic) const {
       40 +ciMethod* ciMethodHandle::get_adapter_impl(bool is_invokedynamic) const {
  40   41    VM_ENTRY_MARK;
  41   42    Handle h(get_oop());
  42   43    methodHandle callee(_callee->get_methodOop());
  43   44    // We catch all exceptions here that could happen in the method
  44   45    // handle compiler and stop the VM.
  45      -  MethodHandleCompiler mhc(h, callee, call_profile()->count(), is_invokedynamic, THREAD);
       46 +  MethodHandleCompiler mhc(h, callee, _profile->count(), is_invokedynamic, THREAD);
  46   47    if (!HAS_PENDING_EXCEPTION) {
  47   48      methodHandle m = mhc.compile(THREAD);
  48   49      if (!HAS_PENDING_EXCEPTION) {
  49   50        return CURRENT_ENV->get_object(m())->as_method();
  50   51      }
  51   52    }
  52   53    if (PrintMiscellaneous && (Verbose || WizardMode)) {
  53   54      tty->print("*** ciMethodHandle::get_adapter => ");
  54   55      PENDING_EXCEPTION->print();
  55   56      tty->print("*** get_adapter (%s): ", is_invokedynamic ? "indy" : "mh"); ((ciObject*)this)->print(); //@@
  56   57    }
  57   58    CLEAR_PENDING_EXCEPTION;
  58   59    return NULL;
  59   60  }
  60   61  
       62 +// ------------------------------------------------------------------
       63 +// ciMethodHandle::get_adapter
       64 +//
       65 +// Return an adapter for this MethodHandle.
       66 +ciMethod* ciMethodHandle::get_adapter(bool is_invokedynamic) const {
       67 +  ciMethod* result = get_adapter_impl(is_invokedynamic);
       68 +  if (result) {
       69 +    // Fake up the MDO maturity.
       70 +    ciMethodData* mdo = result->method_data();
       71 +    if (mdo != NULL && _caller->method_data() != NULL && _caller->method_data()->is_mature()) {
       72 +      mdo->set_mature();
       73 +    }
       74 +  }
       75 +  return result;
       76 +}
       77 +
  61   78  
  62   79  // ------------------------------------------------------------------
  63   80  // ciMethodHandle::print_impl
  64   81  //
  65   82  // Implementation of the print method.
  66   83  void ciMethodHandle::print_impl(outputStream* st) {
  67   84    st->print(" type=");
  68   85    get_oop()->print();
  69   86  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX