ruby-changes:55013
From: naruse <ko1@a...>
Date: Mon, 11 Mar 2019 21:57:44 +0900 (JST)
Subject: [ruby-changes:55013] naruse:r67220 (ruby_2_6): merge revision(s) 67217: [Backport #15658]
naruse 2019-03-11 21:57:34 +0900 (Mon, 11 Mar 2019) New Revision: 67220 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=67220 Log: merge revision(s) 67217: [Backport #15658] The combination of non-Symbol keys and Symbol keys is now allowed again Revert r64358. [Bug #15658] Modified directories: branches/ruby_2_6/ Modified files: branches/ruby_2_6/NEWS branches/ruby_2_6/class.c branches/ruby_2_6/spec/ruby/language/block_spec.rb branches/ruby_2_6/spec/ruby/language/method_spec.rb branches/ruby_2_6/test/-ext-/test_scan_args.rb branches/ruby_2_6/version.h Index: ruby_2_6/version.h =================================================================== --- ruby_2_6/version.h (revision 67219) +++ ruby_2_6/version.h (revision 67220) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_6/version.h#L1 #define RUBY_VERSION "2.6.1" #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 44 +#define RUBY_PATCHLEVEL 45 #define RUBY_RELEASE_YEAR 2019 #define RUBY_RELEASE_MONTH 3 Index: ruby_2_6/spec/ruby/language/block_spec.rb =================================================================== --- ruby_2_6/spec/ruby/language/block_spec.rb (revision 67219) +++ ruby_2_6/spec/ruby/language/block_spec.rb (revision 67220) @@ -49,7 +49,20 @@ describe "A block yielded a single" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/block_spec.rb#L49 result.should == [1, 2, [], 3, 2, {x: 9}] end - it "calls #to_hash on the argument" do + it "assigns symbol keys from a Hash to keyword arguments" do + result = m(["a" => 1, a: 10]) { |a=nil, **b| [a, b] } + result.should == [{"a" => 1}, a: 10] + end + + it "assigns symbol keys from a Hash returned by #to_hash to keyword arguments" do + obj = mock("coerce block keyword arguments") + obj.should_receive(:to_hash).and_return({"a" => 1, b: 2}) + + result = m([obj]) { |a=nil, **b| [a, b] } + result.should == [{"a" => 1}, b: 2] + end + + it "calls #to_hash on the argument but does not use the result when no keywords are present" do obj = mock("coerce block keyword arguments") obj.should_receive(:to_hash).and_return({"a" => 1, "b" => 2}) @@ -58,17 +71,9 @@ describe "A block yielded a single" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/block_spec.rb#L71 end describe "when non-symbol keys are in a keyword arguments Hash" do - ruby_version_is ""..."2.6" do - it "separates non-symbol keys and symbol keys" do - result = m(["a" => 10, b: 2]) { |a=nil, **b| [a, b] } - result.should == [{"a" => 10}, {b: 2}] - end - end - - ruby_version_is "2.6" do - it "raises an ArgumentError" do - lambda {m(["a" => 1, a: 10]) { |a=nil, **b| [a, b] }}.should raise_error(ArgumentError) - end + it "separates non-symbol keys and symbol keys" do + result = m(["a" => 10, b: 2]) { |a=nil, **b| [a, b] } + result.should == [{"a" => 10}, {b: 2}] end end Index: ruby_2_6/spec/ruby/language/method_spec.rb =================================================================== --- ruby_2_6/spec/ruby/language/method_spec.rb (revision 67219) +++ ruby_2_6/spec/ruby/language/method_spec.rb (revision 67220) @@ -849,12 +849,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L849 m(b: 2).should == [1, 2] m(2, b: 1).should == [2, 1] - ruby_version_is ""..."2.6" do - m("a" => 1, b: 2).should == [{"a" => 1}, 2] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, b: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, b: 2).should == [{"a" => 1}, 2] end evaluate <<-ruby do @@ -864,12 +859,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L859 m().should == [1, 2] m(2).should == [2, 2] m(b: 3).should == [1, 3] - ruby_version_is ""..."2.6" do - m("a" => 1, b: 2).should == [{"a" => 1}, 2] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, b: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, b: 2).should == [{"a" => 1}, 2] end evaluate <<-ruby do @@ -878,12 +868,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L868 m().should == 1 m(2, a: 1, b: 0).should == 2 - ruby_version_is ""..."2.6" do - m("a" => 1, a: 2).should == {"a" => 1} - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 2).should == {"a" => 1} end evaluate <<-ruby do @@ -929,12 +914,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L914 m(a: 1).should == 1 m(1, 2, a: 3).should == 3 - ruby_version_is ""..."2.6" do - m("a" => 1, a: 2).should == 2 - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 2).should == 2 end evaluate <<-ruby do @@ -943,12 +923,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L923 m(b: 1).should == [[], 1] m(1, 2, b: 3).should == [[1, 2], 3] - ruby_version_is ""..."2.6" do - m("a" => 1, b: 2).should == [[{"a" => 1}], 2] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, b: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, b: 2).should == [[{"a" => 1}], 2] end evaluate <<-ruby do @@ -959,12 +934,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L934 m(1, 2).should == 1 m(a: 2).should == 2 m(1, a: 2).should == 2 - ruby_version_is ""..."2.6" do - m("a" => 1, a: 2).should == 2 - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 2).should == 2 end evaluate <<-ruby do @@ -973,12 +943,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L943 m().should == [[], 1] m(1, 2, 3, b: 4).should == [[1, 2, 3], 4] - ruby_version_is ""..."2.6" do - m("a" => 1, b: 2).should == [[{"a" => 1}], 2] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, b: 2)}.should raise_error(ArgumentError) - end + m("a" => 1, b: 2).should == [[{"a" => 1}], 2] a = mock("splat") a.should_not_receive(:to_ary) @@ -1009,12 +974,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L974 m().should == [] m(1, 2, 3, a: 4, b: 5).should == [1, 2, 3] - ruby_version_is ""..."2.6" do - m("a" => 1, a: 1).should == [{"a" => 1}] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 1)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 1).should == [{"a" => 1}] m(1, **{a: 2}).should == [1] h = mock("keyword splat") @@ -1028,12 +988,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L988 m().should == {} m(1, 2, 3, a: 4, b: 5).should == {a: 4, b: 5} - ruby_version_is ""..."2.6" do - m("a" => 1, a: 1).should == {a: 1} - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 1)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 1).should == {a: 1} h = mock("keyword splat") h.should_receive(:to_hash).and_return({a: 1}) @@ -1047,22 +1002,12 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L1002 m().should == [nil, {}] m("a" => 1).should == [{"a" => 1}, {}] m(a: 1).should == [nil, {a: 1}] - ruby_version_is ""..."2.6" do - m("a" => 1, a: 1).should == [{"a" => 1}, {a: 1}] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 1)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 1).should == [{"a" => 1}, {a: 1}] m({ "a" => 1 }, a: 1).should == [{"a" => 1}, {a: 1}] m({a: 1}, {}).should == [{a: 1}, {}] h = {"a" => 1, b: 2} - ruby_version_is ""..."2.6" do - m(h).should == [{"a" => 1}, {b: 2}] - end - ruby_version_is "2.6" do - lambda {m(h)}.should raise_error(ArgumentError) - end + m(h).should == [{"a" => 1}, {b: 2}] h.should == {"a" => 1, b: 2} h = {"a" => 1} @@ -1082,12 +1027,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L1027 h = mock("keyword splat") h.should_receive(:to_hash).and_return({"a" => 1, a: 2}) - ruby_version_is ""..."2.6" do - m(h).should == [{"a" => 1}, {a: 2}] - end - ruby_version_is "2.6" do - lambda {m(h)}.should raise_error(ArgumentError) - end + m(h).should == [{"a" => 1}, {a: 2}] end evaluate <<-ruby do @@ -1101,12 +1041,7 @@ describe "A method" do https://github.com/ruby/ruby/blob/trunk/ruby_2_6/spec/ruby/language/method_spec.rb#L1041 m("a" => 1).should == [[{"a" => 1}], {}] m(a: 1).should == [[], {a: 1}] - ruby_version_is ""..."2.6" do - m("a" => 1, a: 1).should == [[{"a" => 1}], {a: 1}] - end - ruby_version_is "2.6" do - lambda {m("a" => 1, a: 1)}.should raise_error(ArgumentError) - end + m("a" => 1, a: 1).should == [[{"a" => 1}], {a: 1}] m({ "a" => 1 }, a: 1).should == [[{"a" => 1}], {a: 1}] m({a: 1}, {}).should == [[{a: 1}], {}] m({a: 1}, {"a" => 1}).should == [[{a: 1}, {"a" => 1}], {}] Index: ruby_2_6/NEWS =================================================================== --- ruby_2_6/NEWS (revision 67219) +++ ruby_2_6/NEWS (revision 67220) @@ -35,8 +35,6 @@ sufficient information, see the ChangeLo https://github.com/ruby/ruby/blob/trunk/ruby_2_6/NEWS#L35 (1...).each {|index| block } # infinite loop from index 1 ary.zip(1..) {|elem, index| block } # ary.each.with_index(1) { } -* Non-Symbol keys in a keyword arguments hash cause an exception. - * The "shadowing outer local variable" warning is removed. [Feature #12490] You can now write the following without warning: @@ -48,6 +46,9 @@ sufficient information, see the ChangeLo https://github.com/ruby/ruby/blob/trunk/ruby_2_6/NEWS#L46 * The flip-flop syntax is deprecated. [Feature #5400] +* Non-Symbol keys in a keyword arguments hash was prohibited at 2.6.0, but + now allowed again. [Bug #15658] + === Core classes updates (outstanding ones only) [Array] @@ -571,6 +572,7 @@ sufficient information, see the ChangeLo https://github.com/ruby/ruby/blob/trunk/ruby_2_6/NEWS#L572 === Stdlib compatibility issues (excluding feature bug fixes) +<<<<<<< .working * These standard libraries have been promoted to default gems. * e2mmap @@ -588,6 +590,13 @@ sufficient information, see the ChangeLo https://github.com/ruby/ruby/blob/trunk/ruby_2_6/NEWS#L590 * thwait * tracer +||||||| .merge-left.r67216 +profile.rb, Profiler__:: + + * Removed from standard library. No one maintains it from Ruby 2.0.0. + +======= +>>>>>>> .merge-right.r67217 [BigDecimal] * The following methods are removed. Index: ruby_2_6/test/-ext-/test_scan_args.rb =================================================================== --- ruby_2_6/test/-ext-/test_scan_args.rb (revision 67219) +++ ruby_2_6/test/-ext-/test_scan_args.rb (revision 67220) @@ -102,7 +102,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L102 assert_equal([0, nil, {b: 1}], Bug::ScanArgs.opt_hash(b: 1)) assert_equal([1, "a", {b: 1}], Bug::ScanArgs.opt_hash("a", b: 1)) assert_raise(ArgumentError) {Bug::ScanArgs.opt_hash("a", "b")} - assert_raise(ArgumentError) {Bug::ScanArgs.opt_hash("a"=>0, b: 1)} + assert_equal([1, {"a"=>0}, {b: 1}], Bug::ScanArgs.opt_hash("a"=>0, b: 1)) end def test_lead_opt_hash @@ -112,7 +112,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L112 assert_equal([2, "a", "b", {c: 1}], Bug::ScanArgs.lead_opt_hash("a", "b", c: 1)) assert_equal([1, {c: 1}, nil, nil], Bug::ScanArgs.lead_opt_hash(c: 1)) assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_hash("a", "b", "c")} - assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_hash("a", "b"=>0, c: 1)} + assert_equal([2, "a", {"b"=>0}, {c: 1}], Bug::ScanArgs.lead_opt_hash("a", "b"=>0, c: 1)) end def test_var_hash @@ -120,7 +120,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L120 assert_equal([1, ["a"], nil], Bug::ScanArgs.var_hash("a")) assert_equal([1, ["a"], {b: 1}], Bug::ScanArgs.var_hash("a", b: 1)) assert_equal([0, [], {b: 1}], Bug::ScanArgs.var_hash(b: 1)) - assert_raise(ArgumentError) {Bug::ScanArgs.var_hash("a"=>0, b: 1)} + assert_equal([1, [{"a"=>0}], {b: 1}], Bug::ScanArgs.var_hash("a"=>0, b: 1)) end def test_lead_var_hash @@ -131,7 +131,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L131 assert_equal([1, "a", [], {c: 1}], Bug::ScanArgs.lead_var_hash("a", c: 1)) assert_equal([1, {c: 1}, [], nil], Bug::ScanArgs.lead_var_hash(c: 1)) assert_equal([3, "a", ["b", "c"], nil], Bug::ScanArgs.lead_var_hash("a", "b", "c")) - assert_raise(ArgumentError) {Bug::ScanArgs.lead_var_hash("a", "b"=>0, c: 1)} + assert_equal([2, "a", [{"b"=>0}], {c: 1}], Bug::ScanArgs.lead_var_hash("a", "b"=>0, c: 1)) end def test_opt_var_hash @@ -142,7 +142,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L142 assert_equal([1, "a", [], {c: 1}], Bug::ScanArgs.opt_var_hash("a", c: 1)) assert_equal([0, nil, [], {c: 1}], Bug::ScanArgs.opt_var_hash(c: 1)) assert_equal([3, "a", ["b", "c"], nil], Bug::ScanArgs.opt_var_hash("a", "b", "c")) - assert_raise(ArgumentError) {Bug::ScanArgs.opt_var_hash("a", "b"=>0, c: 1)} + assert_equal([2, "a", [{"b"=>0}], {c: 1}], Bug::ScanArgs.opt_var_hash("a", "b"=>0, c: 1)) end def test_lead_opt_var_hash @@ -154,7 +154,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L154 assert_equal([1, {c: 1}, nil, [], nil], Bug::ScanArgs.lead_opt_var_hash(c: 1)) assert_equal([3, "a", "b", ["c"], nil], Bug::ScanArgs.lead_opt_var_hash("a", "b", "c")) assert_equal([3, "a", "b", ["c"], {d: 1}], Bug::ScanArgs.lead_opt_var_hash("a", "b", "c", d: 1)) - assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_var_hash("a", "b", "c"=>0, d: 1)} + assert_equal([3, "a", "b", [{"c"=>0}], {d: 1}], Bug::ScanArgs.lead_opt_var_hash("a", "b", "c"=>0, d: 1)) end def test_opt_trail_hash @@ -165,7 +165,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L165 assert_equal([2, "a", "b", {c: 1}], Bug::ScanArgs.opt_trail_hash("a", "b", c: 1)) assert_equal([1, nil, {c: 1}, nil], Bug::ScanArgs.opt_trail_hash(c: 1)) assert_raise(ArgumentError) {Bug::ScanArgs.opt_trail_hash("a", "b", "c")} - assert_raise(ArgumentError) {Bug::ScanArgs.opt_trail_hash("a", "b"=>0, c: 1)} + assert_equal([2, "a", {"b"=>0}, {c: 1}], Bug::ScanArgs.opt_trail_hash("a", "b"=>0, c: 1)) end def test_lead_opt_trail_hash @@ -178,7 +178,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L178 assert_equal([3, "a", "b", "c", nil], Bug::ScanArgs.lead_opt_trail_hash("a", "b", "c")) assert_equal([3, "a", "b", "c", {c: 1}], Bug::ScanArgs.lead_opt_trail_hash("a", "b", "c", c: 1)) assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_trail_hash("a", "b", "c", "d")} - assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_trail_hash("a", "b", "c"=>0, c: 1)} + assert_equal([3, "a", "b", {"c"=>0}, {c: 1}], Bug::ScanArgs.lead_opt_trail_hash("a", "b", "c"=>0, c: 1)) end def test_var_trail_hash @@ -190,7 +190,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L190 assert_equal([1, [], {c: 1}, nil], Bug::ScanArgs.var_trail_hash(c: 1)) assert_equal([3, ["a", "b"], "c", nil], Bug::ScanArgs.var_trail_hash("a", "b", "c")) assert_equal([3, ["a", "b"], "c", {c: 1}], Bug::ScanArgs.var_trail_hash("a", "b", "c", c: 1)) - assert_raise(ArgumentError) {Bug::ScanArgs.var_trail_hash("a", "b", "c"=>0, c: 1)} + assert_equal([3, ["a", "b"], {"c"=>0}, {c: 1}], Bug::ScanArgs.var_trail_hash("a", "b", "c"=>0, c: 1)) end def test_lead_var_trail_hash @@ -202,7 +202,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L202 assert_equal([2, "a", [], "b", {c: 1}], Bug::ScanArgs.lead_var_trail_hash("a", "b", c: 1)) assert_equal([3, "a", ["b"], "c", nil], Bug::ScanArgs.lead_var_trail_hash("a", "b", "c")) assert_equal([3, "a", ["b"], "c", {c: 1}], Bug::ScanArgs.lead_var_trail_hash("a", "b", "c", c: 1)) - assert_raise(ArgumentError) {Bug::ScanArgs.lead_var_trail_hash("a", "b", c: 1, "c"=>0)} + assert_equal([3, "a", ["b"], {"c"=>0}, {c: 1}], Bug::ScanArgs.lead_var_trail_hash("a", "b", c: 1, "c"=>0)) end def test_opt_var_trail_hash @@ -214,7 +214,7 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L214 assert_equal([2, "a", [], "b", {c: 1}], Bug::ScanArgs.opt_var_trail_hash("a", "b", c: 1)) assert_equal([3, "a", ["b"], "c", nil], Bug::ScanArgs.opt_var_trail_hash("a", "b", "c")) assert_equal([3, "a", ["b"], "c", {c: 1}], Bug::ScanArgs.opt_var_trail_hash("a", "b", "c", c: 1)) - assert_raise(ArgumentError) {Bug::ScanArgs.opt_var_trail_hash("a", "b", "c"=>0, c: 1)} + assert_equal([3, "a", ["b"], {"c"=>0}, {c: 1}], Bug::ScanArgs.opt_var_trail_hash("a", "b", "c"=>0, c: 1)) end def test_lead_opt_var_trail_hash @@ -226,6 +226,6 @@ class TestScanArgs < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_6/test/-ext-/test_scan_args.rb#L226 assert_equal([3, "a", "b", [], "c", nil], Bug::ScanArgs.lead_opt_var_trail_hash("a", "b", "c")) assert_equal([3, "a", "b", [], "c", {c: 1}], Bug::ScanArgs.lead_opt_var_trail_hash("a", "b", "c", c: 1)) assert_equal([4, "a", "b", ["c"], "d", nil], Bug::ScanArgs.lead_opt_var_trail_hash("a", "b", "c", "d")) - assert_raise(ArgumentError) {Bug::ScanArgs.lead_opt_var_trail_hash("a", "b", "c", "d"=>0, c: 1)} + assert_equal([4, "a", "b", ["c"], {"d"=>0}, {c: 1}], Bug::ScanArgs.lead_opt_var_trail_hash("a", "b", "c", "d"=>0, c: 1)) end end Index: ruby_2_6/class.c =================================================================== --- ruby_2_6/class.c (revision 67219) +++ ruby_2_6/class.c (revision 67220) @@ -1801,57 +1801,33 @@ unknown_keyword_error(VALUE hash, const https://github.com/ruby/ruby/blob/trunk/ruby_2_6/class.c#L1801 rb_keyword_error("unknown", rb_hash_keys(hash)); } -struct extract_keywords { - VALUE kwdhash, nonsymkey; -}; static int separate_symbol(st_data_t key, st_data_t value, st_data_t arg) { - struct extract_keywords *argp = (struct extract_keywords *)arg; - VALUE k = (VALUE)key, v = (VALUE)value; - - if (argp->kwdhash) { - if (UNLIKELY(!SYMBOL_P(k))) { - argp->nonsymkey = k; - return ST_STOP; - } - } - else if (SYMBOL_P(k)) { - if (UNLIKELY(argp->nonsymkey != Qundef)) { - argp->kwdhash = Qnil; - return ST_STOP; - } - argp->kwdhash = rb_hash_new(); - } - else { - if (argp->nonsymkey == Qundef) - argp->nonsymkey = k; - return ST_CONTINUE; - } - rb_h (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/