diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-01 22:34:43 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-03-01 22:34:43 +0900 |
| commit | a4d37bafdc878512ecc6d99a7016ab0439ccba91 (patch) | |
| tree | eacd88d69d6221c124ba7bb11d9be7f328711e0a | |
| parent | 6f88c8407e9fb17f382edcbde593b4d7fe085613 (diff) | |
| parent | e1143ef4303ed1ad9e3344b32c5a5c686b55de43 (diff) | |
| download | mruby-a4d37bafdc878512ecc6d99a7016ab0439ccba91.tar.gz mruby-a4d37bafdc878512ecc6d99a7016ab0439ccba91.zip | |
Merge branch 'master' of github.com:mruby/mruby
| -rw-r--r-- | src/vm.c | 364 |
1 files changed, 182 insertions, 182 deletions
@@ -821,12 +821,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) recv = regs[a]; if (GET_OPCODE(i) != OP_SENDB) { - if (n == CALL_MAXARGS) { - SET_NIL_VALUE(regs[a+2]); - } - else { - SET_NIL_VALUE(regs[a+n+1]); - } + if (n == CALL_MAXARGS) { + SET_NIL_VALUE(regs[a+2]); + } + else { + SET_NIL_VALUE(regs[a+n+1]); + } } c = mrb_class(mrb, recv); m = mrb_method_search_vm(mrb, &c, mid); @@ -840,7 +840,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } else { memmove(regs+a+2, regs+a+1, sizeof(mrb_value)*(n+1)); - regs[a+1] = sym; + regs[a+1] = sym; n++; } } @@ -910,9 +910,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) ci->target_class = m->target_class; ci->proc = m; if (m->env) { - if (m->env->mid) { - ci->mid = m->env->mid; - } + if (m->env->mid) { + ci->mid = m->env->mid; + } if (!m->env->stack) { m->env->stack = mrb->stack; } @@ -920,14 +920,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* prepare stack */ if (MRB_PROC_CFUNC_P(m)) { - recv = m->body.func(mrb, recv); + recv = m->body.func(mrb, recv); mrb_gc_arena_restore(mrb, ai); if (mrb->exc) goto L_RAISE; /* pop stackpos */ - ci = mrb->ci; + ci = mrb->ci; regs = mrb->stack = mrb->stbase + ci->stackidx; - regs[ci->acc] = recv; - pc = ci->pc; + regs[ci->acc] = recv; + pc = ci->pc; cipop(mrb); irep = mrb->ci->proc->body.irep; pool = irep->pool; @@ -938,10 +938,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* setup environment for calling method */ proc = m; irep = m->body.irep; - if (!irep) { - mrb->stack[0] = mrb_nil_value(); - goto L_RETURN; - } + if (!irep) { + mrb->stack[0] = mrb_nil_value(); + goto L_RETURN; + } pool = irep->pool; syms = irep->syms; ci->nregs = irep->nregs; @@ -979,7 +979,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } else { memmove(regs+a+2, regs+a+1, sizeof(mrb_value)*(n+1)); - SET_SYM_VALUE(regs[a+1], ci->mid); + SET_SYM_VALUE(regs[a+1], ci->mid); n++; } } @@ -1104,13 +1104,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) struct RArray *ary = mrb_ary_ptr(regs[1]); argv = ary->ptr; argc = ary->len; - mrb_gc_protect(mrb, regs[1]); + mrb_gc_protect(mrb, regs[1]); } if (mrb->ci->proc && MRB_PROC_STRICT_P(mrb->ci->proc)) { if (argc >= 0) { if (argc < m1 + m2 || (r == 0 && argc > len)) { - argnum_error(mrb, m1+m2); - goto L_RAISE; + argnum_error(mrb, m1+m2); + goto L_RAISE; } } } @@ -1130,9 +1130,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (r) { /* r */ regs[m1+o+1] = mrb_ary_new_capa(mrb, 0); } - if (o == 0) pc++; - else - pc += argc - m1 - m2 + 1; + if (o == 0) pc++; + else + pc += argc - m1 - m2 + 1; } else { if (argv0 != argv) { @@ -1173,29 +1173,29 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) int eidx; L_RAISE: - ci = mrb->ci; - mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern(mrb, "lastpc"), mrb_voidp_value(pc)); - mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->cibase)); - eidx = ci->eidx; + ci = mrb->ci; + mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern(mrb, "lastpc"), mrb_voidp_value(pc)); + mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->cibase)); + eidx = ci->eidx; if (ci == mrb->cibase) { - if (ci->ridx == 0) goto L_STOP; - goto L_RESCUE; - } + if (ci->ridx == 0) goto L_STOP; + goto L_RESCUE; + } while (ci[0].ridx == ci[-1].ridx) { cipop(mrb); ci = mrb->ci; - if (ci[1].acc < 0 && prev_jmp) { - mrb->jmp = prev_jmp; - longjmp(*(jmp_buf*)mrb->jmp, 1); - } - while (eidx > mrb->ci->eidx) { - ecall(mrb, --eidx); - } + if (ci[1].acc < 0 && prev_jmp) { + mrb->jmp = prev_jmp; + longjmp(*(jmp_buf*)mrb->jmp, 1); + } + while (eidx > mrb->ci->eidx) { + ecall(mrb, --eidx); + } if (ci == mrb->cibase) { if (ci->ridx == 0) { - regs = mrb->stack = mrb->stbase; - goto L_STOP; - } + regs = mrb->stack = mrb->stbase; + goto L_STOP; + } break; } } @@ -1222,11 +1222,11 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) goto L_RAISE; } ci = mrb->cibase + e->cioff; - if (ci == mrb->cibase) { + if (ci == mrb->cibase) { localjump_error(mrb, "return"); goto L_RAISE; - } - mrb->ci = ci; + } + mrb->ci = ci; break; } case OP_R_NORMAL: @@ -1349,10 +1349,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (lv == 0) stack = regs + 1; else { struct REnv *e = uvenv(mrb, lv-1); - if (!e) { - localjump_error(mrb, "yield"); - goto L_RAISE; - } + if (!e) { + localjump_error(mrb, "yield"); + goto L_RAISE; + } stack = e->stack + 1; } regs[a] = stack[m1+r+m2]; @@ -1378,38 +1378,38 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): - { - mrb_int x, y, z; - - x = mrb_fixnum(regs[a]); - y = mrb_fixnum(regs[a+1]); - z = x + y; - if (((x < 0) ^ (y < 0)) == 0 && (x < 0) != (z < 0)) { - /* integer overflow */ - SET_FLT_VALUE(regs[a], (mrb_float)x + (mrb_float)y); - break; - } - SET_INT_VALUE(regs[a], z); - } - break; + { + mrb_int x, y, z; + + x = mrb_fixnum(regs[a]); + y = mrb_fixnum(regs[a+1]); + z = x + y; + if (((x < 0) ^ (y < 0)) == 0 && (x < 0) != (z < 0)) { + /* integer overflow */ + SET_FLT_VALUE(regs[a], (mrb_float)x + (mrb_float)y); + break; + } + SET_INT_VALUE(regs[a], z); + } + break; case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT): - { - mrb_int x = mrb_fixnum(regs[a]); - mrb_float y = mrb_float(regs[a+1]); - SET_FLT_VALUE(regs[a], (mrb_float)x + y); - } - break; + { + mrb_int x = mrb_fixnum(regs[a]); + mrb_float y = mrb_float(regs[a+1]); + SET_FLT_VALUE(regs[a], (mrb_float)x + y); + } + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM): - OP_MATH_BODY(+,attr_f,attr_i); - break; + OP_MATH_BODY(+,attr_f,attr_i); + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT): - OP_MATH_BODY(+,attr_f,attr_f); - break; + OP_MATH_BODY(+,attr_f,attr_f); + break; case TYPES2(MRB_TT_STRING,MRB_TT_STRING): - regs[a] = mrb_str_plus(mrb, regs[a], regs[a+1]); - break; + regs[a] = mrb_str_plus(mrb, regs[a], regs[a+1]); + break; default: - goto L_SEND; + goto L_SEND; } mrb_gc_arena_restore(mrb, ai); NEXT; @@ -1422,35 +1422,35 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): - { - mrb_int x, y, z; - - x = mrb_fixnum(regs[a]); - y = mrb_fixnum(regs[a+1]); - z = x - y; - if (((x < 0) ^ (y < 0)) != 0 && (x < 0) != (z < 0)) { - /* integer overflow */ - SET_FLT_VALUE(regs[a], (mrb_float)x - (mrb_float)y); - break; - } - SET_INT_VALUE(regs[a], z); - } - break; + { + mrb_int x, y, z; + + x = mrb_fixnum(regs[a]); + y = mrb_fixnum(regs[a+1]); + z = x - y; + if (((x < 0) ^ (y < 0)) != 0 && (x < 0) != (z < 0)) { + /* integer overflow */ + SET_FLT_VALUE(regs[a], (mrb_float)x - (mrb_float)y); + break; + } + SET_INT_VALUE(regs[a], z); + } + break; case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT): - { - mrb_int x = mrb_fixnum(regs[a]); - mrb_float y = mrb_float(regs[a+1]); - SET_FLT_VALUE(regs[a], (mrb_float)x - y); - } - break; + { + mrb_int x = mrb_fixnum(regs[a]); + mrb_float y = mrb_float(regs[a+1]); + SET_FLT_VALUE(regs[a], (mrb_float)x - y); + } + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM): - OP_MATH_BODY(-,attr_f,attr_i); - break; + OP_MATH_BODY(-,attr_f,attr_i); + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT): - OP_MATH_BODY(-,attr_f,attr_f); - break; + OP_MATH_BODY(-,attr_f,attr_f); + break; default: - goto L_SEND; + goto L_SEND; } NEXT; } @@ -1462,35 +1462,35 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): - { - mrb_int x, y, z; - - x = mrb_fixnum(regs[a]); - y = mrb_fixnum(regs[a+1]); - z = x * y; - if (x != 0 && z/x != y) { - SET_FLT_VALUE(regs[a], (mrb_float)x * (mrb_float)y); - } - else { - SET_INT_VALUE(regs[a], z); - } - } - break; + { + mrb_int x, y, z; + + x = mrb_fixnum(regs[a]); + y = mrb_fixnum(regs[a+1]); + z = x * y; + if (x != 0 && z/x != y) { + SET_FLT_VALUE(regs[a], (mrb_float)x * (mrb_float)y); + } + else { + SET_INT_VALUE(regs[a], z); + } + } + break; case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT): - { - mrb_int x = mrb_fixnum(regs[a]); - mrb_float y = mrb_float(regs[a+1]); - SET_FLT_VALUE(regs[a], (mrb_float)x * y); - } - break; + { + mrb_int x = mrb_fixnum(regs[a]); + mrb_float y = mrb_float(regs[a+1]); + SET_FLT_VALUE(regs[a], (mrb_float)x * y); + } + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM): - OP_MATH_BODY(*,attr_f,attr_i); - break; + OP_MATH_BODY(*,attr_f,attr_i); + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT): - OP_MATH_BODY(*,attr_f,attr_f); - break; + OP_MATH_BODY(*,attr_f,attr_f); + break; default: - goto L_SEND; + goto L_SEND; } NEXT; } @@ -1502,27 +1502,27 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): - { - mrb_int x = mrb_fixnum(regs[a]); - mrb_int y = mrb_fixnum(regs[a+1]); - SET_FLT_VALUE(regs[a], (mrb_float)x / (mrb_float)y); - } - break; + { + mrb_int x = mrb_fixnum(regs[a]); + mrb_int y = mrb_fixnum(regs[a+1]); + SET_FLT_VALUE(regs[a], (mrb_float)x / (mrb_float)y); + } + break; case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT): - { - mrb_int x = mrb_fixnum(regs[a]); - mrb_float y = mrb_float(regs[a+1]); - SET_FLT_VALUE(regs[a], (mrb_float)x / y); - } - break; + { + mrb_int x = mrb_fixnum(regs[a]); + mrb_float y = mrb_float(regs[a+1]); + SET_FLT_VALUE(regs[a], (mrb_float)x / y); + } + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM): - OP_MATH_BODY(/,attr_f,attr_i); - break; + OP_MATH_BODY(/,attr_f,attr_i); + break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT): - OP_MATH_BODY(/,attr_f,attr_f); - break; + OP_MATH_BODY(/,attr_f,attr_f); + break; default: - goto L_SEND; + goto L_SEND; } NEXT; } @@ -1534,18 +1534,18 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if + is overridden */ switch (mrb_type(regs[a])) { case MRB_TT_FIXNUM: - { - mrb_int x = regs[a].attr_i; - mrb_int y = GETARG_C(i); - mrb_int z = x + y; - - if (((x < 0) ^ (y < 0)) == 0 && (x < 0) != (z < 0)) { - /* integer overflow */ - SET_FLT_VALUE(regs[a], (mrb_float)x + (mrb_float)y); - break; - } - regs[a].attr_i = z; - } + { + mrb_int x = regs[a].attr_i; + mrb_int y = GETARG_C(i); + mrb_int z = x + y; + + if (((x < 0) ^ (y < 0)) == 0 && (x < 0) != (z < 0)) { + /* integer overflow */ + SET_FLT_VALUE(regs[a], (mrb_float)x + (mrb_float)y); + break; + } + regs[a].attr_i = z; + } break; case MRB_TT_FLOAT: regs[a].attr_f += GETARG_C(i); @@ -1565,18 +1565,18 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* need to check if + is overridden */ switch (mrb_type(regs[a])) { case MRB_TT_FIXNUM: - { - mrb_int x = regs[a].attr_i; - mrb_int y = GETARG_C(i); - mrb_int z = x - y; - - if (((x < 0) ^ (y < 0)) != 0 && (x < 0) != (z < 0)) { - /* integer overflow */ - SET_FLT_VALUE(regs[a], (mrb_float)x - (mrb_float)y); - break; - } - regs[a].attr_i = z; - } + { + mrb_int x = regs[a].attr_i; + mrb_int y = GETARG_C(i); + mrb_int z = x - y; + + if (((x < 0) ^ (y < 0)) != 0 && (x < 0) != (z < 0)) { + /* integer overflow */ + SET_FLT_VALUE(regs[a], (mrb_float)x - (mrb_float)y); + break; + } + regs[a].attr_i = z; + } break; case MRB_TT_FLOAT: regs[a].attr_f -= GETARG_C(i); @@ -1623,10 +1623,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/ int a = GETARG_A(i); if (mrb_obj_eq(mrb, regs[a], regs[a+1])) { - SET_TRUE_VALUE(regs[a]); + SET_TRUE_VALUE(regs[a]); } else { - OP_CMP(==); + OP_CMP(==); } NEXT; } @@ -1691,7 +1691,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } } else { - regs[GETARG_A(i)] = mrb_ary_ref(mrb, v, c); + regs[GETARG_A(i)] = mrb_ary_ref(mrb, v, c); } NEXT; } @@ -1724,13 +1724,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (len > pre + post) { regs[a++] = mrb_ary_new_elts(mrb, len - pre - post, ary->ptr+pre); while (post--) { - regs[a++] = ary->ptr[len-post-1]; + regs[a++] = ary->ptr[len-post-1]; } } else { - regs[a++] = mrb_ary_new_capa(mrb, 0); + regs[a++] = mrb_ary_new_capa(mrb, 0); for (i=0; i+pre<len; i++) { - regs[a+i] = ary->ptr[pre+i]; + regs[a+i] = ary->ptr[pre+i]; } while (i < post) { SET_NIL_VALUE(regs[a+i]); @@ -1821,7 +1821,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) base = regs[a]; if (mrb_nil_p(base)) { - base = mrb_obj_value(mrb->ci->target_class); + base = mrb_obj_value(mrb->ci->target_class); } c = mrb_vm_define_module(mrb, base, id); regs[a] = mrb_obj_value(c); @@ -1866,7 +1866,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) pool = irep->pool; syms = irep->syms; stack_extend(mrb, irep->nregs, 1); - ci->nregs = irep->nregs; + ci->nregs = irep->nregs; regs = mrb->stack; pc = irep->iseq; JUMP; @@ -1924,15 +1924,15 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) /* stop VM */ L_STOP: { - int n = mrb->ci->eidx; + int n = mrb->ci->eidx; - while (n--) { - ecall(mrb, n); - } + while (n--) { + ecall(mrb, n); + } } mrb->jmp = prev_jmp; if (mrb->exc) { - return mrb_obj_value(mrb->exc); + return mrb_obj_value(mrb->exc); } return regs[irep->nlocals]; } @@ -1943,10 +1943,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) mrb_value exc; if (GETARG_A(i) == 0) { - exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, msg); + exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, msg); } else { - exc = mrb_exc_new3(mrb, E_LOCALJUMP_ERROR, msg); + exc = mrb_exc_new3(mrb, E_LOCALJUMP_ERROR, msg); } mrb->exc = (struct RObject*)mrb_object(exc); goto L_RAISE; |
