Index: vm/include/open/vm.h
===================================================================
--- vm/include/open/vm.h (revision 505214)
+++ vm/include/open/vm.h (working copy)
@@ -812,6 +812,15 @@
VMEXPORT Class_Handle type_info_get_class(Type_Info_Handle tih);
/**
+ * Get the class if type_info_is_reference or
+ * type_info_is_unboxed returned TRUE.
+ * If the type info is a vector or a general array, return the
+ * class handle for the array type (not the element type).
+ * Does not leave any exception on stack.
+ */
+VMEXPORT Class_Handle type_info_get_class_no_exn(Type_Info_Handle tih);
+
+/**
* Get the method signature if type_info_is_method_pointer
* returned TRUE.
*/
Index: vm/vmcore/src/class_support/C_Interface.cpp
===================================================================
--- vm/vmcore/src/class_support/C_Interface.cpp (revision 505214)
+++ vm/vmcore/src/class_support/C_Interface.cpp (working copy)
@@ -2031,6 +2031,12 @@
return c;
} //type_info_get_class
+Class_Handle type_info_get_class_no_exn(Type_Info_Handle tih)
+{
+ Class_Handle ch = type_info_get_class(tih);
+ exn_clear();
+ return ch;
+} // type_info_get_class_no_exn
Method_Signature_Handle type_info_get_method_sig(Type_Info_Handle UNREF tih)
{
Index: vm/jitrino/src/vm/drl/DrlVMInterface.cpp
===================================================================
--- vm/jitrino/src/vm/drl/DrlVMInterface.cpp (revision 505214)
+++ vm/jitrino/src/vm/drl/DrlVMInterface.cpp (working copy)
@@ -527,7 +527,7 @@
// void return type
type = typeManager.getVoidType();
} else if (type_info_is_reference(typeHandle)) {
- Class_Handle classHandle = type_info_get_class(typeHandle);
+ Class_Handle classHandle = type_info_get_class_no_exn(typeHandle);
if (!classHandle)
return NULL;
type = typeManager.getObjectType(classHandle);