c32 ⊔ so compiled string literals get to be c32arrs

This commit is contained in:
dzaima 2021-05-29 14:21:51 +03:00
parent 41ffb0f2ef
commit 4b94465469
2 changed files with 13 additions and 9 deletions

View File

@ -51,11 +51,11 @@ B ud_c1(B t, B x) {
ria*= c;
}
dec(x);
B r = m_fillarrp(ria);
fillarr_setFill(r, m_f64(0));
B r = m_fillarrp(ria); fillarr_setFill(r, m_f64(0));
B* rp = fillarr_ptr(r);
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
usz* rsh = arr_shAllocI(r, ria, xia);
if (rsh) memcpy(rsh, sh, sizeof(usz)*xia);

View File

@ -559,24 +559,29 @@ B group_c2(B t, B w, B x) {
for (usz i = 0; i < ria; i++) len[i] = pos[i] = 0;
for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) len[n]++; }
B r = m_fillarrp(ria);
B r = m_fillarrp(ria); fillarr_setFill(r, m_f64(0));
arr_shVec(r, ria);
fillarr_setFill(r, m_f64(0));
B* rp = fillarr_ptr(r);
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
B xf = getFillQ(x);
B rf = m_fillarrp(0);
B rf = m_fillarrp(0); fillarr_setFill(rf, m_f64(0));
arr_shVec(rf, 0);
fillarr_setFill(r, rf);
if (TI(x).elType==el_i32) {
for (usz i = 0; i < ria; i++) { i32* t; rp[i] = m_i32arrv(&t, len[i]); }
fillarr_setFill(rf, xf);
i32* xp = i32any_ptr(x);
for (usz i = 0; i < xia; i++) {
i32 n = wp[i];
if (n>=0) i32arr_ptr(rp[n])[pos[n]++] = xp[i];
}
} else if (TI(x).elType==el_c32) {
for (usz i = 0; i < ria; i++) { u32* t; rp[i] = m_c32arrv(&t, len[i]); }
u32* xp = c32any_ptr(x);
for (usz i = 0; i < xia; i++) {
i32 n = wp[i];
if (n>=0) c32arr_ptr(rp[n])[pos[n]++] = xp[i];
}
} else {
for (usz i = 0; i < ria; i++) {
B c = m_fillarrp(len[i]);
@ -584,7 +589,6 @@ B group_c2(B t, B w, B x) {
a(c)->ia = 0;
rp[i] = c;
}
fillarr_setFill(rf, xf);
BS2B xget = TI(x).get;
for (usz i = 0; i < xia; i++) {
i32 n = wp[i];
@ -592,6 +596,7 @@ B group_c2(B t, B w, B x) {
}
for (usz i = 0; i < ria; i++) { arr_shVec(rp[i], len[i]); }
}
fillarr_setFill(rf, xf);
dec(w); dec(x); TFREE(len); TFREE(pos);
return r;
} else {
@ -612,9 +617,8 @@ B group_c2(B t, B w, B x) {
if (n>=0) len[n]++;
}
B r = m_fillarrp(ria);
B r = m_fillarrp(ria); fillarr_setFill(r, m_f64(0));
arr_shVec(r, ria);
fillarr_setFill(r, m_f64(0));
B* rp = fillarr_ptr(r);
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
B xf = getFillQ(x);