diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2018-12-30 17:12:33 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2018-12-30 17:12:33 +0000 |
commit | 330201018a543cc8595e05a88ada717b2686e7aa (patch) | |
tree | 96b51ccf91a46d0edeb86058d3682beddb418615 | |
parent | cbc1f7f1712831898c3a4c6d4c68158cf94e8389 (diff) | |
download | swig-330201018a543cc8595e05a88ada717b2686e7aa.tar.gz |
Fix overloading for non-pointers and NULL - MzScheme
-rw-r--r-- | Lib/mzscheme/mzrun.swg | 2 | ||||
-rw-r--r-- | Lib/mzscheme/mzscheme.swg | 1 | ||||
-rw-r--r-- | Lib/mzscheme/typemaps.i | 13 |
3 files changed, 13 insertions, 3 deletions
diff --git a/Lib/mzscheme/mzrun.swg b/Lib/mzscheme/mzrun.swg index 06447d78d..c438c9ce8 100644 --- a/Lib/mzscheme/mzrun.swg +++ b/Lib/mzscheme/mzrun.swg @@ -158,7 +158,7 @@ SWIG_MzScheme_ConvertPtr(Scheme_Object *s, void **result, swig_type_info *type, if (SCHEME_NULLP(s)) { *result = NULL; - return 0; + return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK; } else if (SCHEME_TYPE(s) == swig_type) { struct swig_mz_proxy *proxy = (struct swig_mz_proxy *) s; if (type) { diff --git a/Lib/mzscheme/mzscheme.swg b/Lib/mzscheme/mzscheme.swg index 9ae242845..f45c87250 100644 --- a/Lib/mzscheme/mzscheme.swg +++ b/Lib/mzscheme/mzscheme.swg @@ -7,6 +7,7 @@ /* Include headers */ %runtime "swigrun.swg" // Common C API type-checking code +%runtime "swigerrors.swg" // SWIG errors %runtime "mzrun.swg" %define SWIG_APPEND_VALUE(value) diff --git a/Lib/mzscheme/typemaps.i b/Lib/mzscheme/typemaps.i index 9346349bd..09bda2cca 100644 --- a/Lib/mzscheme/typemaps.i +++ b/Lib/mzscheme/typemaps.i @@ -329,7 +329,7 @@ REF_MAP(double, SCHEME_REALP, scheme_real_to_double, $1 = (SCHEME_STRINGP($input)) ? 1 : 0; } -%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] { +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE [] { void *ptr; if (SWIG_ConvertPtr($input, (void **) &ptr, $1_descriptor, 0)) { $1 = 0; @@ -338,9 +338,18 @@ REF_MAP(double, SCHEME_REALP, scheme_real_to_double, } } +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE &, SWIGTYPE && { + void *ptr; + if (SWIG_ConvertPtr($input, (void **) &ptr, $1_descriptor, SWIG_POINTER_NO_NULL)) { + $1 = 0; + } else { + $1 = 1; + } +} + %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE { void *ptr; - if (SWIG_ConvertPtr($input, (void **) &ptr, $&1_descriptor, 0)) { + if (SWIG_ConvertPtr($input, (void **) &ptr, $&1_descriptor, SWIG_POINTER_NO_NULL)) { $1 = 0; } else { $1 = 1; |