summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-26 06:41:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-26 06:41:34 +0000
commit300ac6c573da40d6320575a2c2693ba7dfe5c42b (patch)
tree3bdba19dcccfb15689e35b883214aa7818c39b35 /hash.c
parentea9961f9be715f16c0cff161918e1253bb8f5248 (diff)
Fix a condition and just call rb_fstring [Feature #15251]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c18
1 files changed, 2 insertions, 16 deletions
diff --git a/hash.c b/hash.c
index 199ad28408..7a8f3f0faf 100644
--- a/hash.c
+++ b/hash.c
@@ -1564,25 +1564,11 @@ hash_aset(st_data_t *key, st_data_t *val, struct update_arg *arg, int existing)
return ST_CONTINUE;
}
-static VALUE
-fstring_key_str(VALUE str)
-{
- st_data_t fstr;
- st_table *tbl = rb_vm_fstring_table();
-
- if (st_lookup(tbl, str, &fstr) && !rb_objspace_garbage_object_p(fstr)) {
- return (VALUE)fstr;
- }
- else {
- return rb_fstring(str);
- }
-}
-
VALUE
rb_hash_key_str(VALUE key)
{
- if (!FL_ANY_RAW(key, FL_TAINT|FL_SINGLETON)) {
- return fstring_key_str(key);
+ if (!RB_FL_ANY_RAW(key, FL_TAINT|FL_EXIVAR) && RBASIC_CLASS(key) == rb_cString) {
+ return rb_fstring(key);
}
else {
return rb_str_new_frozen(key);