diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-12-23 18:07:37 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-12-25 14:44:04 +0900 |
commit | a9f096183170810ac6ce32b20d7810d11a51b5f5 (patch) | |
tree | dbb004a3f8cd5a9269f42bf9ecff5b0f40787aa5 /parse.y | |
parent | b641b7e640b90292e8091348ca05def0a16904a8 (diff) |
[Feature #19370] Prohibit nesting anonymous parameter forwarding
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -15009,6 +15009,8 @@ add_forwarding_args(struct parser_params *p) static void forwarding_arg_check(struct parser_params *p, ID arg, ID all, const char *var) { + bool conflict = false; + struct vtable *vars, *args; vars = p->lvtbl->vars; @@ -15017,6 +15019,7 @@ forwarding_arg_check(struct parser_params *p, ID arg, ID all, const char *var) while (vars && !DVARS_TERMINAL_P(vars->prev)) { vars = vars->prev; args = args->prev; + conflict |= (vtable_included(args, arg) && !(all && vtable_included(args, all))); } bool found = false; @@ -15032,6 +15035,9 @@ forwarding_arg_check(struct parser_params *p, ID arg, ID all, const char *var) if (!found) { compile_error(p, "no anonymous %s parameter", var); } + else if (conflict) { + compile_error(p, "anonymous %s parameter is also used within block", var); + } } #ifndef RIPPER |