diff --git a/Examples/test-suite/perl5/argcargvtest_runme.pl b/Examples/test-suite/perl5/argcargvtest_runme.pl new file mode 100644 index 000000000..c4157ebf4 --- /dev/null +++ b/Examples/test-suite/perl5/argcargvtest_runme.pl @@ -0,0 +1,20 @@ +use strict; +use warnings; +use Test::More tests => 8; +BEGIN { use_ok('argcargvtest') } +require_ok('argcargvtest'); + +my $largs = ["hi", "hola", "hello"]; +is(argcargvtest::mainc($largs), 3, "test main typemap 1"); + +my $targs = ["hi", "hola"]; +is(argcargvtest::mainv($targs, 1), "hola", "test main typemap 2"); + +my $errorVal = 0; +my $ret = eval qq(argcargvtest::mainv("hello", 1); \$errorVal = 1;); +is($ret, undef, "test main typemap 3"); +is($errorVal, 0, "test main typemap 4"); + +is(argcargvtest::initializeApp($largs), undef, "test main typemap 5"); + +ok(1, "done"); diff --git a/Examples/test-suite/php/argcargvtest_runme.php b/Examples/test-suite/php/argcargvtest_runme.php new file mode 100644 index 000000000..4a675d0ed --- /dev/null +++ b/Examples/test-suite/php/argcargvtest_runme.php @@ -0,0 +1,29 @@ + e + $ret = 1 +end + +if $error == 1 or $ret != 1 + raise RuntimeError, "bad main typemap" +end + +initializeApp($largs) diff --git a/Examples/test-suite/tcl/argcargvtest_runme.tcl b/Examples/test-suite/tcl/argcargvtest_runme.tcl new file mode 100644 index 000000000..14c0e92cb --- /dev/null +++ b/Examples/test-suite/tcl/argcargvtest_runme.tcl @@ -0,0 +1,28 @@ +if [ catch { load ./argcargvtest[info sharedlibextension] argcargvtest} err_msg ] { + puts stderr "Could not load shared object:\n$err_msg" +} + +set largs {hi hola hello} +if {[mainc $largs] != 3} { + puts stderr "bad main typemap" + exit 1 +} + +set targs {hi hola} +if {[mainv $targs 1] != "hola"} { + puts stderr "bad main typemap" + exit 1 +} + +set targs " hi hola " +if {[mainv $targs 1] != "hola"} { + puts stderr "bad main typemap" + exit 1 +} + +if { ! [ catch { mainv("hello", 1) } ] } { + puts stderr "bad main typemap" + exit 1 +} + +initializeApp $largs diff --git a/Lib/perl5/argcargv.i b/Lib/perl5/argcargv.i index de7b626e0..5c3968e37 100644 --- a/Lib/perl5/argcargv.i +++ b/Lib/perl5/argcargv.i @@ -24,6 +24,11 @@ $2[i] = NULL; } +%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { + AV *av = (AV *)SvRV($input); + $1 = SvTYPE(av) == SVt_PVAV; +} + %typemap(freearg) (int ARGC, char **ARGV) { if ($2 != NULL) { free((void *)$2); diff --git a/Lib/php/argcargv.i b/Lib/php/argcargv.i index 14b0cf2c9..15a86a942 100644 --- a/Lib/php/argcargv.i +++ b/Lib/php/argcargv.i @@ -33,6 +33,10 @@ $2[i] = NULL; } +%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { + $1 = Z_TYPE($input) == IS_ARRAY; +} + %typemap(freearg) (int ARGC, char **ARGV) { if ($2 != NULL) { free((void *)$2); diff --git a/Lib/tcl/argcargv.i b/Lib/tcl/argcargv.i index e43f2e657..bcc3dc8a9 100644 --- a/Lib/tcl/argcargv.i +++ b/Lib/tcl/argcargv.i @@ -21,6 +21,11 @@ $2[i] = NULL; } +%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { + int len; + $1 = Tcl_ListObjLength(interp, $input, &len) == TCL_OK; +} + %typemap(freearg) (int ARGC, char **ARGV) { if ($2 != NULL) { free((void *)$2);