summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-16 16:40:57 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-16 16:40:57 +0000
commit4828fe38d931d3f45ac4078abadfdd140a1fc922 (patch)
tree62e6f2da7d5bd53b00abe953aec6a1125b6a91a3
parenteaba9da1d13fac380fe94f977d7f8d89bd40cde0 (diff)
merge revision(s) 57733,57734: [Backport #13782]
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. fix nd_ainfo->kw_rest_arg [Fix GH-5129] Author: fate0 <fate0@users.noreply.github.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@62444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--compile.c6
-rw-r--r--node.c2
-rw-r--r--parse.y4
-rw-r--r--version.h2
4 files changed, 7 insertions, 7 deletions
diff --git a/compile.c b/compile.c
index 4631f9080b..a9327f5217 100644
--- a/compile.c
+++ b/compile.c
@@ -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.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) {
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;
- if (args->kw_rest_arg->nd_cflag != 0) {
- keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_cflag);
+ if (args->kw_rest_arg->nd_vid != 0) {
+ keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
iseq->body->param.flags.has_kwrest = TRUE;
}
keyword->required_num = rkw;
diff --git a/node.c b/node.c
index 1fe47844da..f09138da35 100644
--- a/node.c
+++ b/node.c
@@ -961,8 +961,8 @@ dump_node(VALUE buf, VALUE indent, int comment, NODE *node)
F_ID(nd_ainfo->rest_arg, "rest argument");
F_ID(nd_ainfo->block_arg, "block argument");
F_NODE(nd_ainfo->opt_args, "optional arguments");
- LAST_NODE;
F_NODE(nd_ainfo->kw_args, "keyword arguments");
+ LAST_NODE;
F_NODE(nd_ainfo->kw_rest_arg, "keyword rest argument");
break;
diff --git a/parse.y b/parse.y
index 8e93219159..3a2cff1941 100644
--- a/parse.y
+++ b/parse.y
@@ -10127,8 +10127,8 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
if (kr) arg_var(kr);
if (b) arg_var(b);
- args->kw_rest_arg = NEW_DVAR(kw_bits);
- args->kw_rest_arg->nd_cflag = kr;
+ args->kw_rest_arg = NEW_DVAR(kr);
+ args->kw_rest_arg->nd_cflag = kw_bits;
}
else if (kr) {
if (b) vtable_pop(lvtbl->args, 1); /* reorder */
diff --git a/version.h b/version.h
index 4ee09f71f0..c9e74f79a6 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.4.4"
#define RUBY_RELEASE_DATE "2018-02-17"
-#define RUBY_PATCHLEVEL 239
+#define RUBY_PATCHLEVEL 240
#define RUBY_RELEASE_YEAR 2018
#define RUBY_RELEASE_MONTH 2