From: Adrian M. Enache Date: Sat, 19 Apr 2003 01:41:07 +0000 (+0300) Subject: buglet: sub a(;&) { } doesn't work X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0f5d0394b2f5b3a7ac4dba1b324a4ccfb7799a4b;p=p5sagit%2Fp5-mst-13.2.git buglet: sub a(;&) { } doesn't work Message-ID: <20030418224107.GA2751@ratsnest.hole> p4raw-id: //depot/perl@19367 --- diff --git a/t/comp/parser.t b/t/comp/parser.t index b50d8af..25025cc 100644 --- a/t/comp/parser.t +++ b/t/comp/parser.t @@ -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 --- 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__");