src/share/vm/ci/ciMethod.cpp

changeset 1919
61b2245abf36
parent 1686
576e77447e3c
child 1934
e9ff18c4ace7
     1.1 --- a/src/share/vm/ci/ciMethod.cpp	Thu May 20 06:34:23 2010 -0700
     1.2 +++ b/src/share/vm/ci/ciMethod.cpp	Fri May 21 02:59:24 2010 -0700
     1.3 @@ -690,20 +690,32 @@
     1.4  
     1.5  // ------------------------------------------------------------------
     1.6  // invokedynamic support
     1.7 +
     1.8 +// ------------------------------------------------------------------
     1.9 +// ciMethod::is_method_handle_invoke
    1.10  //
    1.11 +// Return true if the method is a MethodHandle target.
    1.12  bool ciMethod::is_method_handle_invoke() const {
    1.13 -  check_is_loaded();
    1.14 -  bool flag = ((flags().as_int() & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS);
    1.15 +  bool flag = (holder()->name() == ciSymbol::java_dyn_MethodHandle() &&
    1.16 +               methodOopDesc::is_method_handle_invoke_name(name()->sid()));
    1.17  #ifdef ASSERT
    1.18 -  {
    1.19 -    VM_ENTRY_MARK;
    1.20 -    bool flag2 = get_methodOop()->is_method_handle_invoke();
    1.21 -    assert(flag == flag2, "consistent");
    1.22 +  if (is_loaded()) {
    1.23 +    bool flag2 = ((flags().as_int() & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS);
    1.24 +    {
    1.25 +      VM_ENTRY_MARK;
    1.26 +      bool flag3 = get_methodOop()->is_method_handle_invoke();
    1.27 +      assert(flag2 == flag3, "consistent");
    1.28 +      assert(flag  == flag3, "consistent");
    1.29 +    }
    1.30    }
    1.31  #endif //ASSERT
    1.32    return flag;
    1.33  }
    1.34  
    1.35 +// ------------------------------------------------------------------
    1.36 +// ciMethod::is_method_handle_adapter
    1.37 +//
    1.38 +// Return true if the method is a generated MethodHandle adapter.
    1.39  bool ciMethod::is_method_handle_adapter() const {
    1.40    check_is_loaded();
    1.41    VM_ENTRY_MARK;

mercurial