summaryrefslogtreecommitdiff
path: root/module/language/tree-il/peval.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-05-28 11:20:29 -0400
committerAndy Wingo <wingo@pobox.com>2013-06-10 22:43:13 +0200
commit64fc50c294df9b6644fd40bec90eb8f4dfbc3907 (patch)
tree6a68d8f1d4d338f8a207accbd74db073f0f3f631 /module/language/tree-il/peval.scm
parent4828538940e6fcd1637f359fa5557acb4b6e9c91 (diff)
downloadguile-64fc50c294df9b6644fd40bec90eb8f4dfbc3907.tar.gz
Simplify let-values to let if consumer binds only one variable
* module/language/tree-il/peval.scm (peval): let-values with a consumer that has only one argument is the same as let. * test-suite/tests/peval.test ("partial evaluation"): Add test.
Diffstat (limited to 'module/language/tree-il/peval.scm')
-rw-r--r--module/language/tree-il/peval.scm4
1 files changed, 4 insertions, 0 deletions
diff --git a/module/language/tree-il/peval.scm b/module/language/tree-il/peval.scm
index c5a1c4e59..d7d561d4f 100644
--- a/module/language/tree-il/peval.scm
+++ b/module/language/tree-il/peval.scm
@@ -979,6 +979,10 @@ top-level bindings from ENV and return the resulting expression."
;; reconstruct the let-values, pevaling the consumer.
(let ((producer (for-values producer)))
(or (match consumer
+ (($ <lambda-case> src (req-name) #f #f #f () (req-sym) body #f)
+ (for-tail
+ (make-let src (list req-name) (list req-sym) (list producer)
+ body)))
(($ <lambda-case> src req opt rest #f inits gensyms body #f)
(let* ((nmin (length req))
(nmax (and (not rest) (+ nmin (if opt (length opt) 0)))))