parse.y: prohibit numbered parameters as arguments; fix #5605

parent e6b64139
...@@ -2751,6 +2751,7 @@ primary : literal ...@@ -2751,6 +2751,7 @@ primary : literal
| tLAMBDA | tLAMBDA
{ {
local_nest(p); local_nest(p);
nvars_nest(p);
$<num>$ = p->lpar_beg; $<num>$ = p->lpar_beg;
p->lpar_beg = ++p->paren_nest; p->lpar_beg = ++p->paren_nest;
} }
...@@ -2764,6 +2765,7 @@ primary : literal ...@@ -2764,6 +2765,7 @@ primary : literal
p->lpar_beg = $<num>2; p->lpar_beg = $<num>2;
$$ = new_lambda(p, $3, $5); $$ = new_lambda(p, $3, $5);
local_unnest(p); local_unnest(p);
nvars_unnest(p);
p->cmdarg_stack = $<stack>4; p->cmdarg_stack = $<stack>4;
CMDARG_LEXPOP(); CMDARG_LEXPOP();
} }
...@@ -6426,15 +6428,10 @@ parser_yylex(parser_state *p) ...@@ -6426,15 +6428,10 @@ parser_yylex(parser_state *p)
if (nvar == -1) { if (nvar == -1) {
yywarning(p, "numbered parameter used in inner block"); yywarning(p, "numbered parameter used in inner block");
} }
if (nvar >= -1) {
pylval.num = n; pylval.num = n;
p->lstate = EXPR_END; p->lstate = EXPR_END;
return tNUMPARAM; return tNUMPARAM;
} }
else {
yywarning(p, "identifier for numbered parameter; consider another name");
}
}
} }
/* fall through */ /* fall through */
default: default:
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment