Hash#[] to call Hash#default

parent feb9b3de
...@@ -173,10 +173,8 @@ mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key) ...@@ -173,10 +173,8 @@ mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key)
/* not found */ /* not found */
if (MRB_RHASH_DEFAULT_P(hash)) { if (MRB_RHASH_DEFAULT_P(hash)) {
if (MRB_RHASH_PROCDEFAULT_P(hash)) { /* xxx mrb_funcall_tailcall(mrb, hash, "default", 1, key); */
return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); return mrb_funcall(mrb, hash, "default", 1, key);
}
return RHASH_IFNONE(hash);
} }
return mrb_nil_value(); return mrb_nil_value();
} }
...@@ -385,13 +383,16 @@ mrb_hash_default(mrb_state *mrb, mrb_value hash) ...@@ -385,13 +383,16 @@ mrb_hash_default(mrb_state *mrb, mrb_value hash)
mrb_bool given; mrb_bool given;
mrb_get_args(mrb, "|o?", &key, &given); mrb_get_args(mrb, "|o?", &key, &given);
if (MRB_RHASH_PROCDEFAULT_P(hash)) { if (MRB_RHASH_DEFAULT_P(hash)) {
if (!given) return mrb_nil_value(); if (MRB_RHASH_PROCDEFAULT_P(hash)) {
return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); if (!given) return mrb_nil_value();
} return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key);
else { }
return RHASH_IFNONE(hash); else {
return RHASH_IFNONE(hash);
}
} }
return mrb_nil_value();
} }
/* 15.2.13.4.6 */ /* 15.2.13.4.6 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment