This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
parser: change LABEL type from pval to opval
authorDavid Mitchell <davem@iabyn.com>
Fri, 5 Apr 2019 11:49:50 +0000 (12:49 +0100)
committerDavid Mitchell <davem@iabyn.com>
Fri, 5 Apr 2019 13:02:09 +0000 (14:02 +0100)
commit017192018b7f9fc4b889bb344bd75df8f6b78929
treec7c3f0039797e09b8571be51a39dcb3ace30e0a0
parent2b902307c53477ab56cb732ac14b1e3371aed097
parser: change LABEL type from pval to opval

The items pushed onto the parser stack can be one of several types:
ival, opval, pval etc. The only remaining use of pval is when a "label:"
is encountered.

When an error occurs during parsing, ops on the parse stack get
automatically reaped these days as part of the OP slab mechanism;
but bare strings (pvals) still leak.

Convert this one remaining pval into an opval, making the toker return
an OP_CONST with an SV holding the label.

Since newSTATEOP() still expects a raw string for the label, the parser
just grabs the value returned by the toker and makes a copy of the
string from it, then immediately frees the OP_CONST and its associated
SV.

The leak was showing up in ext/XS-APItest/t/stmtasexpr.t, which expects
to parse a statement where labels are banned.
perly.act
perly.h
perly.tab
perly.y
toke.c