mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
hash.c: compare symbols by identities
* hash.c (rb_any_hash): Symbols are compared by the identities always. [ruby-core:68767] [Bug #11035] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ad470f1c38
commit
622193d32a
3 changed files with 27 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
Wed Apr 8 13:01:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* hash.c (rb_any_hash): Symbols are compared by the identities
|
||||
always. [ruby-core:68767] [Bug #11035]
|
||||
|
||||
Tue Apr 7 10:22:51 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
|
||||
|
||||
* internal.h: fix typo. Patch by @sferik [fix GH-865]
|
||||
|
|
3
hash.c
3
hash.c
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -238,4 +238,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
|
||||
|
|
Loading…
Add table
Reference in a new issue