Fix "...without parentheses is ambuguous" warning for UTF-8 function names
authorAlex Vandiver <alex@chmrr.net>
Mon, 23 Mar 2015 03:08:24 +0000 (23:08 -0400)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 27 Mar 2015 19:46:47 +0000 (12:46 -0700)
While isWORDCHAR_lazy_if is UTF-8 aware, checking advanced byte-by-byte.
This lead to errors of the form:

   Passing malformed UTF-8 to "XPosixWord" is deprecated
   Malformed UTF-8 character (unexpected continuation byte 0x9d, with
     no preceding start byte)
   Warning: Use of "�" without parentheses is ambiguous

Use UTF8SKIP to advance character-by-character, not byte-by-byte.

t/lib/warnings/toke
toke.c

index b1d5347..6cbce2e 100644 (file)
@@ -1542,3 +1542,13 @@ EnFraçais
 print $v;
 EXPECT
 Comme ca!
+########
+# toke.c
+# Fix 'Use of "..." without parentheses is ambiguous' warning for
+# Unicode function names
+use utf8;
+use warnings;
+sub 𝛃(;$) { return 0; }
+my $v = 𝛃 - 5;
+EXPECT
+Warning: Use of "𝛃" without parentheses is ambiguous at - line 7.
diff --git a/toke.c b/toke.c
index e8bb706..f974b1c 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1841,7 +1841,7 @@ S_check_uni(pTHX)
        PL_last_uni++;
     s = PL_last_uni;
     while (isWORDCHAR_lazy_if(s,UTF) || *s == '-')
-       s++;
+       s += UTF ? UTF8SKIP(s) : 1;
     if ((t = strchr(s, '(')) && t < PL_bufptr)
        return;