rearrange common array case to top

This commit is contained in:
dzaima 2022-06-14 02:40:50 +03:00
parent f3fffd2b8d
commit 6307356bab

View File

@ -545,8 +545,7 @@ NOINLINE void v_setF(Scope* pscs[], B s, B x, bool upd) {
} }
} }
NOINLINE bool v_sethF(Scope* pscs[], B s, B x) { NOINLINE bool v_sethF(Scope* pscs[], B s, B x) {
if (v(s)->type==t_vfyObj) return equal(c(WrappedObj,s)->obj,x); if (isArr(s)) {
if (v(s)->type==t_arrMerge) return v_merge(pscs, s, x, false, true);
VTY(s, t_harr); VTY(s, t_harr);
B* sp = harr_ptr(s); B* sp = harr_ptr(s);
usz ia = a(s)->ia; usz ia = a(s)->ia;
@ -570,27 +569,31 @@ NOINLINE bool v_sethF(Scope* pscs[], B s, B x) {
SGetU(x) SGetU(x)
for (u64 i = 0; i < ia; i++) if (!v_seth(pscs, sp[i], GetU(x,i))) return false; for (u64 i = 0; i < ia; i++) if (!v_seth(pscs, sp[i], GetU(x,i))) return false;
return true; return true;
}
if (v(s)->type==t_vfyObj) return equal(c(WrappedObj,s)->obj,x);
assert(v(s)->type==t_arrMerge);
return v_merge(pscs, s, x, false, true);
} }
NOINLINE B v_getF(Scope* pscs[], B s) { NOINLINE B v_getF(Scope* pscs[], B s) {
if (isExt(s)) { if (isArr(s)) {
Scope* sc = pscs[(u16)(s.u>>32)];
B r = sc->ext->vars[(u32)s.u];
if (r.u==bi_noVar.u) thrM("↩: Reading variable that hasn't been set");
sc->ext->vars[(u32)s.u] = bi_optOut;
return r;
} else if (isObj(s)) {
assert(v(s)->type == t_arrMerge);
return bqn_merge(v_getF(pscs, c(WrappedObj,s)->obj));
} else {
VTY(s, t_harr); VTY(s, t_harr);
usz ia = a(s)->ia; usz ia = a(s)->ia;
B* sp = harr_ptr(s); B* sp = harr_ptr(s);
HArr_p r = m_harrUv(ia); HArr_p r = m_harrUv(ia);
for (u64 i = 0; i < ia; i++) r.a[i] = v_get(pscs, sp[i], true); for (u64 i = 0; i < ia; i++) r.a[i] = v_get(pscs, sp[i], true);
return r.b; return r.b;
} else if (isExt(s)) {
Scope* sc = pscs[(u16)(s.u>>32)];
B r = sc->ext->vars[(u32)s.u];
if (r.u==bi_noVar.u) thrM("↩: Reading variable that hasn't been set");
sc->ext->vars[(u32)s.u] = bi_optOut;
return r;
} else {
assert(isObj(s) && v(s)->type==t_arrMerge);
return bqn_merge(v_getF(pscs, c(WrappedObj,s)->obj));
} }
} }