diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-12-10 10:22:07 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-12-10 10:22:07 -0800 |
commit | e3a60abafb1e7740f3c278396f703f4e47ebcf29 (patch) | |
tree | b22d3b2b59af09bdb98e89d42a95511209886fea | |
parent | b2a9e9235656317a5608c2ef837ed0d7a4fd43ae (diff) | |
download | txr-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib.c | 6 |
2 files changed, 10 insertions, 1 deletions
@@ -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. @@ -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) |