Merge branch 'ZackerySpytz-OCaml-director_pass_by_value'

* ZackerySpytz-OCaml-director_pass_by_value:
  [OCaml] Fix director_pass_by_value
  [OCaml] Reduce the duplication in typemaps.i
This commit is contained in:
William S Fulton 2019-02-09 22:25:29 +00:00
commit b80b4d5638
6 changed files with 82 additions and 54 deletions

View file

@ -21,7 +21,6 @@ cpp_enum \
default_constructor \
director_binary_string \
director_enum \
director_pass_by_value \
director_primitives \
director_redefined \
director_string \

View file

@ -0,0 +1,5 @@
open Swig
open Director_frob
let foo = new_Bravo '()
assert (foo -> abs_method () as string = "Bravo::abs_method()")

View 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);
;;

View 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()");
;;