set result fill fill immediately instead of delaying to before return

This commit is contained in:
dzaima 2022-11-12 12:56:12 +02:00
parent d2cdae4962
commit eb880d7135

View File

@ -85,20 +85,21 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xia, usz* xsh, u8 we) {
Arr* r = arr_shVec(m_fillarrp(ria)); fillarr_setFill(r, m_f64(0)); Arr* r = arr_shVec(m_fillarrp(ria)); fillarr_setFill(r, m_f64(0));
B* rp = fillarr_ptr(r); B* rp = fillarr_ptr(r);
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
B xf = getFillQ(x);
Arr* rf = m_fillarrp(0); if (xr==1) arr_shVec(rf); else arr_shChangeLen(rf, xr, xsh, 0); B xf = getFillQ(x);
fillarr_setFill(rf, m_f64(0)); Arr* rf = m_fillarrp(0); fillarr_setFill(rf, xf);
if (xr==1) arr_shVec(rf); else arr_shChangeLen(rf, xr, xsh, 0);
B z = taga(rf); B z = taga(rf);
fillarr_setFill(r, z); fillarr_setFill(r, z);
if (ria <= 1) { if (ria <= 1) {
if (ria == 0) goto setfill_dec_ret; // Needed so wia>0 if (ria == 0) goto dec_ret; // Needed so wia>0
if (neg == 0) { rp[0]=inc(x); goto setfill_dec_ret; } if (neg == 0) { rp[0]=inc(x); goto dec_ret; }
// else, ¯1‿n ⊔ ⟨v⟩
} }
if (we==el_bit) { if (we==el_bit) {
assert(ria == 2); assert(ria == 2);
fillarr_setFill(rf, xf);
if (wia>xia) w = take_c2(m_f64(0), m_f64(xia), w); if (wia>xia) w = take_c2(m_f64(0), m_f64(xia), w);
rp[1] = slash_c2(m_f64(0), inc(w), inc(x)); rp[1] = slash_c2(m_f64(0), inc(w), inc(x));
rp[0] = slash_c2(m_f64(0), not_c1(m_f64(0), w), x); rp[0] = slash_c2(m_f64(0), not_c1(m_f64(0), w), x);
@ -107,7 +108,7 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xia, usz* xsh, u8 we) {
// Needed to make sure wia>0 for ip[wia-1] below // Needed to make sure wia>0 for ip[wia-1] below
if (neg==xia) { if (neg==xia) {
for (usz i = 0; i < ria; i++) rp[i] = inc(z); for (usz i = 0; i < ria; i++) rp[i] = inc(z);
goto setfill_dec_ret; goto dec_ret;
} }
TALLOC(i32, pos, 2*ria+1); i32* len = pos+ria+1; TALLOC(i32, pos, 2*ria+1); i32* len = pos+ria+1;
@ -253,8 +254,7 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xia, usz* xsh, u8 we) {
done: done:
TFREE(pos); TFREE(pos);
setfill_dec_ret: dec_ret:
fillarr_setFill(rf, xf);
decG(w); decG(x); decG(w); decG(x);
return taga(r); return taga(r);
} }