From 3f622ea65efcd8555aff39d6f985e763db20ed8a Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 24 Aug 2022 08:39:36 +0100 Subject: [PATCH] SWIGTYPE && input typemaps now assume object has been moved - Go and OCaml Not fully implemented and Untested. Go's implementation needs fixing to fully support typemaps before this can be done. OCaml implementation does not have support for releasing ownership which is required to add error checking preventing double deletes. --- Lib/go/go.swg | 5 +++-- Lib/ocaml/ocaml.swg | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Lib/go/go.swg b/Lib/go/go.swg index bb7a471cc..348ae5f0d 100644 --- a/Lib/go/go.swg +++ b/Lib/go/go.swg @@ -388,8 +388,9 @@ %typemap(gotype) SWIGTYPE && %{$gotypename%} -%typemap(in) SWIGTYPE && -%{ $1 = *($&1_ltype)&$input; %} +%typemap(in, fragment="") SWIGTYPE && (std::unique_ptr<$*1_ltype> rvrdeleter) +%{ $1 = *($&1_ltype)&$input; +rvrdeleter.reset($1); %} %typemap(out) SWIGTYPE && %{ *($&1_ltype)&$result = $1; %} diff --git a/Lib/ocaml/ocaml.swg b/Lib/ocaml/ocaml.swg index 7ca48ba08..09270509d 100644 --- a/Lib/ocaml/ocaml.swg +++ b/Lib/ocaml/ocaml.swg @@ -40,9 +40,10 @@ $1 = ($ltype) caml_ptr_val($input,$1_descriptor); } -%typemap(in) SWIGTYPE && { +%typemap(in, fragment="") SWIGTYPE && (std::unique_ptr<$*1_ltype> rvrdeleter) %{ $1 = ($ltype) caml_ptr_val($input,$1_descriptor); -} + rvrdeleter.reset($1); +%} %typemap(varin) SWIGTYPE & { $1 = *(($ltype) caml_ptr_val($input,$1_descriptor));