This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
toke.c: S_checkcomma, "No comma allowed after %s" cleanup
authorBrian Fraser <fraserbn@gmail.com>
Sat, 6 Aug 2011 19:59:16 +0000 (20:59 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 23 Mar 2012 03:23:56 +0000 (20:23 -0700)
t/uni/parser.t
toke.c

index e67871e..256864c 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan (tests => 44);
+plan (tests => 45);
 
 use utf8;
 use open qw( :utf8 :std );
@@ -132,3 +132,9 @@ is ${"main::\345\225\217"}, undef, "..and using the encoded form doesn't";
         like $@, qr!"$_" variable \$::\x{30cb} can't be in a package!, qq!'"$_" variable %s can't be in a package' is UTF-8 clean!;
     }
 }
+
+{
+    local $@;
+    eval qq!print \x{30cb}, "comma""!;
+    like $@, qr/No comma allowed after filehandle/, "No comma allowed after filehandle triggers correctly for UTF-8 filehandles.";
+}
diff --git a/toke.c b/toke.c
index 1696e24..0e6bc4d 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -8623,9 +8623,10 @@ S_checkcomma(pTHX_ const char *s, const char *name, const char *what)
     while (s < PL_bufend && isSPACE(*s))
        s++;
     if (isIDFIRST_lazy_if(s,UTF)) {
-       const char * const w = s++;
+       const char * const w = s;
+        s += UTF ? UTF8SKIP(s) : 1;
        while (isALNUM_lazy_if(s,UTF))
-           s++;
+           s += UTF ? UTF8SKIP(s) : 1;
        while (s < PL_bufend && isSPACE(*s))
            s++;
        if (*s == ',') {