summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1751e296..64f54f1c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-12-10 Kaz Kylheku <kaz@kylheku.com>
+ * lib.c (mulv): Recognize cases to eliminate a wasteful mul call
+ with an initial element of 1.
+
+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.
diff --git a/lib.c b/lib.c
index 6109a5b3..84d61371 100644
--- a/lib.c
+++ b/lib.c
@@ -881,7 +881,11 @@ val mul(val anum, val bnum)
val mulv(val nlist)
{
- return reduce_left(func_n2(mul), nlist, num(1), nil);
+ if (!nlist)
+ return num(1);
+ else if (!cdr(nlist))
+ return car(nlist);
+ return reduce_left(func_n2(mul), cdr(nlist), car(nlist), nil);
}
val trunc(val anum, val bnum)