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;