summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-12-31 06:27:12 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-12-31 06:27:12 +0000
commitc7cb212820f05695259fd0986a288c4f0ea57a55 (patch)
tree18d0fbd9c7255db50b6d26dc48d67022e8850d61
parent3b53af45843cfda32ae699b4321d874f545e2396 (diff)
merge revision(s) 49041: [Backport #10659]
* parse.y (f_kwrest, new_args_tail_gen): unnamed rest keyword and keywords bits arguments should be unique. since internal IDs depend on the local variable index in the current scope, new ID should be made before popping those vtables. [ruby-core:67157] [Bug #10659] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@49081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--parse.y4
-rw-r--r--test/ruby/test_keyword.rb20
-rw-r--r--version.h2
4 files changed, 32 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a0429eda77..8c0b08b40d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Wed Dec 31 15:26:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (f_kwrest, new_args_tail_gen): unnamed rest keyword and
+ keywords bits arguments should be unique. since internal IDs
+ depend on the local variable index in the current scope, new ID
+ should be made before popping those vtables.
+ [ruby-core:67157] [Bug #10659]
+
Wed Dec 31 14:11:58 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
* ext/tk/lib/tkextlib/tcllib/plotchart.rb: fix to invoke correct function
diff --git a/parse.y b/parse.y
index bfc685a05f..8f1a930f38 100644
--- a/parse.y
+++ b/parse.y
@@ -4829,6 +4829,7 @@ f_kwrest : kwrest_mark tIDENTIFIER
| kwrest_mark
{
$$ = internal_id();
+ arg_var($$);
}
;
@@ -9768,6 +9769,8 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
kwn = kwn->nd_next;
}
+ kw_bits = internal_id();
+ if (kr && is_junk_id(kr)) vtable_pop(lvtbl->args, 1);
vtable_pop(lvtbl->args, vtable_size(required_kw_vars) + vtable_size(kw_vars) + (b != 0));
for (i=0; i<vtable_size(required_kw_vars); i++) arg_var(required_kw_vars->tbl[i]);
@@ -9775,7 +9778,6 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
vtable_free(required_kw_vars);
vtable_free(kw_vars);
- kw_bits = internal_id();
arg_var(kw_bits);
if (kr) arg_var(kr);
if (b) arg_var(b);
diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb
index d24cd5b0fc..82d6407fe3 100644
--- a/test/ruby/test_keyword.rb
+++ b/test/ruby/test_keyword.rb
@@ -539,4 +539,24 @@ class TestKeywordArguments < Test::Unit::TestCase
o.foo {raise "unreachable"}
}
end
+
+ def test_super_with_anon_restkeywords
+ bug10659 = '[ruby-core:67157] [Bug #10659]'
+
+ foo = Class.new do
+ def foo(**h)
+ h
+ end
+ end
+
+ class << (obj = foo.new)
+ def foo(bar: "bar", **)
+ super
+ end
+ end
+
+ assert_nothing_raised(TypeError, bug10659) {
+ assert_equal({:bar => "bar"}, obj.foo, bug10659)
+ }
+ end
end
diff --git a/version.h b/version.h
index 1b6bb21f0f..cd27dfd9d5 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.2.0"
#define RUBY_RELEASE_DATE "2014-12-31"
-#define RUBY_PATCHLEVEL 3
+#define RUBY_PATCHLEVEL 4
#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 12