From e3a60abafb1e7740f3c278396f703f4e47ebcf29 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 10 Dec 2011 10:22:07 -0800 Subject: * lib.c (plusv): Recognize cases to eliminate a wasteful plus call with an initial element of zero. --- ChangeLog | 5 +++++ lib.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 8b219237..1751e296 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-12-10 Kaz Kylheku + + * lib.c (plusv): Recognize cases to eliminate a wasteful plus call + with an initial element of zero. + 2011-12-10 Kaz Kylheku * arith.c: File is now generated using TXR. diff --git a/lib.c b/lib.c index acd7d643..6109a5b3 100644 --- a/lib.c +++ b/lib.c @@ -834,7 +834,11 @@ val bignump(val num) val plusv(val nlist) { - return reduce_left(func_n2(plus), nlist, num(0), nil); + if (!nlist) + return num(0); + else if (!cdr(nlist)) + return car(nlist); + return reduce_left(func_n2(plus), cdr(nlist), car(nlist), nil); } val minusv(val minuend, val nlist) -- cgit v1.2.3