diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-08-26 23:20:13 +0100 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-08-31 19:40:13 +0100 |
commit | 2cfd77b1c05dce14c0f15a710e4f9f4f1ff42d13 (patch) | |
tree | 74ec86bbb01050f9542d55e40d4ac94b18374e1f /Lib/mzscheme | |
parent | 3f622ea65efcd8555aff39d6f985e763db20ed8a (diff) | |
download | swig-2cfd77b1c05dce14c0f15a710e4f9f4f1ff42d13.tar.gz |
Racket - NULL pointer handling
SWIG now converts a C/C++ NULL pointer into a null value by calling
scheme_make_null(), so that scheme's null? is true for a NULL C/C++
pointer value.
Consistency with Guile and needed for a pending commit for handling
NULL and std::unique_ptr.
Diffstat (limited to 'Lib/mzscheme')
-rw-r--r-- | Lib/mzscheme/mzrun.swg | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/Lib/mzscheme/mzrun.swg b/Lib/mzscheme/mzrun.swg index fed660dfb..57d040812 100644 --- a/Lib/mzscheme/mzrun.swg +++ b/Lib/mzscheme/mzrun.swg @@ -144,16 +144,20 @@ mz_free_swig(void *p, void *data) { static Scheme_Object * SWIG_MzScheme_NewPointerObj(void *ptr, swig_type_info *type, int owner) { - struct swig_mz_proxy *new_proxy; - new_proxy = (struct swig_mz_proxy *) scheme_malloc(sizeof(struct swig_mz_proxy)); - new_proxy->mztype = swig_type; - new_proxy->type = type; - new_proxy->object = ptr; - new_proxy->own = owner & SWIG_POINTER_OWN; - if (new_proxy->own) { - scheme_add_finalizer(new_proxy, mz_free_swig, NULL); + if (ptr) { + struct swig_mz_proxy *new_proxy; + new_proxy = (struct swig_mz_proxy *) scheme_malloc(sizeof(struct swig_mz_proxy)); + new_proxy->mztype = swig_type; + new_proxy->type = type; + new_proxy->object = ptr; + new_proxy->own = owner & SWIG_POINTER_OWN; + if (new_proxy->own) { + scheme_add_finalizer(new_proxy, mz_free_swig, NULL); + } + return (Scheme_Object *) new_proxy; + } else { + return scheme_make_null(); } - return (Scheme_Object *) new_proxy; } static int |