summaryrefslogtreecommitdiff
path: root/Lib/mzscheme
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-08-26 23:20:13 +0100
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-08-31 19:40:13 +0100
commit2cfd77b1c05dce14c0f15a710e4f9f4f1ff42d13 (patch)
tree74ec86bbb01050f9542d55e40d4ac94b18374e1f /Lib/mzscheme
parent3f622ea65efcd8555aff39d6f985e763db20ed8a (diff)
downloadswig-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.swg22
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