#| -*-Scheme-*-
-$Id: simplify.scm,v 1.1 1994/11/19 02:04:29 adams Exp $
+$Id: simplify.scm,v 1.2 1994/11/22 19:51:49 gjr Exp $
Copyright (c) 1994 Massachusetts Institute of Technology
(null? hairy-unused))
(let ((new-env
(simplify/env/modified-copy env0 not-simple-unused)))
- (simplify/bindings* new-env bindings* unsafe-cyclic-reference? body letify))
+ (simplify/bindings* new-env
+ bindings*
+ unsafe-cyclic-reference?
+ body
+ letify))
(let ((hairy-bindings
(lmap (lambda (hairy)
(assq (simplify/binding/name hairy)
(append
(map cadr hairy-bindings)
(list
- (let ((new-env (simplify/env/modified-copy env0 used-bindings)))
- (simplify/bindings* new-env (delq* hairy-bindings bindings*)
- unsafe-cyclic-reference? body letify))))))))))))
+ (let ((new-env
+ (simplify/env/modified-copy env0 used-bindings)))
+ (simplify/bindings* new-env
+ (delq* hairy-bindings bindings*)
+ unsafe-cyclic-reference?
+ body
+ letify))))))))))))
\f
(define (simplify/bindings* env0 bindings unsafe-cyclic-reference? body letify)
;; ENV0 is the current environment frame, as simplified by simplify/bindings
(define (simplify/substitute! node value)
(for-each (lambda (ref)
+ (simplify/remember*! ref value)
(form/rewrite! ref value))
(simplify/binding/ordinary-refs node))
(for-each (lambda (ref)
(define (simplify/remember new old)
(code-rewrite/remember new old))
+(define (simplify/remember*! new old)
+ (code-rewrite/remember*! new (code-rewrite/original-form old)))
+
(define (simplify/new-name prefix)
(new-variable prefix))
(begin
(set-simplify/binding/operator-refs!
binding
- (cons reference (simplify/binding/operator-refs binding)))
+ (cons reference
+ (simplify/binding/operator-refs binding)))
(if prev
(set-simplify/env/free-calls!
prev