[perl #122695] Fix line number for else{foo} blead
authorFather Chrysostomos <sprout@cpan.org>
Thu, 23 Oct 2014 02:32:04 +0000 (19:32 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 23 Oct 2014 02:50:48 +0000 (19:50 -0700)
commit51a82aa9fb28c58b85d2a2e89872685010ffa91c
tree00c03bdebe06be0dc6f64a95ca117e2995e0d00f
parent551992550541be7bd63c953d9a52701192115a6c
[perl #122695] Fix line number for else{foo}

where there is no space after the opening brace.

The code that was responsible for the wrong line number:

if (isSPACE(*s) || *s == '#')
    PL_copline = NOLINE;   /* invalidate current command line number */

was added in perl *2.0* (378cc40b3)!  It looked a little different
back then:

if (isspace(*s) || *s == '#')
    cmdline = NOLINE;   /* invalidate current command line number */

I don’t know what the condition was for.  I can only imagine that it
seemed logical to skip the setting of cmdline if it appeared to be
something on the same line (e.g., if($foo){bar()} as opposed to
if($foo){<newline>...}).  Clearly that doesn’t work for ‘else{foo()}’
because we end up giving that statement the line number where the
‘if’ occurs.  (cmdline/PL_copline is for remembering the first line of
a multi-line construct.)
t/comp/parser.t
t/op/runlevel.t
toke.c