summaryrefslogtreecommitdiff
path: root/perly.y
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2016-08-18 09:53:11 +0100
committerDavid Mitchell <davem@iabyn.com>2016-08-18 18:55:09 +0100
commit49fb862041f1f74fafbc91afa553624c43078261 (patch)
tree8cd973987dc238b0111a66e1232286ebde339f5e /perly.y
parent0cf18b74ec1005ca929e64dd9158674d5163ff0a (diff)
downloadperl-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.y13
1 files changed, 7 insertions, 6 deletions
diff --git a/perly.y b/perly.y
index 8f4791ee96..ff14780c9c 100644
--- a/perly.y
+++ b/perly.y
@@ -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;
}