From 984fdfe0dd7c0acfb915b11f7dba86ff3713778f Mon Sep 17 00:00:00 2001 From: William Harold Newman Date: Tue, 13 Nov 2001 16:05:27 +0000 Subject: [PATCH] 0.pre7.86.flaky7.6: (This version makes it all the way through xc, then dies shortly after TOPLEVEL-INIT.) I guess PLACEHOLDER-FENV is more persistent than I realized, so old CMU CL code to modify it is actually important, so SBCL should modify it too. --- src/compiler/ir1-translators.lisp | 10 +++++++--- src/compiler/ir1util.lisp | 2 +- version.lisp-expr | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/compiler/ir1-translators.lisp b/src/compiler/ir1-translators.lisp index 24a0ef5..b8f657c 100644 --- a/src/compiler/ir1-translators.lisp +++ b/src/compiler/ir1-translators.lisp @@ -610,11 +610,13 @@ "LABELS placeholder ~S" name))) names)) + ;; (like PAIRLIS but guaranteed to preserve ordering:) + (placeholder-fenv (mapcar #'cons names placeholder-funs)) ;; the real LABELS functions, compiled in a LEXENV which ;; includes the dummy LABELS functions (real-funs (let ((*lexenv* (make-lexenv - :functions (pairlis names placeholder-funs)))) + :functions placeholder-fenv))) (mapcar (lambda (name def) (ir1-convert-lambda def :source-name name @@ -624,8 +626,10 @@ ;; Modify all the references to the dummy function leaves so ;; that they point to the real function leaves. - (loop for real-fun in real-funs and placeholder-fun in placeholder-funs - do (substitute-leaf real-fun placeholder-fun)) + (loop for real-fun in real-funs and + placeholder-cons in placeholder-fenv do + (substitute-leaf real-fun (cdr placeholder-cons)) + (setf (cdr placeholder-cons) real-fun)) ;; Voila. (let ((*lexenv* (make-lexenv diff --git a/src/compiler/ir1util.lisp b/src/compiler/ir1util.lisp index f577861..26a25a6 100644 --- a/src/compiler/ir1util.lisp +++ b/src/compiler/ir1util.lisp @@ -1140,7 +1140,7 @@ (change-ref-leaf ref new-leaf)) (values)) -;;; Like SUBSITUTE-LEAF, only there is a predicate on the Ref to tell +;;; Like SUBSITUTE-LEAF, only there is a predicate on the REF to tell ;;; whether to substitute. (defun substitute-leaf-if (test new-leaf old-leaf) (declare (type leaf new-leaf old-leaf) (type function test)) diff --git a/version.lisp-expr b/version.lisp-expr index 97c29b0..3cdda55 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; for internal versions, especially for internal versions off the ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.pre7.86.flaky7.5" +"0.pre7.86.flaky7.6" -- 1.7.10.4