[OCaml] Fix director_pass_by_value
Add a directorin typemap for SWIGTYPE. Add director_frob_runme.ml, director_pass_by_value_runme.ml, and director_unroll_runme.ml. This commit fixes most of the director-related warnings in the OCaml test suite. Of the director tests that are currently included in the OCaml test suite, director_basic and director_property are the only ones which give warnings (due to issues with typecheck typemaps).
This commit is contained in:
parent
5a28593818
commit
9942e6a582
5 changed files with 59 additions and 1 deletions
|
|
@ -21,7 +21,6 @@ cpp_enum \
|
||||||
default_constructor \
|
default_constructor \
|
||||||
director_binary_string \
|
director_binary_string \
|
||||||
director_enum \
|
director_enum \
|
||||||
director_pass_by_value \
|
|
||||||
director_primitives \
|
director_primitives \
|
||||||
director_redefined \
|
director_redefined \
|
||||||
director_string \
|
director_string \
|
||||||
|
|
|
||||||
5
Examples/test-suite/ocaml/director_frob_runme.ml
Normal file
5
Examples/test-suite/ocaml/director_frob_runme.ml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
open Swig
|
||||||
|
open Director_frob
|
||||||
|
|
||||||
|
let foo = new_Bravo '()
|
||||||
|
assert (foo -> abs_method () as string = "Bravo::abs_method()")
|
||||||
24
Examples/test-suite/ocaml/director_pass_by_value_runme.ml
Normal file
24
Examples/test-suite/ocaml/director_pass_by_value_runme.ml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
open Swig
|
||||||
|
open Director_pass_by_value
|
||||||
|
|
||||||
|
let passByVal = ref [| |]
|
||||||
|
|
||||||
|
let director_pass_by_value_Derived ob meth args =
|
||||||
|
match meth with
|
||||||
|
| "virtualMethod" -> passByVal := Array.append !passByVal [|args|]; C_void
|
||||||
|
| _ -> (invoke ob) meth args
|
||||||
|
|
||||||
|
let d =
|
||||||
|
new_derived_object
|
||||||
|
new_DirectorPassByValueAbstractBase
|
||||||
|
(director_pass_by_value_Derived)
|
||||||
|
'()
|
||||||
|
|
||||||
|
let _ =
|
||||||
|
let caller = new_Caller '() in
|
||||||
|
assert (caller -> call_virtualMethod (d) = C_void);
|
||||||
|
assert (Array.length !passByVal = 1);
|
||||||
|
let a = List.hd (fnhelper (!passByVal.(0))) in
|
||||||
|
assert (a -> getVal () as int = 0x12345678);
|
||||||
|
assert (a -> "~" () = C_void);
|
||||||
|
;;
|
||||||
19
Examples/test-suite/ocaml/director_unroll_runme.ml
Normal file
19
Examples/test-suite/ocaml/director_unroll_runme.ml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
open Swig
|
||||||
|
open Director_unroll
|
||||||
|
|
||||||
|
let director_unroll_MyFoo ob meth args =
|
||||||
|
match meth with
|
||||||
|
| "ping" -> C_string "director_unroll_MyFoo::ping()"
|
||||||
|
| _ -> (invoke ob) meth args
|
||||||
|
|
||||||
|
let a =
|
||||||
|
new_derived_object
|
||||||
|
new_Foo (director_unroll_MyFoo) '()
|
||||||
|
|
||||||
|
let _ =
|
||||||
|
let b = new_Bar '() in
|
||||||
|
let _ = b -> set (a) in
|
||||||
|
let c = b -> get () in
|
||||||
|
assert (director_unroll_MyFoo c "ping" '() as string =
|
||||||
|
"director_unroll_MyFoo::ping()");
|
||||||
|
;;
|
||||||
|
|
@ -109,6 +109,17 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
%typemap(directorin) SWIGTYPE {
|
||||||
|
$<ype temp = new $ltype((const $ltype &)$1);
|
||||||
|
swig_result = SWIG_Ocaml_ptr_to_val("create_$ltype_from_ptr", (void *)temp, $&1_descriptor);
|
||||||
|
args = caml_list_append(args, swig_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(directorin) SWIGTYPE *, SWIGTYPE [], SWIGTYPE &, SWIGTYPE && {
|
||||||
|
swig_result = SWIG_Ocaml_ptr_to_val("create_$ltype_from_ptr", (void *)&$1, $&1_descriptor);
|
||||||
|
args = caml_list_append(args, swig_result);
|
||||||
|
}
|
||||||
|
|
||||||
/* The SIMPLE_MAP macro below defines the whole set of typemaps needed
|
/* The SIMPLE_MAP macro below defines the whole set of typemaps needed
|
||||||
for simple types. */
|
for simple types. */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue