changeset 2260:28d718a1aa7b

More
author Gary Benson <gbenson@redhat.com>
date Tue, 01 Mar 2011 16:09:39 +0000
parents fe7dc8f48c6c
children 0357d9c5ada6
files src/cpu/zero/vm/cppInterpreter_zero.cpp
diffstat 1 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/zero/vm/cppInterpreter_zero.cpp	Tue Mar 01 16:03:31 2011 +0000
+++ b/src/cpu/zero/vm/cppInterpreter_zero.cpp	Tue Mar 01 16:09:39 2011 +0000
@@ -798,6 +798,14 @@
           
         if (objKlassOop != klassOf &&
             !objKlassOop->klass_part()->is_subtype_of(klassOf)) {
+
+          // Unwind
+          oop method_type = java_dyn_MethodHandle::type(method_handle);
+          stack->set_sp(stack->sp() +
+                        java_dyn_MethodTypeForm::vmslots(
+                          java_dyn_MethodType::form(method_type)));
+
+          // Throw
           ResourceMark rm(THREAD);
           const char* objName = Klass::cast(objKlassOop)->external_name();
           const char* klassName = Klass::cast(klassOf)->external_name();
@@ -807,7 +815,6 @@
             InterpreterRuntime::throw_ClassCastException(thread, message));
           // NB all oops trashed!
           assert(HAS_PENDING_EXCEPTION, "should do");
-          // XXX unwind?
           return;
         }
       }