mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
parser: support numbered parameters when used as a singleton
This commit is contained in:
@@ -2674,10 +2674,6 @@ primary : literal
|
||||
| heredoc
|
||||
| var_ref
|
||||
| backref
|
||||
| tNUMPARAM
|
||||
{
|
||||
$$ = new_nvar(p, $1);
|
||||
}
|
||||
| tFID
|
||||
{
|
||||
$$ = new_fcall(p, $1, 0);
|
||||
@@ -3491,6 +3487,11 @@ symbol : basic_symbol
|
||||
}
|
||||
$$ = new_dsym(p, new_dstr(p, n));
|
||||
}
|
||||
| tSYMBEG tNUMPARAM
|
||||
{
|
||||
mrb_sym sym = intern_numparam($2);
|
||||
$$ = new_sym(p, sym);
|
||||
}
|
||||
;
|
||||
|
||||
basic_symbol : tSYMBEG sym
|
||||
@@ -3576,6 +3577,10 @@ var_ref : variable
|
||||
{
|
||||
$$ = var_reference(p, $1);
|
||||
}
|
||||
| tNUMPARAM
|
||||
{
|
||||
$$ = new_nvar(p, $1);
|
||||
}
|
||||
| keyword_nil
|
||||
{
|
||||
$$ = new_nil(p);
|
||||
@@ -6435,7 +6440,7 @@ parser_yylex(parser_state *p)
|
||||
break;
|
||||
|
||||
case '_':
|
||||
if (p->lstate != EXPR_FNAME && toklen(p) == 2 && ISDIGIT(tok(p)[1]) && p->nvars) {
|
||||
if (toklen(p) == 2 && ISDIGIT(tok(p)[1]) && p->nvars) {
|
||||
int n = tok(p)[1] - '0';
|
||||
int nvar;
|
||||
|
||||
|
||||
@@ -718,6 +718,16 @@ assert('_0 is not numbered parameter') do
|
||||
assert_equal(:l, ->{_0}.call)
|
||||
end
|
||||
|
||||
assert('numbered parameters in symbol name (https://github.com/mruby/mruby/issues/5295)') do
|
||||
assert_equal([:_1], Array.new(1) {:_1})
|
||||
end
|
||||
|
||||
assert('numbered parameters as singleton') do
|
||||
o = Object.new
|
||||
lambda { def _1.a(b) = "a#{b}" }.call(o)
|
||||
assert_equal('ab', o.a('b'))
|
||||
end
|
||||
|
||||
assert('argument forwarding') do
|
||||
c = Class.new {
|
||||
def a0(*a,&b)
|
||||
|
||||
Reference in New Issue
Block a user