Fix overloading for non-pointers and NULL - MzScheme

This commit is contained in:
William S Fulton 2018-12-30 17:12:33 +00:00
commit 330201018a
3 changed files with 13 additions and 3 deletions

View file

@ -158,7 +158,7 @@ SWIG_MzScheme_ConvertPtr(Scheme_Object *s, void **result, swig_type_info *type,
if (SCHEME_NULLP(s)) { if (SCHEME_NULLP(s)) {
*result = NULL; *result = NULL;
return 0; return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK;
} else if (SCHEME_TYPE(s) == swig_type) { } else if (SCHEME_TYPE(s) == swig_type) {
struct swig_mz_proxy *proxy = (struct swig_mz_proxy *) s; struct swig_mz_proxy *proxy = (struct swig_mz_proxy *) s;
if (type) { if (type) {

View file

@ -7,6 +7,7 @@
/* Include headers */ /* Include headers */
%runtime "swigrun.swg" // Common C API type-checking code %runtime "swigrun.swg" // Common C API type-checking code
%runtime "swigerrors.swg" // SWIG errors
%runtime "mzrun.swg" %runtime "mzrun.swg"
%define SWIG_APPEND_VALUE(value) %define SWIG_APPEND_VALUE(value)

View file

@ -329,7 +329,7 @@ REF_MAP(double, SCHEME_REALP, scheme_real_to_double,
$1 = (SCHEME_STRINGP($input)) ? 1 : 0; $1 = (SCHEME_STRINGP($input)) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] { %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE [] {
void *ptr; void *ptr;
if (SWIG_ConvertPtr($input, (void **) &ptr, $1_descriptor, 0)) { if (SWIG_ConvertPtr($input, (void **) &ptr, $1_descriptor, 0)) {
$1 = 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 { %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE {
void *ptr; 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; $1 = 0;
} else { } else {
$1 = 1; $1 = 1;