diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-12 05:23:05 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-12 05:23:05 +0900 |
| commit | 88604e39ac9c25ffdad2e3f03be26516fe866038 (patch) | |
| tree | a4a8d0dd85f37e6aad0190465aaa84bbb9d454ce /src | |
| parent | feb9b3debd1ce75795e8eaf31641f2a485ec3e33 (diff) | |
| download | mruby-88604e39ac9c25ffdad2e3f03be26516fe866038.tar.gz mruby-88604e39ac9c25ffdad2e3f03be26516fe866038.zip | |
Hash#[] to call Hash#default
Diffstat (limited to 'src')
| -rw-r--r-- | src/hash.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/hash.c b/src/hash.c index 2ad6a9642..015b2d614 100644 --- a/src/hash.c +++ b/src/hash.c @@ -173,10 +173,8 @@ mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key) /* not found */ if (MRB_RHASH_DEFAULT_P(hash)) { - if (MRB_RHASH_PROCDEFAULT_P(hash)) { - return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); - } - return RHASH_IFNONE(hash); + /* xxx mrb_funcall_tailcall(mrb, hash, "default", 1, key); */ + return mrb_funcall(mrb, hash, "default", 1, key); } return mrb_nil_value(); } @@ -385,13 +383,16 @@ mrb_hash_default(mrb_state *mrb, mrb_value hash) mrb_bool given; mrb_get_args(mrb, "|o?", &key, &given); - if (MRB_RHASH_PROCDEFAULT_P(hash)) { - if (!given) return mrb_nil_value(); - return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); - } - else { - return RHASH_IFNONE(hash); + if (MRB_RHASH_DEFAULT_P(hash)) { + if (MRB_RHASH_PROCDEFAULT_P(hash)) { + if (!given) return mrb_nil_value(); + return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); + } + else { + return RHASH_IFNONE(hash); + } } + return mrb_nil_value(); } /* 15.2.13.4.6 */ |
