add more GS_UPD

This commit is contained in:
dzaima 2023-01-21 23:32:17 +02:00
parent 1c8a64f13c
commit 7bd8331346
2 changed files with 8 additions and 3 deletions

View File

@ -114,6 +114,7 @@ INS B i_LST_0() { // TODO combine with ADDI
return emptyHVec();
}
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
bool allNum = isNum(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;
}
INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0);
GS_UPD;
HArr_p r = m_harrUv(sz);
r.a[sz-1] = el0;
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);
}
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
r.a[sz-1] = el0;
for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP;

View File

@ -765,7 +765,7 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume
dec(f);
break;
}
case LSTO: case LSTM: {
case LSTO: case LSTM: { GS_UPD;
u32 sz = *bc++;
if (sz==0) {
ADD(emptyHVec());
@ -889,19 +889,21 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume
break;
}
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++;
assert(sz>0);
HArr_p r = m_harrUv(sz);
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
GS_UPD;
ADD(bqn_merge(r.b));
break;
}
case ARMM: {
case ARMM: { GS_UPD;
u32 sz = *bc++;
assert(sz>0);
HArr_p r = m_harrUv(sz);
for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP;
GS_UPD;
WrappedObj* a = mm_alloc(sizeof(WrappedObj), t_arrMerge);
a->obj = r.b;
ADD(tag(a,OBJ_TAG));