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.
39 lines
903 B
OCaml
39 lines
903 B
OCaml
open Swig
|
|
open Catches
|
|
|
|
let _ =
|
|
try
|
|
ignore (_test_catches '(1)); assert false
|
|
with Failure s ->
|
|
assert (s = "C++ int exception thrown, value: 1")
|
|
|
|
try
|
|
ignore (_test_catches '(2)); assert false
|
|
with Failure s ->
|
|
assert (s = "two")
|
|
|
|
try
|
|
ignore (_test_catches '(3)); assert false
|
|
with Failure s ->
|
|
assert (s = "C++ ThreeException const & exception thrown")
|
|
|
|
try
|
|
ignore (_test_exception_specification '(1)); assert false
|
|
with Failure s ->
|
|
assert (s = "C++ int exception thrown, value: 1")
|
|
|
|
try
|
|
ignore (_test_exception_specification '(2)); assert false
|
|
with Failure s ->
|
|
assert (s = "unknown exception")
|
|
|
|
try
|
|
ignore (_test_exception_specification '(3)); assert false
|
|
with Failure s ->
|
|
assert (s = "unknown exception")
|
|
|
|
try
|
|
ignore (_test_catches_all '(1)); assert false
|
|
with Failure s ->
|
|
assert (s = "unknown exception")
|
|
;;
|