diff options
author | David Mitchell <davem@iabyn.com> | 2016-08-18 09:53:11 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2016-08-18 18:55:09 +0100 |
commit | 49fb862041f1f74fafbc91afa553624c43078261 (patch) | |
tree | 8cd973987dc238b0111a66e1232286ebde339f5e /perly.y | |
parent | 0cf18b74ec1005ca929e64dd9158674d5163ff0a (diff) | |
download | perl-49fb862041f1f74fafbc91afa553624c43078261.tar.gz |
signatures: eliminate XSIGVAR, add KEY_sigvar
When I moved subroutine signature processing into perly.y with
v5.25.3-101-gd3d9da4, I added a new lexer PL_expect state, XSIGVAR.
This indicated, when about to parse a variable, that it was a signature
element rather than a my variable; in particular, it makes ($,...)
be toked as the lone sigil '$' rather than the punctuation variable '$,'.
However this is a bit heavy-handled; so instead this commit adds a
new allowed pseudo-keyword value to PL_in_my: as well as KEY_my, KEY_our and
KEY_state, it can now be KEY_sigvar. This is a less intrusive change
to the lexer.
Diffstat (limited to 'perly.y')
-rw-r--r-- | perly.y | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -638,10 +638,10 @@ myattrlist: COLONATTR THING */ /* the '' or 'foo' part of a '$' or '@foo' etc signature variable */ -sigvarname: /* NULL */ - { $$ = (OP*)NULL; } +sigvarname: /* NULL */ + { parser->in_my = 0; $$ = (OP*)NULL; } | PRIVATEREF - { $$ = $1; } + { parser->in_my = 0; $$ = $1; } ; sigslurpsigil: @@ -746,9 +746,9 @@ sigscalarelem: /* subroutine signature element: e.g. '$x = $default' or '%h' */ sigelem: sigscalarelem - { parser->expect = XSIGVAR; $$ = $1; } + { parser->in_my = KEY_sigvar; $$ = $1; } | sigslurpelem - { parser->expect = XSIGVAR; $$ = $1; } + { parser->in_my = KEY_sigvar; $$ = $1; } ; /* list of subroutine signature elements */ @@ -779,7 +779,7 @@ subsignature: '(' parser->sig_elems = 0; parser->sig_optelems = 0; parser->sig_slurpy = 0; - parser->expect = XSIGVAR; + parser->in_my = KEY_sigvar; } siglistornull ')' @@ -811,6 +811,7 @@ subsignature: '(' sigops, newSTATEOP(0, NULL, NULL)); + parser->in_my = 0; parser->expect = XATTRBLOCK; LEAVE; } |