Make sure to strip trailing semicolons from inputmap
authorSteffen Mueller <smueller@cpan.org>
Sun, 21 Aug 2011 11:35:14 +0000 (13:35 +0200)
committerSteffen Mueller <smueller@cpan.org>
Sun, 21 Aug 2011 13:03:50 +0000 (15:03 +0200)
If we don't get that right, there may be additional semicolons in
the output C code. Those will be interpreted as empty statements
which is a problem for strict/old compilers which require strict
separation of declarations and other code.

Reported by Torsten Schoenfeld, diagnosed by Thorsten and Jan Dubois.

dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm
dist/ExtUtils-ParseXS/t/002-more.t
dist/ExtUtils-ParseXS/t/XSMore.xs

index 7ecc777..a338b23 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::Typemaps;
 use 5.006001;
 use strict;
 use warnings;
-our $VERSION = '1.01';
+our $VERSION = '1.02';
 #use Carp qw(croak);
 
 require ExtUtils::ParseXS;
index 163353e..b8adbe6 100644 (file)
@@ -85,7 +85,7 @@ sub cleaned_code {
   my $self = shift;
   my $code = $self->code;
 
-  $code =~ s/;*\s+\z//;
+  $code =~ s/(?:;+\s*|;*\s+)\z//s;
 
   # Move C pre-processor instructions to column 1 to be strictly ANSI
   # conformant. Some pre-processors are fussy about this.
index 04bd296..7973dce 100644 (file)
@@ -94,7 +94,7 @@ SKIP: {
   # Tests for embedded typemaps
   is XSMore::typemaptest1(), 42, 'Simple embedded typemap works';
   is XSMore::typemaptest2(), 42, 'Simple embedded typemap works with funny end marker';
-  is XSMore::typemaptest3(12), 12, 'Simple embedded typemap works for input, too';
+  is XSMore::typemaptest3(12, 13, 14), 12, 'Simple embedded typemap works for input, too';
 
   # Win32 needs to close the DLL before it can unlink it, but unfortunately
   # dl_unload_file was missing on Win32 prior to perl change #24679!
index df40186..2a0a87a 100644 (file)
@@ -6,6 +6,7 @@ typedef IV MyType;
 typedef IV MyType2;
 typedef IV MyType3;
 typedef IV MyType4;
+typedef IV MyType5;
 
 
 =for testing
@@ -89,6 +90,15 @@ T_BAAR
        $var = ($type)SvIV($arg)
 END
 
+TYPEMAP: <<END
+MyType5 T_WITHSEMICOLON
+
+INPUT
+
+T_WITHSEMICOLON
+    $var = ($type)SvIV($arg); 
+END
+
 
 MyType
 typemaptest1()
@@ -105,7 +115,10 @@ typemaptest2()
     RETVAL
 
 MyType3
-typemaptest3(MyType4 foo)
+typemaptest3(foo, bar, baz)
+    MyType4 foo
+    MyType5 bar
+    MyType5 baz
   CODE:
     RETVAL = foo;
   OUTPUT: