diff options
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 26 |
1 files changed, 16 insertions, 10 deletions
@@ -1,4 +1,4 @@ -/* + /* ** vm.c - virtual machine for mruby ** ** See Copyright Notice in mruby.h @@ -92,12 +92,12 @@ stack_init(mrb_state *mrb) { struct mrb_context *c = mrb->c; - /* assert(mrb->stack == NULL); */ + /* mrb_assert(mrb->stack == NULL); */ c->stbase = (mrb_value *)mrb_calloc(mrb, STACK_INIT_SIZE, sizeof(mrb_value)); c->stend = c->stbase + STACK_INIT_SIZE; c->stack = c->stbase; - /* assert(ci == NULL); */ + /* mrb_assert(ci == NULL); */ c->cibase = (mrb_callinfo *)mrb_calloc(mrb, CALLINFO_INIT_SIZE, sizeof(mrb_callinfo)); c->ciend = c->cibase + CALLINFO_INIT_SIZE; c->ci = c->cibase; @@ -174,22 +174,22 @@ uvenv(mrb_state *mrb, int up) struct REnv *e = mrb->c->ci->proc->env; while (up--) { - if (!e) return 0; + if (!e) return NULL; e = (struct REnv*)e->c; } return e; } -static inline int +static inline mrb_bool is_strict(mrb_state *mrb, struct REnv *e) { int cioff = e->cioff; if (cioff >= 0 && mrb->c->cibase[cioff].proc && MRB_PROC_STRICT_P(mrb->c->cibase[cioff].proc)) { - return 1; + return TRUE; } - return 0; + return FALSE; } static inline struct REnv* @@ -279,7 +279,7 @@ ecall(mrb_state *mrb, int i) mrb_value mrb_funcall(mrb_state *mrb, mrb_value self, const char *name, int argc, ...) { - mrb_sym mid = mrb_intern(mrb, name); + mrb_sym mid = mrb_intern_cstr(mrb, name); if (argc == 0) { return mrb_funcall_argv(mrb, self, mid, 0, 0); @@ -544,7 +544,7 @@ void mrb_gv_val_set(mrb_state *mrb, mrb_sym sym, mrb_value val); mrb_value mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) { - /* assert(mrb_proc_cfunc_p(proc)) */ + /* mrb_assert(mrb_proc_cfunc_p(proc)) */ mrb_irep *irep = proc->body.irep; mrb_code *pc = irep->iseq; mrb_value *pool = irep->pool; @@ -1261,7 +1261,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) mrb->c->stack = mrb->c->stbase + ci[1].stackidx; if (ci[1].acc < 0 && prev_jmp) { mrb->jmp = prev_jmp; - longjmp(*(jmp_buf*)mrb->jmp, 1); + mrb_longjmp(mrb); } while (eidx > ci->eidx) { ecall(mrb, --eidx); @@ -2127,3 +2127,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } END_DISPATCH; } + +void +mrb_longjmp(mrb_state *mrb) +{ + longjmp(*(jmp_buf*)mrb->jmp, 1); +} |
