From 2089c88f97314c3d6c00b56408bb06fcf376100c Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 29 Jan 2017 18:45:33 -0800 Subject: Optimize merge a little. * lib.c (merge): Eliminate extra call to cdr by keeping the result of cdr_l, and working with the location. --- lib.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib.c b/lib.c index acf4e54c..ee406c0e 100644 --- a/lib.c +++ b/lib.c @@ -7637,13 +7637,15 @@ val merge(val list1, val list2, val lessfun, val keyfun) val el2 = funcall1(keyfun, first(list2)); if (funcall2(lessfun, el2, el1)) { - val next = cdr(list2); - deref(cdr_l(list2)) = nil; + loc pnext = cdr_l(list2); + val next = deref(pnext); + deref(pnext) = nil; ptail = list_collect_nconc(ptail, list2); list2 = next; } else { - val next = cdr(list1); - deref(cdr_l(list1)) = nil; + loc pnext = cdr_l(list1); + val next = deref(pnext); + deref(pnext) = nil; ptail = list_collect_nconc(ptail, list1); list1 = next; } -- cgit v1.2.3