make ⊏ safe
This commit is contained in:
parent
16f379b6c7
commit
4d8375fdfd
@ -102,6 +102,15 @@ B select_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(w); dec(x);
|
||||||
return r;
|
return r;
|
||||||
|
} else if (TI(x).elType==el_f64) {
|
||||||
|
f64* rp; B r = m_f64arrc(&rp, w);
|
||||||
|
f64* xp = f64any_ptr(x);
|
||||||
|
for (usz i = 0; i < wia; i++) {
|
||||||
|
usz c = WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia));
|
||||||
|
rp[i] = xp[c];
|
||||||
|
}
|
||||||
|
dec(w); dec(x);
|
||||||
|
return r;
|
||||||
} else if (TI(x).elType==el_c32) {
|
} else if (TI(x).elType==el_c32) {
|
||||||
u32* rp; B r = m_c32arrc(&rp, w);
|
u32* rp; B r = m_c32arrc(&rp, w);
|
||||||
u32* xp = c32any_ptr(x);
|
u32* xp = c32any_ptr(x);
|
||||||
@ -111,26 +120,38 @@ B select_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(w); dec(x);
|
||||||
return r;
|
return r;
|
||||||
|
} else if (v(x)->type==t_harr) {
|
||||||
|
usz i = 0;
|
||||||
|
B* xp = harr_ptr(x);
|
||||||
|
HArr_p r = m_harrs(wia, &i);
|
||||||
|
for (; i < wia; i++) {
|
||||||
|
usz c = WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia));
|
||||||
|
r.a[i] = inc(xp[c]);
|
||||||
|
}
|
||||||
|
dec(x);
|
||||||
|
return harr_fcd(r, w);
|
||||||
} else {
|
} else {
|
||||||
HArr_p r = m_harrUc(w);
|
usz i = 0;
|
||||||
for (usz i = 0; i < wia; i++) {
|
HArr_p r = m_harrs(wia, &i);
|
||||||
|
for (; i < wia; i++) {
|
||||||
usz c = WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia));
|
usz c = WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia));
|
||||||
r.a[i] = xget(x, c);
|
r.a[i] = xget(x, c);
|
||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(x);
|
||||||
return withFill(r.b,xf);
|
return withFill(harr_fcd(r,w),xf);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HArr_p r = m_harrUc(w);
|
usz i = 0;
|
||||||
|
HArr_p r = m_harrs(wia, &i);
|
||||||
BS2B wgetU = TI(w).getU;
|
BS2B wgetU = TI(w).getU;
|
||||||
for (usz i = 0; i < wia; i++) {
|
for (; i < wia; i++) {
|
||||||
B cw = wgetU(w, i);
|
B cw = wgetU(w, i);
|
||||||
if (!isNum(cw)) { harr_pfree(r.b, i); goto base; }
|
if (!isNum(cw)) { harr_pfree(r.b, i); goto base; }
|
||||||
usz c = WRAP(o2i64(cw), xia, thrF("⊏: Indexing out-of-bounds (%R∊𝕨, %s≡≠𝕩)", cw, xia));
|
usz c = WRAP(o2i64(cw), xia, thrF("⊏: Indexing out-of-bounds (%R∊𝕨, %s≡≠𝕩)", cw, xia));
|
||||||
r.a[i] = xget(x, c);
|
r.a[i] = xget(x, c);
|
||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(x);
|
||||||
return withFill(r.b,xf);
|
return withFill(harr_fcd(r,w),xf);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
BS2B wgetU = TI(w).getU;
|
BS2B wgetU = TI(w).getU;
|
||||||
|
|||||||
2
src/vm.c
2
src/vm.c
@ -38,7 +38,7 @@ enum {
|
|||||||
SYSV = 30, // N; get system function N
|
SYSV = 30, // N; get system function N
|
||||||
LOCU = 31, // N0,N1; like LOCO but overrides the slot with bi_optOut
|
LOCU = 31, // N0,N1; like LOCO but overrides the slot with bi_optOut
|
||||||
EXTO, EXTM, EXTU, // alternate versions of LOC_ for extended variables
|
EXTO, EXTM, EXTU, // alternate versions of LOC_ for extended variables
|
||||||
ADDI, ADDU, // PUSH with required increment & not required increment
|
ADDI, ADDU, // separate PUSH for refcounting needed/not needed (stores the object inline, instead of reading from `objs`)
|
||||||
BC_SIZE
|
BC_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user