summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-12-10 10:22:07 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-12-10 10:22:07 -0800
commite3a60abafb1e7740f3c278396f703f4e47ebcf29 (patch)
treeb22d3b2b59af09bdb98e89d42a95511209886fea
parentb2a9e9235656317a5608c2ef837ed0d7a4fd43ae (diff)
downloadtxr-e3a60abafb1e7740f3c278396f703f4e47ebcf29.tar.gz
txr-e3a60abafb1e7740f3c278396f703f4e47ebcf29.tar.bz2
txr-e3a60abafb1e7740f3c278396f703f4e47ebcf29.zip
* lib.c (plusv): Recognize cases to eliminate a wasteful plus call
with an initial element of zero.
-rw-r--r--ChangeLog5
-rw-r--r--lib.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8b219237..1751e296 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-12-10 Kaz Kylheku <kaz@kylheku.com>
+ * lib.c (plusv): Recognize cases to eliminate a wasteful plus call
+ with an initial element of zero.
+
+2011-12-10 Kaz Kylheku <kaz@kylheku.com>
+
* arith.c: File is now generated using TXR.
(NOOP): New macro.
(plus): Use NOOP macro.
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)