[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:
Zackery Spytz 2019-02-07 16:25:10 -07:00
commit e5b8b5a164
12 changed files with 264 additions and 41 deletions

View file

@ -0,0 +1,39 @@
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")
;;