buglet: sub a(;&) { } doesn't work
Adrian M. Enache [Sat, 19 Apr 2003 01:41:07 +0000 (04:41 +0300)]
Message-ID: <20030418224107.GA2751@ratsnest.hole>

p4raw-id: //depot/perl@19367

t/comp/parser.t
toke.c

index b50d8af..25025cc 100644 (file)
@@ -9,7 +9,7 @@ BEGIN {
 }
 
 require "./test.pl";
-plan( tests => 37 );
+plan( tests => 38 );
 
 eval '%@x=0;';
 like( $@, qr/^Can't modify hash dereference in repeat \(x\)/, '%@x=0' );
@@ -89,6 +89,9 @@ ${a}{ ${a}[ @{b}{
 ${a}{
 }
 
+eval q{ sub a(;; &) { } a { } };
+is($@, '', "';&' sub prototype confuses the lexer");
+
 # Bug #21575
 # ensure that the second print statement works, by playing a bit
 # with the test output.
diff --git a/toke.c b/toke.c
index 23ae908..850480c 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -4086,6 +4086,8 @@ Perl_yylex(pTHX)
                            TERM(FUNC0SUB);
                        if (strEQ(proto, "$"))
                            OPERATOR(UNIOPSUB);
+                       while (*proto == ';')
+                           proto++;
                        if (*proto == '&' && *s == '{') {
                            sv_setpv(PL_subname, PL_curstash ? 
                                        "__ANON__" : "__ANON__::__ANON__");