clean up evalBC
This commit is contained in:
parent
c79e260e34
commit
ff6e6aa9c7
29
src/vm.c
29
src/vm.c
@ -627,16 +627,7 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
case DFND0: { GS_UPD;POS_UPD; ADD(m_funBlock((Block*)L64, sc)); break; }
|
||||
case DFND1: { GS_UPD;POS_UPD; ADD(m_md1Block((Block*)L64, sc)); break; }
|
||||
case DFND2: { GS_UPD;POS_UPD; ADD(m_md2Block((Block*)L64, sc)); break; }
|
||||
// case DFND: {
|
||||
// GS_UPD;POS_UPD;
|
||||
// Block* cbl = blocks[*bc++];
|
||||
// switch(cbl->ty) { default: UD;
|
||||
// case 0: ADD(m_funBlock(cbl, sc)); break;
|
||||
// case 1: ADD(m_md1Block(cbl, sc)); break;
|
||||
// case 2: ADD(m_md2Block(cbl, sc)); break;
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
|
||||
case MD1C: { P(f)P(m) GS_UPD;POS_UPD; ADD(m1_d (m,f )); break; }
|
||||
case MD2C: { P(f)P(m)P(g) GS_UPD;POS_UPD; ADD(m2_d (m,f,g)); break; }
|
||||
case MD2R: { P(m)P(g) ADD(m2_h (m, g)); break; }
|
||||
@ -647,6 +638,7 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
else ADD(m_fork(f,g,h));
|
||||
break;
|
||||
}
|
||||
|
||||
case VARM: { u32 d = *bc++; u32 p = *bc++;
|
||||
ADD(tag((u64)d<<32 | (u32)p, VAR_TAG));
|
||||
break;
|
||||
@ -663,6 +655,7 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
vars[p] = bi_optOut;
|
||||
break;
|
||||
}
|
||||
|
||||
case EXTM: { u32 d = *bc++; u32 p = *bc++;
|
||||
ADD(tag((u64)d<<32 | (u32)p, EXT_TAG));
|
||||
break;
|
||||
@ -679,6 +672,7 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
vars[p] = bi_optOut;
|
||||
break;
|
||||
}
|
||||
|
||||
case SETN: { P(s) P(x) GS_UPD; POS_UPD; v_set(pscs, s, x, false, true); dec(s); ADD(x); break; }
|
||||
case SETU: { P(s) P(x) GS_UPD; POS_UPD; v_set(pscs, s, x, true, true); dec(s); ADD(x); break; }
|
||||
case SETM: { P(s)P(f)P(x) GS_UPD; POS_UPD;
|
||||
@ -695,6 +689,7 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
ADD(r);
|
||||
break;
|
||||
}
|
||||
|
||||
case SETHi:{ P(s) P(x) GS_UPD; POS_UPD; u64 v1 = L64; u64 v2 = L64;
|
||||
bool ok = v_seth(pscs, s, x); dec(x); dec(s);
|
||||
if (!ok) { GS_UPD; return gotoNextBody(bl, sc, (Body*)(q_N(sc->vars[2])? v1 : v2)); }
|
||||
@ -708,16 +703,13 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
if (!o2b(x)) { GS_UPD; return gotoNextBody(bl, sc, (Body*)(q_N(sc->vars[2])? v1 : v2)); }
|
||||
break;
|
||||
}
|
||||
|
||||
case FLDO: { P(ns) GS_UPD; u32 p = *bc++; POS_UPD;
|
||||
if (!isNsp(ns)) thrM("Trying to read a field from non-namespace");
|
||||
ADD(inc(ns_getU(ns, sc->body->nsDesc->nameList, p)));
|
||||
dec(ns);
|
||||
break;
|
||||
}
|
||||
case RETD: {
|
||||
ADD(m_ns(ptr_inc(sc), ptr_inc(b->nsDesc)));
|
||||
goto end;
|
||||
}
|
||||
case ALIM: { P(o) u32 l = *bc++;
|
||||
FldAlias* a = mm_alloc(sizeof(FldAlias), t_fldAlias);
|
||||
a->obj = o;
|
||||
@ -725,7 +717,6 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
ADD(tag(a,OBJ_TAG));
|
||||
break;
|
||||
}
|
||||
case RETN: goto end;
|
||||
case CHKV: {
|
||||
if (q_N(PEEK(1))) { GS_UPD; POS_UPD; thrM("Unexpected Nothing (·)"); }
|
||||
break;
|
||||
@ -737,7 +728,13 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||
break;
|
||||
}
|
||||
case FAIL: thrM(q_N(sc->vars[2])? "This block cannot be called monadically" : "This block cannot be called dyadically");
|
||||
// not implemented: DYNO DYNM FLDM SYSV
|
||||
|
||||
case RETD: {
|
||||
ADD(m_ns(ptr_inc(sc), ptr_inc(b->nsDesc)));
|
||||
goto end;
|
||||
}
|
||||
case RETN: goto end;
|
||||
|
||||
default:
|
||||
#ifdef DEBUG
|
||||
printf("todo %d\n", bc[-1]); bc++; break;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user