diff --git a/src/builtins/compare.c b/src/builtins/compare.c index 7e4cd237..55176fe5 100644 --- a/src/builtins/compare.c +++ b/src/builtins/compare.c @@ -54,34 +54,50 @@ NOINLINE i32 compareF(B w, B x) { } NOINLINE bool atomEqualF(B w, B x) { - if (TY(w)!=TY(x) || TI(w,byRef)) return false; + if (TI(w,byRef) || TY(w)!=TY(x)) return false; + B2B dcf = TI(w,decompose); - B wd=dcf(incG(w)); B* wdp = harr_ptr(wd); - B xd=dcf(incG(x)); B* xdp = harr_ptr(xd); - if (o2i(wdp[0])<=1) { decG(wd);decG(xd); return false; } + B xd=dcf(incG(x)); B* xdp=harr_ptr(xd); + if (o2i(xdp[0])<=1) goto decx_ne; + B wd=dcf(incG(w)); B* wdp=harr_ptr(wd); + usz wia = IA(wd); - if (wia!=IA(xd)) { decG(wd);decG(xd); return false; } - for (u64 i = 0; i