Fix overloading for non-pointers and NULL - Octave

This commit is contained in:
William S Fulton 2018-12-30 11:25:41 +00:00
commit e354ba8cdc
2 changed files with 53 additions and 1 deletions

View file

@ -0,0 +1,52 @@
# do not dump Octave core
if exist("crash_dumps_octave_core", "builtin")
crash_dumps_octave_core(0);
endif
overload_null
function check(a, b)
if (a != b)
error("%i does not equal %i", a, b);
endif
end
o = Overload();
x = X();
null = []; # NULL pointer
check(1, o.byval1(x));
check(2, o.byval1(null));
check(3, o.byval2(null));
check(4, o.byval2(x));
check(5, o.byref1(x));
check(6, o.byref1(null));
check(7, o.byref2(null));
check(8, o.byref2(x));
check(9, o.byconstref1(x));
check(10, o.byconstref1(null));
check(11, o.byconstref2(null));
check(12, o.byconstref2(x));
# const pointer references
check(13, o.byval1cpr(x));
check(14, o.byval1cpr(null));
check(15, o.byval2cpr(null));
check(16, o.byval2cpr(x));
# forward class declaration
check(17, o.byval1forwardptr(x));
check(18, o.byval1forwardptr(null));
check(19, o.byval2forwardptr(null));
check(20, o.byval2forwardptr(x));
check(21, o.byval1forwardref(x));
check(22, o.byval2forwardref(x));

View file

@ -1477,7 +1477,7 @@ SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr, swig_t
(ov.is_matrix_type() && ov.rows() == 0 && ov.columns() == 0) ) {
if (ptr)
*ptr = 0;
return SWIG_OK;
return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK;
}
if (ov.type_id() != octave_swig_ref::static_type_id())
return SWIG_ERROR;