8000 parse.y: parser_numbered_param · jruby/ruby@d0e25ed · GitHub
[go: up one dir, main page]

Skip to content

Commit d0e25ed

Browse files
committed
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
1 parent 4161674 commit d0e25ed

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

parse.y

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7629,6 +7629,22 @@ parse_gvar(struct parser_params *p, const enum lex_state_e last_state)
76297629
return tGVAR;
76307630
}
76317631

7632+
static bool
7633+
parser_numbered_param(struct parser_params *p, unsigned long n)
7634+
{
7635+
if (DVARS_TERMINAL_P(p->lvtbl->args) || DVARS_TERMINAL_P(p->lvtbl->args->prev)) {
7636+
compile_error(p, "numbered parameter outside block");
7637+
return false;
7638+
}
7639+
if (p->max_numparam < 0) {
7640+
compile_error(p, "ordinary parameter is defined");
7641+
return false;
7642+
}
7643+
set_yylval_num((int)n);
7644+
SET_LEX_STATE(EXPR_ARG);
7645+
return true;
7646+
}
7647+
76327648
static enum yytokentype
76337649
parse_atmark(struct parser_params *p, const enum lex_state_e last_state)
76347650
{
@@ -7671,15 +7687,7 @@ parse_atmark(struct parser_params *p, const enum lex_state_e last_state)
76717687
else if (overflow || n > NUMPARAM_MAX) {
76727688
compile_error(p, "too large numbered parameter");
76737689
}
7674-
else if (DVARS_TERMINAL_P(p->lvtbl->args) || DVARS_TERMINAL_P(p->lvtbl->args->prev)) {
7675-
compile_error(p, "numbered parameter outside block");
7676-
}
7677-
else if (p->max_numparam < 0) {
7678-
compile_error(p, "ordinary parameter is defined");
7679-
}
7680-
else {
7681-
set_yylval_num((int)n);
7682-
SET_LEX_STATE(EXPR_ARG);
7690+
else if (parser_numbered_param(p, n)) {
76837691
return tNUMPARAM;
76847692
}
76857693
}

0 commit comments

Comments
 (0)
0