add more GS_UPD
This commit is contained in:
parent
1c8a64f13c
commit
7bd8331346
@ -114,6 +114,7 @@ INS B i_LST_0() { // TODO combine with ADDI
|
|||||||
return emptyHVec();
|
return emptyHVec();
|
||||||
}
|
}
|
||||||
INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0);
|
INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0);
|
||||||
|
GS_UPD;
|
||||||
HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated
|
HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated
|
||||||
bool allNum = isNum(el0);
|
bool allNum = isNum(el0);
|
||||||
r.a[sz-1] = el0;
|
r.a[sz-1] = el0;
|
||||||
@ -123,6 +124,7 @@ INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0);
|
|||||||
return r.b;
|
return r.b;
|
||||||
}
|
}
|
||||||
INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0);
|
INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0);
|
||||||
|
GS_UPD;
|
||||||
HArr_p r = m_harrUv(sz);
|
HArr_p r = m_harrUv(sz);
|
||||||
r.a[sz-1] = el0;
|
r.a[sz-1] = el0;
|
||||||
for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP;
|
for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP;
|
||||||
@ -130,6 +132,7 @@ INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0);
|
|||||||
return bqn_merge(r.b);
|
return bqn_merge(r.b);
|
||||||
}
|
}
|
||||||
INS B i_ARMM(B el0, i64 sz, B* cStack) { assert(sz>0);
|
INS B i_ARMM(B el0, i64 sz, B* cStack) { assert(sz>0);
|
||||||
|
GS_UPD;
|
||||||
HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated
|
HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated
|
||||||
r.a[sz-1] = el0;
|
r.a[sz-1] = el0;
|
||||||
for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP;
|
for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP;
|
||||||
|
|||||||
8
src/vm.c
8
src/vm.c
@ -765,7 +765,7 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume
|
|||||||
dec(f);
|
dec(f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LSTO: case LSTM: {
|
case LSTO: case LSTM: { GS_UPD;
|
||||||
u32 sz = *bc++;
|
u32 sz = *bc++;
|
||||||
if (sz==0) {
|
if (sz==0) {
|
||||||
ADD(emptyHVec());
|
ADD(emptyHVec());
|
||||||
@ -889,19 +889,21 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FAIL: thrM(q_N(sc->vars[2])? "This block cannot be called monadically" : "This block cannot be called dyadically");
|
case FAIL: thrM(q_N(sc->vars[2])? "This block cannot be called monadically" : "This block cannot be called dyadically");
|
||||||
case ARMO: {
|
case ARMO: { GS_UPD;
|
||||||
u32 sz = *bc++;
|
u32 sz = *bc++;
|
||||||
assert(sz>0);
|
assert(sz>0);
|
||||||
HArr_p r = m_harrUv(sz);
|
HArr_p r = m_harrUv(sz);
|
||||||
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
|
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
|
||||||
|
GS_UPD;
|
||||||
ADD(bqn_merge(r.b));
|
ADD(bqn_merge(r.b));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ARMM: {
|
case ARMM: { GS_UPD;
|
||||||
u32 sz = *bc++;
|
u32 sz = *bc++;
|
||||||
assert(sz>0);
|
assert(sz>0);
|
||||||
HArr_p r = m_harrUv(sz);
|
HArr_p r = m_harrUv(sz);
|
||||||
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
|
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
|
||||||
|
GS_UPD;
|
||||||
WrappedObj* a = mm_alloc(sizeof(WrappedObj), t_arrMerge);
|
WrappedObj* a = mm_alloc(sizeof(WrappedObj), t_arrMerge);
|
||||||
a->obj = r.b;
|
a->obj = r.b;
|
||||||
ADD(tag(a,OBJ_TAG));
|
ADD(tag(a,OBJ_TAG));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user