[OCaml] Some exception improvements
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.
This commit is contained in:
parent
df86ec5af6
commit
e5b8b5a164
12 changed files with 264 additions and 41 deletions
|
|
@ -1,28 +1,25 @@
|
|||
(* Throw exception test *)
|
||||
|
||||
open Swig
|
||||
open Throw_exception
|
||||
|
||||
let x = new_Foo C_void ;;
|
||||
let _ =
|
||||
try
|
||||
(invoke x) "test_int" C_void
|
||||
with (Failure "Exception(37): Thrown exception from C++ (int)\n") ->
|
||||
try
|
||||
(invoke x) "test_msg" C_void
|
||||
with (Failure "Exception(0): Dead\n") ->
|
||||
try
|
||||
(invoke x) "test_cls" C_void
|
||||
with (Failure "Exception(0): Thrown exception from C++ (unknown)\n") ->
|
||||
try
|
||||
(invoke x) "test_multi" (C_int 1)
|
||||
with (Failure "Exception(37): Thrown exception from C++ (int)\n") ->
|
||||
try
|
||||
(invoke x) "test_multi" (C_int 2)
|
||||
with (Failure "Exception(0): Dead\n") ->
|
||||
try
|
||||
(invoke x) "test_multi" (C_int 3)
|
||||
with (Failure "Exception(0): Thrown exception from C++ (unknown)\n") ->
|
||||
exit 0
|
||||
let x = new_Foo '()
|
||||
|
||||
let _ = exit 1
|
||||
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";
|
||||
;;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue