summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2013-03-19 10:37:21 +0900
committerMasaki Muranaka <[email protected]>2013-03-19 11:04:21 +0900
commit57e345c7674e726bb1876865e74b756c5c325439 (patch)
tree5898295ba5481551cde4a2ee5194b7bdfec8df86 /src/kernel.c
parent70baae2573f52024e54e460203e5a3d6c28ba963 (diff)
downloadmruby-57e345c7674e726bb1876865e74b756c5c325439.tar.gz
mruby-57e345c7674e726bb1876865e74b756c5c325439.zip
Use mrb_true_or_false_value() / in mrb_f_block_given_p_m().
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 78e5dc1d5..0b8930653 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -219,21 +219,28 @@ mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self)
{
mrb_callinfo *ci = mrb->ci;
mrb_value *bp;
+ mrb_bool given_p;
bp = mrb->stbase + ci->stackidx + 1;
ci--;
- if (ci <= mrb->cibase) return mrb_false_value();
- /* block_given? called within block; check upper scope */
- if (ci->proc->env && ci->proc->env->stack) {
- if (ci->proc->env->stack == mrb->stbase || mrb_nil_p(ci->proc->env->stack[1]))
- return mrb_false_value();
- return mrb_true_value();
+ if (ci <= mrb->cibase) {
+ given_p = 0;
}
- if (ci->argc > 0) {
- bp += ci->argc;
+ else {
+ /* block_given? called within block; check upper scope */
+ if (ci->proc->env && ci->proc->env->stack) {
+ given_p = !(ci->proc->env->stack == mrb->stbase ||
+ mrb_nil_p(ci->proc->env->stack[1]));
+ }
+ else {
+ if (ci->argc > 0) {
+ bp += ci->argc;
+ }
+ given_p = !mrb_nil_p(*bp);
+ }
}
- if (mrb_nil_p(*bp)) return mrb_false_value();
- return mrb_true_value();
+
+ return mrb_true_or_false_value(given_p);
}
/* 15.3.1.3.7 */