diff --git a/module/language/tree-il/optimize.scm b/module/language/tree-il/optimize.scm index 3c3cb01ca..0567b0cfa 100644 --- a/module/language/tree-il/optimize.scm +++ b/module/language/tree-il/optimize.scm @@ -92,6 +92,15 @@ references to the new symbols." (vals (map (cut loop <> mapping) vals)) (body (loop body mapping))) (make-letrec src in-order? names new vals body))) + (($ src names gensyms vals body) + ;; Likewise. + (let* ((new (fresh-gensyms names)) + (mapping (fold vhash-consq mapping gensyms new)) + (vals (map (cut loop <> mapping) vals)) + (body (loop body mapping))) + (make-fix src names new vals body))) + (($ src exp body) + (make-let-values src (loop exp mapping) (loop body mapping))) (($ ) exp) (($ ) @@ -102,6 +111,24 @@ references to the new symbols." exp) (($ ) exp) + (($ src name exp) + (make-toplevel-set src name (loop exp mapping))) + (($ src name exp) + (make-toplevel-define src name (loop exp mapping))) + (($ src mod name public? exp) + (make-module-set src mod name public? (loop exp mapping))) + (($ src fluids vals body) + (make-dynlet src + (map (cut loop <> mapping) fluids) + (map (cut loop <> mapping) vals) + (loop body mapping))) + (($ src winder body unwinder) + (make-dynwind src + (loop winder mapping) + (loop body mapping) + (loop unwinder mapping))) + (($ src fluid) + (make-dynref src (loop fluid mapping))) (($ src condition subsequent alternate) (make-conditional src (loop condition mapping)