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