diff --git a/Examples/test-suite/perl5/overload_null_runme.pl b/Examples/test-suite/perl5/overload_null_runme.pl new file mode 100644 index 000000000..7cc5090de --- /dev/null +++ b/Examples/test-suite/perl5/overload_null_runme.pl @@ -0,0 +1,44 @@ +use strict; +use warnings; +use Test::More tests => 24; +BEGIN { use_ok('overload_null') } +require_ok('overload_null'); + +my $o = new overload_null::Overload(); +my $x = new overload_null::X(); + +is(1, $o->byval1($x)); +is(2, $o->byval1(undef)); + +is(3, $o->byval2(undef)); +is(4, $o->byval2($x)); + +is(5, $o->byref1($x)); +is(6, $o->byref1(undef)); + +is(7, $o->byref2(undef)); +is(8, $o->byref2($x)); + +is(9, $o->byconstref1($x)); +is(10, $o->byconstref1(undef)); + +is(11, $o->byconstref2(undef)); +is(12, $o->byconstref2($x)); + +# const pointer references +is(13, $o->byval1cpr($x)); +is(14, $o->byval1cpr(undef)); + +is(15, $o->byval2cpr(undef)); +is(16, $o->byval2cpr($x)); + +# forward class declaration +is(17, $o->byval1forwardptr($x)); +is(18, $o->byval1forwardptr(undef)); + +is(19, $o->byval2forwardptr(undef)); +is(20, $o->byval2forwardptr($x)); + +is(21, $o->byval1forwardref($x)); + +is(22, $o->byval2forwardref($x)); diff --git a/Lib/perl5/perlrun.swg b/Lib/perl5/perlrun.swg index 02714c451..b04002f5d 100644 --- a/Lib/perl5/perlrun.swg +++ b/Lib/perl5/perlrun.swg @@ -277,7 +277,7 @@ SWIG_Perl_ConvertPtrAndOwn(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_ voidptr = INT2PTR(void *,tmp); } else if (! SvOK(sv)) { /* Check for undef */ *(ptr) = (void *) 0; - return SWIG_OK; + return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK; } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ if (!SvROK(sv)) { /* In Perl 5.12 and later, SVt_RV == SVt_IV, so sv could be a valid integer value. */