diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-10-12 00:26:39 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-10-12 00:40:55 +0900 |
commit | 4ed0c33d13ff0d2544aaf36e8e4f071b900d10cd (patch) | |
tree | de93b6343b6f4b7f7b17483018f0be5000d8db5e /parse.y | |
parent | 27b48089e2bdc3b0719e75ae8685a496ef8fa9e3 (diff) |
Prohibit setter method names in all kinds of endless methods
Also unwrap NODE_RIPPER to check the method name.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3649
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -961,6 +961,18 @@ restore_defun(struct parser_params *p, NODE *name) p->ctxt.in_def = c.ctxt.in_def; } +static void +endless_method_name(struct parser_params *p, NODE *defn, const YYLTYPE *loc) +{ +#ifdef RIPPER + defn = defn->nd_defn; +#endif + ID mid = defn->nd_mid; + if (is_attrset_id(mid)) { + yyerror1(loc, "setter method cannot be defined in an endless method definition"); + } +} + #ifndef RIPPER # define Qnone 0 # define Qnull 0 @@ -2477,9 +2489,7 @@ arg : lhs '=' arg_rhs } | defn_head f_paren_args '=' arg { - if (is_attrset_id($<node>1->nd_mid)) { - yyerror1(&@1, "setter method cannot be defined in an endless method definition"); - } + endless_method_name(p, $<node>1, &@1); token_info_drop(p, "def", @1.beg_pos); restore_defun(p, $<node>1->nd_defn); /*%%%*/ @@ -2490,6 +2500,7 @@ arg : lhs '=' arg_rhs } | defn_head f_paren_args '=' arg modifier_rescue arg { + endless_method_name(p, $<node>1, &@1); token_info_drop(p, "def", @1.beg_pos); restore_defun(p, $<node>1->nd_defn); /*%%%*/ @@ -2501,6 +2512,7 @@ arg : lhs '=' arg_rhs } | defs_head f_paren_args '=' arg { + endless_method_name(p, $<node>1, &@1); restore_defun(p, $<node>1->nd_defn); /*%%%*/ $$ = set_defun_body(p, $1, $2, $4, &@$); @@ -2512,6 +2524,7 @@ arg : lhs '=' arg_rhs } | defs_head f_paren_args '=' arg modifier_rescue arg { + endless_method_name(p, $<node>1, &@1); restore_defun(p, $<node>1->nd_defn); /*%%%*/ $4 = rescued_expr(p, $4, $6, &@4, &@5, &@6); |