1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merge revision(s) 50182,50183: [Backport #11035]

* hash.c (rb_any_hash): Symbols are compared by the identities
	  always.  [ruby-core:68767] [Bug #11035]

	* test/ruby/test_symbol.rb: fix syntax error.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@50620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2015-05-23 17:02:11 +00:00
parent c758d63138
commit 92e97984c6
4 changed files with 32 additions and 1 deletions

View file

@ -1,3 +1,12 @@
Sun May 24 02:02:00 2015 Koichi Sasada <ko1@atdot.net>
* test/ruby/test_symbol.rb: fix syntax error.
Sun May 24 02:02:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* hash.c (rb_any_hash): Symbols are compared by the identities
always. [ruby-core:68767] [Bug #11035]
Sun May 24 02:01:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* hash.c (rb_any_hash): use same hash values with Float#hash so

3
hash.c
View file

@ -149,6 +149,9 @@ rb_any_hash(VALUE a)
else if (BUILTIN_TYPE(a) == T_STRING) {
hnum = rb_str_hash(a);
}
else if (BUILTIN_TYPE(a) == T_SYMBOL) {
hnum = rb_objid_hash((st_index_t)a);
}
else if (BUILTIN_TYPE(a) == T_FLOAT) {
return rb_dbl_hash(rb_float_value(a));
}

View file

@ -267,4 +267,23 @@ class TestSymbol < Test::Unit::TestCase
200_000.times { |i| i.to_s.to_sym }
end;
end
def test_hash_redefinition
assert_separately([], <<-'end;')
bug11035 = '[ruby-core:68767] [Bug #11035]'
class Symbol
def hash
raise
end
end
h = {}
assert_nothing_raised(RuntimeError, bug11035) {
h[:foo] = 1
}
assert_nothing_raised(RuntimeError, bug11035) {
h['bar'.to_sym] = 2
}
end;
end
end

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.2.3"
#define RUBY_RELEASE_DATE "2015-05-24"
#define RUBY_PATCHLEVEL 116
#define RUBY_PATCHLEVEL 117
#define RUBY_RELEASE_YEAR 2015
#define RUBY_RELEASE_MONTH 5