The OCaml module's exception handling code was poorly designed, gave confusing exception messages, and was vulnerable to buffer overflows. The OCaml module's SWIG_exception_() was adding a useless newline to the end of the exception message. In some cases, the integer value of f.e. SWIG_TypeError was being added to the exception message. The unneeded else in the OCaml module's SWIG_contract_assert() macro was causing -Wmisleading-indentation warnings. The OCaml module's exception handling code now mirrors that of the Java module. Add Lib/ocaml/std_except.i. Add multiple runtime tests.
25 lines
983 B
OCaml
25 lines
983 B
OCaml
open Swig
|
|
open Throw_exception
|
|
|
|
let x = new_Foo '()
|
|
|
|
let check meth args expected =
|
|
try
|
|
let _ = ((invoke x) meth (C_list [ args ])) in assert false
|
|
with Failure msg -> assert (msg = expected)
|
|
|
|
let _ =
|
|
check "test_int" '() "C++ int exception thrown, value: 37";
|
|
check "test_msg" '() "Dead";
|
|
check "test_cls" '() "C++ CError exception thrown";
|
|
check "test_cls_ptr" '() "C++ CError * exception thrown";
|
|
check "test_cls_ref" '() "C++ CError & exception thrown";
|
|
check "test_cls_td" '() "C++ Namespace::ErrorTypedef exception thrown";
|
|
check "test_cls_ptr_td" '() "C++ Namespace::ErrorPtr exception thrown";
|
|
check "test_cls_ref_td" '() "C++ Namespace::ErrorRef exception thrown";
|
|
check "test_array" '() "C++ int [10] exception thrown";
|
|
check "test_enum" '() "C++ Namespace::EnumTest exception thrown";
|
|
check "test_multi" '(1) "C++ int exception thrown, value: 37";
|
|
check "test_multi" '(2) "Dead";
|
|
check "test_multi" '(3) "C++ CError exception thrown";
|
|
;;
|