lib/ruby30_parser.y in ruby_parser-3.20.2 vs lib/ruby30_parser.y in ruby_parser-3.20.3
- old
+ new
@@ -390,10 +390,11 @@
result = name
}
defs_head: k_def singleton dot_or_colon
{
lexer.lex_state = EXPR_FNAME
+ self.in_argdef = true
}
def_name
{
lexer.lex_state = EXPR_ENDFN|EXPR_LABEL
self.in_single += 1 # TODO: remove?
@@ -1586,10 +1587,11 @@
self.comments.push self.lexer.comments
}
k_def: kDEF
{
self.comments.push self.lexer.comments
+ self.in_argdef = true
}
k_do: kDO
k_do_block: kDO_BLOCK
k_rescue: kRESCUE
k_ensure: kENSURE
@@ -1804,10 +1806,11 @@
block_param_def: tPIPE opt_bv_decl tPIPE
{
# TODO: current_arg = 0
result = args val
+ self.in_argdef = false
}
| tOROP
{
(_, line), = val
@@ -1815,10 +1818,11 @@
}
| tPIPE block_param opt_bv_decl tPIPE
{
# TODO: current_arg = 0
result = args val
+ self.in_argdef = false
}
opt_bv_decl: opt_nl
| opt_nl tSEMI bv_decls opt_nl
{
@@ -1864,14 +1868,16 @@
self.env.unextend # TODO: dynapush & dynapop
}
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
{
+ self.in_argdef = false
result = args val
}
| f_args
{
+ self.in_argdef = false
result = val[0]
result = 0 if result == s(:args)
}
lambda_body: tLAMBEG compstmt tRCURLY
@@ -3025,15 +3031,17 @@
}
f_opt_paren_args: f_paren_args
| none
{
+ self.in_argdef = false
result = end_args val
}
f_paren_args: tLPAREN2 f_args rparen
{
+ self.in_argdef = false
result = end_args val
}
| tLPAREN2 f_arg tCOMMA args_forward rparen
{
result = end_args val
@@ -3045,14 +3053,16 @@
f_arglist: f_paren_args
| {
result = self.in_kwarg
self.in_kwarg = true
+ self.in_argdef = true
self.lexer.lex_state |= EXPR_LABEL
}
f_args term
{
+ self.in_argdef = false
result = end_args val
}
args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
{
@@ -3204,47 +3214,59 @@
result << item
result.line_max = line_max
}
f_label: tLABEL
+ {
+ label, = val
+ # arg_var(p, formal_argument(p, $1));
+ # p->cur_arg = get_id($1);
+ # p->max_numparam = ORDINAL_PARAM;
+ self.in_argdef = false
+ result = label
+ }
f_kw: f_label arg_value
{
# TODO: new_kw_arg
(label, line), arg = val
identifier = label.to_sym
self.env[identifier] = :lvar
+ self.in_argdef = true
kwarg = s(:kwarg, identifier, arg).line line
result = s(:array, kwarg).line line
}
| f_label
{
(label, line), = val
id = label.to_sym
self.env[id] = :lvar
+ self.in_argdef = true
result = s(:array, s(:kwarg, id).line(line)).line line
}
f_block_kw: f_label primary_value
{
# TODO: new_kw_arg
(label, line), expr = val
id = label.to_sym
self.env[id] = :lvar
+ self.in_argdef = true
result = s(:array, s(:kwarg, id, expr).line(line)).line line
}
| f_label
{
# TODO: new_kw_arg
(label, line), = val
id = label.to_sym
self.env[id] = :lvar
+ self.in_argdef = true
result = s(:array, s(:kwarg, id).line(line)).line line
}
f_block_kwarg: f_block_kw
@@ -3288,23 +3310,23 @@
f_opt: f_arg_asgn
tEQL
arg_value
{
lhs, _, rhs = val
+ self.in_argdef = true
result = self.assignable lhs, rhs
# TODO: detect duplicate names
# TODO? p->cur_arg = 0;
- # TODO? p->ctxt.in_argdef = 1;
}
f_block_opt: f_arg_asgn
tEQL
primary_value
{
lhs, _, rhs = val
+ self.in_argdef = true
result = self.assignable lhs, rhs
# TODO? p->cur_arg = 0;
- # TODO? p->ctxt.in_argdef = 1;
}
f_block_optarg: f_block_opt
{
optblk, = val