changeset 2271:a5cc6fde5927

More
author Gary Benson <gbenson@redhat.com>
date Fri, 11 Mar 2011 10:25:46 +0000
parents a40109f1e3c7
children 4a1bc9de9c19
files src/cpu/zero/vm/cppInterpreter_zero.cpp
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/zero/vm/cppInterpreter_zero.cpp	Fri Mar 11 10:18:44 2011 +0000
+++ b/src/cpu/zero/vm/cppInterpreter_zero.cpp	Fri Mar 11 10:25:46 2011 +0000
@@ -639,7 +639,8 @@
 
   // Compare the method type against that of the receiver
   oop mhtype = java_dyn_MethodHandle::type(method_handle);
-  if (mhtype != method_type) {
+  bool is_exact = mhtype == method_type;
+  if (!is_exact) {
     if (method->intrinsic_id() == vmIntrinsics::_invokeExact) {
       CALL_VM_NOCHECK_NOFIX(
         InterpreterRuntime::throw_WrongMethodTypeException(
@@ -672,11 +673,13 @@
   if (HAS_PENDING_EXCEPTION)
     result_slots = 0;
 
-  // Pop the method handle argument, which inconveniently will
+  // Pop the method handle arguments, which inconveniently will
   // be underneath the result being returned if one is present
   intptr_t result[2];
   for (int i = 0; i < result_slots; i++)
     result[i] = stack->pop();
+  if (!is_exact)
+    stack->pop();
   stack->pop(); 
   for (int i = result_slots - 1; i >= 0; i--)
     stack->push(result[i]);