From: Christophe Rhodes Date: Thu, 30 May 2002 12:30:53 +0000 (+0000) Subject: 0.7.4.7: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=d202a453b45430e04671b966c01bc067c2667442;p=sbcl.git 0.7.4.7: Slightly sanitized version of CSR "MAKE-LOAD-FORM bootstrapping problem" sbcl-devel 2002-05-27 ... write and use SB!XC:MAKE-LOAD-FORM-SAVING-SLOTS ... make the magic symbol :SB-JUST-DUMP-IT-NORMALLY; should now be arbitrarily changeable Minor unrelated cleanups to text files --- diff --git a/CREDITS b/CREDITS index 3e6c25f..8800487 100644 --- a/CREDITS +++ b/CREDITS @@ -578,10 +578,10 @@ William ("Bill") Newman: Christophe Rhodes: He ported SBCL to SPARC, made various port-related and SPARC-related - changes (like *BACKEND-FEATURES*, made many fixes and improvements - in the compiler's type system, has done a substantial amount of work - on bootstrapping SBCL under unrelated (non-SBCL, non-CMU-CL) Common - Lisps, and contributed in other ways as well. + changes (like *BACKEND-SUBFEATURES*), made many fixes and + improvements in the compiler's type system, has done a substantial + amount of work on bootstrapping SBCL under unrelated (non-SBCL, + non-CMU-CL) Common Lisps, and contributed in other ways as well. Stig Erik Sandoe: He showed how to convince the GNU toolchain to build SBCL in a way diff --git a/NEWS b/NEWS index 8e76c9b..59ebe6b 100644 --- a/NEWS +++ b/NEWS @@ -1129,6 +1129,9 @@ changes in sbcl-0.7.4 relative to sbcl-0.7.3: changes in sbcl-0.7.5 relative to sbcl-0.7.4: * bug 140 fixed: redefinition of classes with different supertypes is now reflected in the type hierarchy. (thanks to Pierre Mai) + * bug 158 fixed: the compiler can now deal with integer loop + increments different from 1; fixing this turned out also to fix + bug 164. * bug 169 fixed: no more bogus warnings about using lexical bindings despite the presence of perfectly good SPECIAL declarations. (thanks to David Lichteblau) diff --git a/build-order.lisp-expr b/build-order.lisp-expr index 508c40f..76acd22 100644 --- a/build-order.lisp-expr +++ b/build-order.lisp-expr @@ -68,6 +68,7 @@ ("src/code/cross-float" :not-target) ("src/code/cross-io" :not-target) ("src/code/cross-sap" :not-target) + ("src/code/cross-make-load-form" :not-target) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; stuff needed early both in cross-compilation host and in target Lisp diff --git a/src/code/cross-make-load-form.lisp b/src/code/cross-make-load-form.lisp new file mode 100644 index 0000000..7e26e75 --- /dev/null +++ b/src/code/cross-make-load-form.lisp @@ -0,0 +1,50 @@ +;;;; cross-compile-time-only replacements for make-load-form +;;;; machinery. + +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. + +;;; this probably deserves a word of explanation, as somewhat +;;; unusually we require the behaviour of this function to change +;;; depending on not at what stage we build it but at what stage we +;;; run it. This function will be called both when the host compiler +;;; dumps structures of type structure!object and when the +;;; cross-compiler does likewise; we don't control the dumper for the +;;; host compiler, so we use its own machinery for dumping host fasls, +;;; but we need to use target machinery for target fasls. We therefore +;;; dispatch on the presence of :SB-XC-HOST in the *FEATURES* list for +;;; which mechanism to use. This probably counts as a KLUDGE; a proper +;;; solution might be one or more of: +;;; +;;; * change def!struct to have two make-load-form-funs associated +;;; with it; one to run when CL:MAKE-LOAD-FORM is called, and one +;;; for SB!XC:MAKE-LOAD-FORM +;;; +;;; * implement MAKE-LOAD-FORM-SAVING-SLOTS properly rather than have +;;; this magic value, and use it consistently. +;;; +;;; Also, something along these lines can remove the special case in +;;; EMIT-MAKE-LOAD-FORM in src/compiler/main.lisp. +(defun sb!xc:make-load-form-saving-slots (object &rest args + &key slot-names environment) + (declare (ignore environment)) + (if (member :sb-xc-host *features*) + ;; we're still building the cross-compiler, so use the host's + ;; mechanism: + (apply #'make-load-form-saving-slots object args) + ;; we're building cold fasls, so use the target's mechanism: + ;; + ;; KLUDGE: This is essentially the same definition as for the + ;; target's MAKE-LOAD-FORM-SAVING-SLOTS; it would be nice to + ;; share code with that if possible. -- CSR, 2002-05-30 + (if slot-names + (bug "MAKE-LOAD-FORM-SAVING-SLOTS ~ + called with :SLOT-NAMES argument during cross-compilation") + :sb-just-dump-it-normally))) + diff --git a/src/code/defbangstruct.lisp b/src/code/defbangstruct.lisp index db3965a..7a8d3ae 100644 --- a/src/code/defbangstruct.lisp +++ b/src/code/defbangstruct.lisp @@ -76,8 +76,8 @@ (defun just-dump-it-normally (object &optional (env nil env-p)) (declare (type structure!object object)) (if env-p - (make-load-form-saving-slots object :environment env) - (make-load-form-saving-slots object))) + (sb!xc:make-load-form-saving-slots object :environment env) + (sb!xc:make-load-form-saving-slots object))) ;;; a MAKE-LOAD-FORM function for objects which don't use the load ;;; form system. This is used for LAYOUT objects because the special diff --git a/src/code/target-defstruct.lisp b/src/code/target-defstruct.lisp index ddce36a..858e452 100644 --- a/src/code/target-defstruct.lisp +++ b/src/code/target-defstruct.lisp @@ -452,7 +452,7 @@ (declare (ignore object environment)) (if slot-names (error "stub: MAKE-LOAD-FORM-SAVING-SLOTS :SLOT-NAMES not implemented") ; KLUDGE - :just-dump-it-normally)) + :sb-just-dump-it-normally)) ;;;; testing structure types diff --git a/src/cold/defun-load-or-cload-xcompiler.lisp b/src/cold/defun-load-or-cload-xcompiler.lisp index 3445a06..8fcc696 100644 --- a/src/cold/defun-load-or-cload-xcompiler.lisp +++ b/src/cold/defun-load-or-cload-xcompiler.lisp @@ -109,6 +109,7 @@ "MACRO-FUNCTION" "MACROEXPAND" "MACROEXPAND-1" "*MACROEXPAND-HOOK*" "MAKE-LOAD-FORM" + "MAKE-LOAD-FORM-SAVING-SLOTS" "PACKAGE" "PACKAGEP" "PROCLAIM" "SPECIAL-OPERATOR-P" diff --git a/src/compiler/main.lisp b/src/compiler/main.lisp index c44d601..89f7813 100644 --- a/src/compiler/main.lisp +++ b/src/compiler/main.lisp @@ -1562,7 +1562,7 @@ ;;; If the constant doesn't show up in *CONSTANTS-BEING-CREATED*, then ;;; we have to create it. We call MAKE-LOAD-FORM and check to see ;;; whether the creation form is the magic value -;;; :JUST-DUMP-IT-NORMALLY. If it is, then we don't do anything. The +;;; :SB-JUST-DUMP-IT-NORMALLY. If it is, then we don't do anything. The ;;; dumper will eventually get its hands on the object and use the ;;; normal structure dumping noise on it. ;;; @@ -1603,7 +1603,7 @@ constant condition))) (case creation-form - (:just-dump-it-normally + (:sb-just-dump-it-normally (fasl-validate-structure constant *compile-object*) t) (:ignore-it diff --git a/version.lisp-expr b/version.lisp-expr index ba0edd8..3e842c1 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.7.4.6" +"0.7.4.7"