This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #133654) don't include OUTLIST parameters in the prototype
authorTony Cook <tony@develop-help.com>
Wed, 5 Dec 2018 04:22:52 +0000 (15:22 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 5 Dec 2018 04:22:52 +0000 (15:22 +1100)
The generated prototype (with PROTOTYPES: ENABLE) would include
OUTLIST parameters, but these aren't arguments to the perl function.

dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
dist/ExtUtils-ParseXS/t/002-more.t

index e1f0940..94ea5f6 100644 (file)
@@ -467,7 +467,7 @@ EOM
         $self->{defaults}->{$args[$i]} = $2;
         $self->{defaults}->{$args[$i]} =~ s/"/\\"/g;
       }
-      $self->{proto_arg}->[$i+1] = '$';
+      $self->{proto_arg}->[$i+1] = '$' unless $only_C_inlist_ref->{$args[$i]};
     }
     my $min_args = $num_args - $extra_args;
     $report_args =~ s/"/\\"/g;
index 4aaa3ab..e982290 100644 (file)
@@ -9,7 +9,7 @@ use ExtUtils::CBuilder;
 use attributes;
 use overload;
 
-plan tests => 29;
+plan tests => 30;
 
 my ($source_file, $obj_file, $lib_file);
 
@@ -48,7 +48,7 @@ SKIP: {
 }
 
 SKIP: {
-  skip "no dynamic loading", 25
+  skip "no dynamic loading", 26
     if !$b->have_compiler || !$Config{usedl};
   my $module = 'XSMore';
   $lib_file = $b->link( objects => $obj_file, module_name => $module );
@@ -92,6 +92,9 @@ SKIP: {
 
   is_deeply [XSMore::outlist()], [ord('a'), ord('b')], 'the OUTLIST keyword';
 
+  # eval so compile-time sees any prototype
+  is_deeply [ eval 'XSMore::outlist()' ], [ord('a'), ord('b')], 'OUTLIST prototypes';
+
   is XSMore::len("foo"), 3, 'the length keyword';
 
   is XSMore::sum(5, 9), 14, 'the INCLUDE_COMMAND directive';