summaryrefslogtreecommitdiff
path: root/module/language/tree-il/peval.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/language/tree-il/peval.scm')
-rw-r--r--module/language/tree-il/peval.scm37
1 files changed, 4 insertions, 33 deletions
diff --git a/module/language/tree-il/peval.scm b/module/language/tree-il/peval.scm
index b8a0fe9d0..e1938e6bf 100644
--- a/module/language/tree-il/peval.scm
+++ b/module/language/tree-il/peval.scm
@@ -1,6 +1,6 @@
;;; Tree-IL partial evaluator
-;; Copyright (C) 2011-2014, 2017 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2014, 2017, 2019 Free Software Foundation, Inc.
;;;; This library is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU Lesser General Public
@@ -144,10 +144,8 @@
(fold (lambda (name sym res)
(vhash-consq sym (make-var name sym 0 #f) res))
res names gensyms))
- (($ <letrec> src in-order? names gensyms vals body)
- (fold (lambda (name sym res)
- (vhash-consq sym (make-var name sym 0 #f) res))
- res names gensyms))
+ (($ <letrec>)
+ (error "unexpected letrec"))
(($ <fix> src names gensyms vals body)
(fold (lambda (name sym res)
(vhash-consq sym (make-var name sym 0 #f) res))
@@ -592,10 +590,6 @@ top-level bindings from ENV and return the resulting expression."
(let ((body (loop body)))
(and body
(make-let src names gensyms vals body))))
- (($ <letrec> src in-order? names gensyms vals body)
- (let ((body (loop body)))
- (and body
- (make-letrec src in-order? names gensyms vals body))))
(($ <fix> src names gensyms vals body)
(let ((body (loop body)))
(and body
@@ -980,7 +974,7 @@ top-level bindings from ENV and return the resulting expression."
(lambda (names gensyms vals body)
(if (null? names) (error "what!" names))
(make-let src names gensyms vals body)))))))
- (($ <letrec> src in-order? names gensyms vals body)
+ (($ <fix> src names gensyms vals body)
;; Note the difference from the `let' case: here we use letrec*
;; so that the `visit' procedure for the new operands closes over
;; an environment that includes the operands. Also we don't try
@@ -993,23 +987,6 @@ top-level bindings from ENV and return the resulting expression."
(ops (make-bound-operands vars new vals visit))
(env* (fold extend-env env gensyms ops))
(body* (visit body counter ctx)))
- (if (and (const? body*) (every constant-expression? vals))
- ;; We may have folded a loop completely, even though there
- ;; might be cyclical references between the bound values.
- ;; Handle this degenerate case specially.
- body*
- (prune-bindings ops in-order? body* counter ctx
- (lambda (names gensyms vals body)
- (make-letrec src in-order?
- names gensyms vals body))))))
- (($ <fix> src names gensyms vals body)
- (letrec* ((visit (lambda (exp counter ctx)
- (loop exp env* counter ctx)))
- (vars (map lookup-var gensyms))
- (new (fresh-gensyms vars))
- (ops (make-bound-operands vars new vals visit))
- (env* (fold extend-env env gensyms ops))
- (body* (visit body counter ctx)))
(if (const? body*)
body*
(prune-bindings ops #f body* counter ctx
@@ -1104,12 +1081,6 @@ top-level bindings from ENV and return the resulting expression."
(make-let src* names vars vals
(simplify-conditional
(make-conditional src body subsequent alternate))))
- (($ <conditional> src
- ($ <letrec> src* in-order? names vars vals body)
- subsequent alternate)
- (make-letrec src* in-order? names vars vals
- (simplify-conditional
- (make-conditional src body subsequent alternate))))
(($ <conditional> src ($ <fix> src* names vars vals body)
subsequent alternate)
(make-fix src* names vars vals