[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
46
Examples/test-suite/ocaml/director_exception_runme.ml
Normal file
46
Examples/test-suite/ocaml/director_exception_runme.ml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
open Swig
|
||||
open Director_exception
|
||||
|
||||
exception MyException of string * string
|
||||
|
||||
let director_exception_MyFoo ob meth args =
|
||||
match meth with
|
||||
"ping" -> raise (Failure "MyFoo::ping() EXCEPTION")
|
||||
| _ -> (invoke ob) meth args
|
||||
|
||||
let director_exception_MyFoo2 ob meth args =
|
||||
match meth with
|
||||
"ping" -> (C_bool true)
|
||||
| _ -> (invoke ob) meth args
|
||||
|
||||
let director_exception_MyFoo3 ob meth args =
|
||||
match meth with
|
||||
"ping" -> raise (MyException ("foo", "bar"))
|
||||
| _ -> (invoke ob) meth args
|
||||
|
||||
(* Check that Failure is raised by MyFoo.ping() (via MyFoo.pong()). *)
|
||||
let a =
|
||||
new_derived_object
|
||||
new_Foo (director_exception_MyFoo) '()
|
||||
let a = _launder(a)
|
||||
try
|
||||
let _ = a -> pong () in assert false
|
||||
with Failure s -> assert(s = "MyFoo::ping() EXCEPTION")
|
||||
|
||||
let a =
|
||||
new_derived_object
|
||||
new_Foo (director_exception_MyFoo2) '()
|
||||
let a = _launder(a)
|
||||
try
|
||||
let _ = a -> pong () in assert false
|
||||
with Failure s -> assert(s = "No appropriate conversion found.")
|
||||
|
||||
let a =
|
||||
new_derived_object
|
||||
new_Foo (director_exception_MyFoo3) '()
|
||||
let a = _launder(a)
|
||||
try
|
||||
let _ = a -> pong () in assert false
|
||||
with MyException (s1, s2) ->
|
||||
assert (s1 = "foo");
|
||||
assert (s2 = "bar");
|
||||
Loading…
Add table
Add a link
Reference in a new issue