kwrest arg name

* compile.c (iseq_set_arguments_keywords): make keyword rest
  argument name nd_vid consistently, regardless of whether other
  keyword arguments are present.  [Fix GH-1529]

* parse.y (new_args_tail_gen): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-02-27 13:52:07 +00:00
parent e32c5b6faa
commit 9b1f2b073f
2 changed files with 5 additions and 5 deletions

View File

@ -1307,7 +1307,7 @@ iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs,
iseq->body->param.flags.has_kw = TRUE; iseq->body->param.flags.has_kw = TRUE;
iseq->body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); iseq->body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1);
keyword->bits_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid); keyword->bits_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_cflag);
while (node) { while (node) {
NODE *val_node = node->nd_body->nd_value; NODE *val_node = node->nd_body->nd_value;
@ -1346,8 +1346,8 @@ iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs,
keyword->num = kw; keyword->num = kw;
if (args->kw_rest_arg->nd_cflag != 0) { if (args->kw_rest_arg->nd_vid != 0) {
keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_cflag); keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
iseq->body->param.flags.has_kwrest = TRUE; iseq->body->param.flags.has_kwrest = TRUE;
} }
keyword->required_num = rkw; keyword->required_num = rkw;

View File

@ -9920,8 +9920,8 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
if (kr) arg_var(kr); if (kr) arg_var(kr);
if (b) arg_var(b); if (b) arg_var(b);
args->kw_rest_arg = NEW_DVAR(kw_bits); args->kw_rest_arg = NEW_DVAR(kr);
args->kw_rest_arg->nd_cflag = kr; args->kw_rest_arg->nd_cflag = kw_bits;
} }
else if (kr) { else if (kr) {
if (b) vtable_pop(lvtbl->args, 1); /* reorder */ if (b) vtable_pop(lvtbl->args, 1); /* reorder */