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.
This commit is contained in:
William S Fulton 2022-08-26 23:20:13 +01:00
commit 2cfd77b1c0
5 changed files with 31 additions and 9 deletions

View file

@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
Version 4.1.0 (in progress)
===========================
2022-08-26: wsfulton
[Racket] 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.
2022-08-18: wsfulton
[Racket] Add support for std::unique_ptr in std_unique_ptr.i.
Add support for std::auto_ptr in std_auto_ptr.i.

View file

@ -0,0 +1,3 @@
(dynamic-call "scm_init_null_pointer_module" (dynamic-link "./libnull_pointer"))
(load "testsuite.scm")
(load "../schemerunme/null_pointer.scm")

View file

@ -0,0 +1,3 @@
(load-extension "null_pointer.so")
(load "../schemerunme/null_pointer.scm")

View file

@ -0,0 +1,8 @@
(define null '())
(unless (funk null)
(error "funk(null) does not return true"))
(unless (null? (getnull))
(error "NULL pointer should be null"))
(exit 0)

View file

@ -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