From 1e00aa71c9dd6f1deb5fbca1e4bd8240a9e2e1aa Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 10 Oct 2024 04:09:10 +0300 Subject: [PATCH] atomEqualF & atomEEqual cleanup --- src/builtins/compare.c | 52 +++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 18 deletions(-) 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