diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-03-18 01:18:25 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-03-18 01:18:25 +0000 |
commit | d0e25ed277549af21242009e649d93b73c82576c (patch) | |
tree | e66a4bf6c293e5a52af2c21eaa58d840bfb4958d /parse.y | |
parent | 4161674b2fbea6bdd01783ac5d3b39d88db22972 (diff) | |
download | ruby-d0e25ed277549af21242009e649d93b73c82576c.tar.gz |
parse.y: parser_numbered_param
* parse.y (parser_numbered_param): hoisted out the contextual
check for numbered parameters.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 26 |
1 files changed, 17 insertions, 9 deletions
@@ -7629,6 +7629,22 @@ parse_gvar(struct parser_params *p, const enum lex_state_e last_state) return tGVAR; } +static bool +parser_numbered_param(struct parser_params *p, unsigned long n) +{ + if (DVARS_TERMINAL_P(p->lvtbl->args) || DVARS_TERMINAL_P(p->lvtbl->args->prev)) { + compile_error(p, "numbered parameter outside block"); + return false; + } + if (p->max_numparam < 0) { + compile_error(p, "ordinary parameter is defined"); + return false; + } + set_yylval_num((int)n); + SET_LEX_STATE(EXPR_ARG); + return true; +} + static enum yytokentype parse_atmark(struct parser_params *p, const enum lex_state_e last_state) { @@ -7671,15 +7687,7 @@ parse_atmark(struct parser_params *p, const enum lex_state_e last_state) else if (overflow || n > NUMPARAM_MAX) { compile_error(p, "too large numbered parameter"); } - else if (DVARS_TERMINAL_P(p->lvtbl->args) || DVARS_TERMINAL_P(p->lvtbl->args->prev)) { - compile_error(p, "numbered parameter outside block"); - } - else if (p->max_numparam < 0) { - compile_error(p, "ordinary parameter is defined"); - } - else { - set_yylval_num((int)n); - SET_LEX_STATE(EXPR_ARG); + else if (parser_numbered_param(p, n)) { return tNUMPARAM; } } |