summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/class.c6
-rw-r--r--src/gc.c2
-rw-r--r--src/kernel.c10
-rw-r--r--src/object.c12
-rw-r--r--src/range.c2
-rw-r--r--src/vm.c19
6 files changed, 25 insertions, 26 deletions
diff --git a/src/class.c b/src/class.c
index ed0aeb45b..c2d17e2fc 100644
--- a/src/class.c
+++ b/src/class.c
@@ -377,7 +377,7 @@ to_hash(mrb_state *mrb, mrb_value val)
a: Array [mrb_value*,mrb_int]
f: Float [mrb_float]
i: Integer [mrb_int]
- b: Binary [int]
+ b: Boolean [mrb_bool]
n: Symbol [mrb_sym]
&: Block [mrb_value]
*: rest argument [mrb_value*,int]
@@ -579,7 +579,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
break;
case 'b':
{
- int *boolp = va_arg(ap, int*);
+ mrb_bool *boolp = va_arg(ap, mrb_bool*);
if (i < argc) {
mrb_value b = *sp++;
@@ -864,7 +864,7 @@ static mrb_value
mrb_mod_instance_methods(mrb_state *mrb, mrb_value mod)
{
struct RClass *c = mrb_class_ptr(mod);
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return class_instance_method_list(mrb, recur, c, 0);
}
diff --git a/src/gc.c b/src/gc.c
index 07bc23b12..0f939d8d6 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1135,7 +1135,7 @@ gc_generational_mode_get(mrb_state *mrb, mrb_value self)
static mrb_value
gc_generational_mode_set(mrb_state *mrb, mrb_value self)
{
- int enable;
+ mrb_bool enable;
mrb_get_args(mrb, "b", &enable);
if (mrb->is_generational_gc_mode != enable)
diff --git a/src/kernel.c b/src/kernel.c
index fc50cad53..5ce5669c3 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -782,7 +782,7 @@ mrb_obj_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj, mrb_method_flag_t
mrb_value
mrb_obj_methods_m(mrb_state *mrb, mrb_value self)
{
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return mrb_obj_methods(mrb, recur, self, (mrb_method_flag_t)0); /* everything but private */
}
@@ -813,7 +813,7 @@ mrb_false(mrb_state *mrb, mrb_value self)
mrb_value
mrb_obj_private_methods(mrb_state *mrb, mrb_value self)
{
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return mrb_obj_methods(mrb, recur, self, NOEX_PRIVATE); /* private attribute not define */
}
@@ -830,7 +830,7 @@ mrb_obj_private_methods(mrb_state *mrb, mrb_value self)
mrb_value
mrb_obj_protected_methods(mrb_state *mrb, mrb_value self)
{
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return mrb_obj_methods(mrb, recur, self, NOEX_PROTECTED); /* protected attribute not define */
}
@@ -847,7 +847,7 @@ mrb_obj_protected_methods(mrb_state *mrb, mrb_value self)
mrb_value
mrb_obj_public_methods(mrb_state *mrb, mrb_value self)
{
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return mrb_obj_methods(mrb, recur, self, NOEX_PUBLIC); /* public attribute not define */
}
@@ -1021,7 +1021,7 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
mrb_value
mrb_obj_singleton_methods_m(mrb_state *mrb, mrb_value self)
{
- int recur = TRUE;
+ mrb_bool recur = TRUE;
mrb_get_args(mrb, "|b", &recur);
return mrb_obj_singleton_methods(mrb, recur, self);
}
diff --git a/src/object.c b/src/object.c
index 23786e859..39a8825d2 100644
--- a/src/object.c
+++ b/src/object.c
@@ -111,7 +111,7 @@ nil_inspect(mrb_state *mrb, mrb_value obj)
static mrb_value
true_and(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
@@ -131,7 +131,7 @@ true_and(mrb_state *mrb, mrb_value obj)
static mrb_value
true_xor(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
return mrb_bool_value(!obj2);
@@ -171,7 +171,7 @@ true_to_s(mrb_state *mrb, mrb_value obj)
static mrb_value
true_or(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
return mrb_true_value();
@@ -202,7 +202,7 @@ true_or(mrb_state *mrb, mrb_value obj)
static mrb_value
false_and(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
return mrb_false_value();
@@ -224,7 +224,7 @@ false_and(mrb_state *mrb, mrb_value obj)
static mrb_value
false_xor(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
return mrb_bool_value(obj2);
@@ -244,7 +244,7 @@ false_xor(mrb_state *mrb, mrb_value obj)
static mrb_value
false_or(mrb_state *mrb, mrb_value obj)
{
- int obj2;
+ mrb_bool obj2;
mrb_get_args(mrb, "b", &obj2);
return mrb_bool_value(obj2);
diff --git a/src/range.c b/src/range.c
index fb4d975e7..ab72c4826 100644
--- a/src/range.c
+++ b/src/range.c
@@ -120,7 +120,7 @@ mrb_value
mrb_range_initialize(mrb_state *mrb, mrb_value range)
{
mrb_value beg, end;
- int exclusive;
+ mrb_bool exclusive;
int n;
n = mrb_get_args(mrb, "oo|b", &beg, &end, &exclusive);
diff --git a/src/vm.c b/src/vm.c
index fb1a4dde2..ea3b38adf 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -237,6 +237,7 @@ ecall(mrb_state *mrb, int i)
struct RObject *exc;
p = mrb->ensure[i];
+ if (!p) return;
ci = cipush(mrb);
ci->stackidx = mrb->stack - mrb->stbase;
ci->mid = ci[-1].mid;
@@ -248,6 +249,7 @@ ecall(mrb_state *mrb, int i)
mrb->stack = mrb->stack + ci[-1].nregs;
exc = mrb->exc; mrb->exc = 0;
mrb_run(mrb, p, *self);
+ mrb->ensure[i] = NULL;
if (!mrb->exc) mrb->exc = exc;
}
@@ -1216,6 +1218,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if (ci->ridx == 0) goto L_STOP;
goto L_RESCUE;
}
+ while (eidx > ci[-1].eidx) {
+ ecall(mrb, --eidx);
+ }
while (ci[0].ridx == ci[-1].ridx) {
cipop(mrb);
ci = mrb->ci;
@@ -1224,7 +1229,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
mrb->jmp = prev_jmp;
longjmp(*(jmp_buf*)mrb->jmp, 1);
}
- while (eidx > mrb->ci->eidx) {
+ while (eidx > ci->eidx) {
ecall(mrb, --eidx);
}
if (ci == mrb->cibase) {
@@ -1283,19 +1288,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* cannot happen */
break;
}
+ while (eidx > mrb->ci[-1].eidx) {
+ ecall(mrb, --eidx);
+ }
cipop(mrb);
acc = ci->acc;
pc = ci->pc;
regs = mrb->stack = mrb->stbase + ci->stackidx;
- {
- int idx = eidx;
- while (idx > mrb->ci->eidx) {
- mrb_gc_protect(mrb, mrb_obj_value(mrb->ensure[--idx]));
- }
- }
- while (eidx > mrb->ci->eidx) {
- ecall(mrb, --eidx);
- }
if (acc < 0) {
mrb->jmp = prev_jmp;
return v;