* hash.c (rb_hash_aref): skip calling "default" method

if it is not neede for speed-up.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2010-10-15 15:10:17 +00:00
parent efddc4b632
commit 261661517a
2 changed files with 13 additions and 1 deletions

9
hash.c
View file

@ -509,7 +509,14 @@ rb_hash_aref(VALUE hash, VALUE key)
st_data_t val;
if (!RHASH(hash)->ntbl || !st_lookup(RHASH(hash)->ntbl, key, &val)) {
return rb_funcall(hash, id_default, 1, key);
int rb_method_basic_definition_p(VALUE klass, ID id);
if (!FL_TEST(hash, HASH_PROC_DEFAULT) &&
rb_method_basic_definition_p(CLASS_OF(hash), id_default)) {
return RHASH_IFNONE(hash);
}
else {
return rb_funcall(hash, id_default, 1, key);
}
}
return (VALUE)val;
}