diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | parse.y | 4 | ||||
-rw-r--r-- | test/ruby/test_keyword.rb | 20 | ||||
-rw-r--r-- | version.h | 2 |
4 files changed, 32 insertions, 2 deletions
@@ -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 @@ -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 @@ -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 |