0.6.12.22:
authorWilliam Harold Newman <william.newman@airmail.net>
Wed, 6 Jun 2001 21:43:50 +0000 (21:43 +0000)
committerWilliam Harold Newman <william.newman@airmail.net>
Wed, 6 Jun 2001 21:43:50 +0000 (21:43 +0000)
DB logical pathname and COMPILE-FILE-PATHNAME patch from
sbcl-devel 2001-06-01
made FASL file version number independent of CPU type; also
made byte FASL file version number the same
many many changes more or less related to changing the FASL
file version number..
..created SB!FASL package to hold stuff like +FASL-FILE-VERSION+
which is common to loading and dumping
..renamed early-load.lisp to early-fasl.lisp
..renamed FASL-FILE stuff to FASL-OUTPUT
..*LAP-OUTPUT-FILE* doesn't need to be special (and so is
renamed to LAP-FASL-OUTPUT).
..exported FAST-READ stuff from SB-INT, so that it's visible
in SB-FASL
..deleted old stale load-related variables
*LOAD-BYTE-COMPILED-CODE-TO-DYNAMIC-SPACE*
*LOAD-X86-TLF-TO-DYNAMIC-SPACE*
*ENABLE-DYNAMIC-SPACE-CODE*
(hardwiring code which referred to them to use their
effectively-constant values T, NIL, T instead). (Now
we no longer need to worry about what package they're
in..)
..made some symbols external to SB-KERNEL so that
now-in-SB-FASL code could find them (and so that
some of the old :: prefixes could go away):
*FREE-INTERRUPT-CONTEXT-INDEX*,
*!INITIAL-FOO* for all FOO,
*CURRENT-CATCH-BLOCK*,
*CURRENT-UNWIND-PROTECT-BLOCK*,
*PSEUDO-ATOMIC-ATOMIC*, *PSEUDO-ATOMIC-INTERRUPTED*
..deleted unneeded "SB!IMPL::" prefixes for various
other *STATIC-SYMBOLS*-related symbols which're
exported (mostly from SB-KERNEL) already
..deleted unused %INITIAL-FUNCTION (smashing Alpha
*STATIC-SYMBOLS* indices)
suppressed some stuff in side-effectful-pathnames.test.sh
until we merge the DB cleanups from flaky2_branch

45 files changed:
BUGS
NEWS
make-host-2.sh
package-data-list.lisp-expr
src/assembly/alpha/assem-rtns.lisp
src/assembly/assemfile.lisp
src/assembly/x86/assem-rtns.lisp
src/code/array.lisp
src/code/byte-interp.lisp
src/code/cold-init.lisp
src/code/cross-io.lisp
src/code/debug-int.lisp
src/code/early-impl.lisp
src/code/fd-stream.lisp
src/code/filesys.lisp
src/code/fop.lisp
src/code/kernel.lisp
src/code/load.lisp
src/code/primordial-extensions.lisp
src/code/save.lisp
src/code/target-load.lisp
src/code/target-pathname.lisp
src/code/toplevel.lisp
src/code/x86-vm.lisp
src/compiler/alpha/backend-parms.lisp
src/compiler/alpha/nlx.lisp
src/compiler/alpha/parms.lisp
src/compiler/backend.lisp
src/compiler/byte-comp.lisp
src/compiler/dump.lisp
src/compiler/generic/genesis.lisp
src/compiler/generic/target-core.lisp
src/compiler/ir1tran.lisp
src/compiler/main.lisp
src/compiler/target-disassem.lisp
src/compiler/target-dump.lisp
src/compiler/x86/backend-parms.lisp
src/compiler/x86/macros.lisp
src/compiler/x86/nlx.lisp
src/compiler/x86/parms.lisp
src/runtime/gc.c
stems-and-flags.lisp-expr
tests/interface.pure.lisp
tests/pathnames.impure.lisp
version.lisp-expr

diff --git a/BUGS b/BUGS
index 10de5c0..efc6e60 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -956,6 +956,20 @@ Error in function C::GET-LAMBDA-TO-COMPILE:
   non-compound forms (like the bare symbol COUNT, in his example)
   here.
 
   non-compound forms (like the bare symbol COUNT, in his example)
   here.
 
+104:
+  (DESCRIBE 'SB-ALIEN:DEF-ALIEN-TYPE) reports the macro argument list
+  incorrectly:
+       DEF-ALIEN-TYPE is
+         an external symbol
+         in #<PACKAGE "SB-ALIEN">.
+       Macro-function: #<FUNCTION "DEF!MACRO DEF-ALIEN-TYPE" {19F4A39}>
+         Macro arguments:  (#:whole-470 #:environment-471)
+         On Sat, May 26, 2001 09:45:57 AM CDT it was compiled from:
+         /usr/stuff/sbcl/src/code/host-alieneval.lisp
+           Created: Monday, March 12, 2001 07:47:43 AM CST
+
+105:
+  (DESCRIBE 'STREAM-READ-BYTE)
 
 KNOWN BUGS RELATED TO THE IR1 INTERPRETER
 
 
 KNOWN BUGS RELATED TO THE IR1 INTERPRETER
 
diff --git a/NEWS b/NEWS
index 5032fb2..9ab2a07 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -741,6 +741,8 @@ changes in sbcl-0.6.13 relative to sbcl-0.6.12:
   patch, so that DISASSEMBLE output is much nicer.
 * better error handling in CLOS method combination, thanks to 
   Martin Atzmueller and Pierre Mai
   patch, so that DISASSEMBLE output is much nicer.
 * better error handling in CLOS method combination, thanks to 
   Martin Atzmueller and Pierre Mai
+* Logical pathnames work better, thanks to various fixes and 
+  tests from Dan Barlow.
 * Hash tables can be printed readably, as inspired by CMU CL code
   of Eric Marsden and SBCL code of Martin Atzmueller.
 * a new slam.sh hack to shorten the edit/compile/debug cycle for
 * Hash tables can be printed readably, as inspired by CMU CL code
   of Eric Marsden and SBCL code of Martin Atzmueller.
 * a new slam.sh hack to shorten the edit/compile/debug cycle for
@@ -756,6 +758,11 @@ changes in sbcl-0.6.13 relative to sbcl-0.6.12:
   COMPILE-FILE is no longer supported, so that now every function
   gets an entry point, so that block compilation looks a little
   more like the plain vanilla ANSI section 3.2.2.3 scheme.
   COMPILE-FILE is no longer supported, so that now every function
   gets an entry point, so that block compilation looks a little
   more like the plain vanilla ANSI section 3.2.2.3 scheme.
+* Fasl file version numbers are now independent of the target CPU,
+  since historically most system changes which required version
+  number changes have affected all CPUs equally. Similarly, 
+  the byte fasl file version is now equal to the ordinary
+  fasl file version.
 
 planned incompatible changes in 0.7.x:
 * The debugger prompt sequence now goes "5]", "5[2]", "5[3]", etc.
 
 planned incompatible changes in 0.7.x:
 * The debugger prompt sequence now goes "5]", "5[2]", "5[3]", etc.
index 8b0979a..dd6751e 100644 (file)
@@ -50,7 +50,7 @@ $SBCL_XC_HOST <<-'EOF' || exit 1
        (load "src/cold/defun-load-or-cload-xcompiler.lisp")
        (load-or-cload-xcompiler #'host-load-stem)
         (defun proclaim-target-optimization ()
        (load "src/cold/defun-load-or-cload-xcompiler.lisp")
        (load-or-cload-xcompiler #'host-load-stem)
         (defun proclaim-target-optimization ()
-          (let ((debug (if (find :sb-show *shebang-features*) 2 1)))
+          (let ((debug (if (position :sb-show *shebang-features*) 2 1)))
            (sb-xc:proclaim `(optimize (compilation-speed 1)
                                       (debug ,debug)
                                       (sb!ext:inhibit-warnings 2)
            (sb-xc:proclaim `(optimize (compilation-speed 1)
                                       (debug ,debug)
                                       (sb!ext:inhibit-warnings 2)
@@ -96,14 +96,14 @@ $SBCL_XC_HOST <<-'EOF' || exit 1
         ;; Let's check that the type system was reasonably sane. (It's
        ;; easy to spend a long time wandering around confused trying
        ;; to debug cold init if it wasn't.)
         ;; Let's check that the type system was reasonably sane. (It's
        ;; easy to spend a long time wandering around confused trying
        ;; to debug cold init if it wasn't.)
-       (when (find :sb-test *shebang-features*)
+       (when (position :sb-test *shebang-features*)
          (load "tests/type.after-xc.lisp"))
        ;; If you're experimenting with the system under a
         ;; cross-compilation host which supports CMU-CL-style SAVE-LISP,
         ;; this can be a good time to run it. The resulting core isn't
        ;; used in the normal build, but can be handy for experimenting
        ;; with the system. (See slam.sh for an example.)
          (load "tests/type.after-xc.lisp"))
        ;; If you're experimenting with the system under a
         ;; cross-compilation host which supports CMU-CL-style SAVE-LISP,
         ;; this can be a good time to run it. The resulting core isn't
        ;; used in the normal build, but can be handy for experimenting
        ;; with the system. (See slam.sh for an example.)
-       (when (find :sb-after-xc-core *shebang-features*)
+       (when (position :sb-after-xc-core *shebang-features*)
           #+cmu (ext:save-lisp "output/after-xc.core" :load-init-file nil)
           #+sbcl (sb-ext:save-lisp-and-die "output/after-xc.core")
          )
           #+cmu (ext:save-lisp "output/after-xc.core" :load-init-file nil)
           #+sbcl (sb-ext:save-lisp-and-die "output/after-xc.core")
          )
index 1fc9049..6760f3d 100644 (file)
@@ -77,7 +77,7 @@
  #s(sb-cold:package-data
     :name "SB!ASSEM"
     :doc "private: the assembler, used by the compiler"
  #s(sb-cold:package-data
     :name "SB!ASSEM"
     :doc "private: the assembler, used by the compiler"
-    :use ("CL" "SB!INT" "SB!EXT")
+    :use ("CL" "SB!EXT" "SB!INT")
     :export ("ASSEMBLY-UNIT"
 
              "*ASSEM-SCHEDULER-P*"
     :export ("ASSEMBLY-UNIT"
 
              "*ASSEM-SCHEDULER-P*"
     ;; package for this? But it seems like a fairly low priority.)
     ;; (Probably the same considerations also explain why BIGNUM is
     ;;in the USE list.)
     ;; package for this? But it seems like a fairly low priority.)
     ;; (Probably the same considerations also explain why BIGNUM is
     ;;in the USE list.)
-    :use ("CL" "SB!ALIEN-INTERNALS" "SB!ALIEN" "SB!BIGNUM"
-          #!+sb-dyncount "SB-DYNCOUNT"
-          "SB!EXT" "SB!INT" "SB!KERNEL" "SB!ASSEM" "SB!SYS")
+    :use ("CL" "SB!ALIEN-INTERNALS" "SB!ALIEN" "SB!ASSEM" "SB!BIGNUM"
+          #!+sb-dyncount "SB-DYNCOUNT" "SB!EXT" "SB!FASL" "SB!INT"
+          "SB!KERNEL" "SB!SYS")
     :reexport ("SLOT" "CODE-INSTRUCTIONS" "FLUSHABLE")
     :export ("%ALIEN-FUNCALL" "%CATCH-BREAKUP" "%CONTINUE-UNWIND" "&MORE"
               "%LISTIFY-REST-ARGS" "%MORE-ARG" "%MORE-ARG-VALUES"
               "%UNWIND-PROTECT-BREAKUP"
 
               "*BACKEND-BYTE-ORDER*" "*BACKEND-DISASSEM-PARAMS*"
     :reexport ("SLOT" "CODE-INSTRUCTIONS" "FLUSHABLE")
     :export ("%ALIEN-FUNCALL" "%CATCH-BREAKUP" "%CONTINUE-UNWIND" "&MORE"
               "%LISTIFY-REST-ARGS" "%MORE-ARG" "%MORE-ARG-VALUES"
               "%UNWIND-PROTECT-BREAKUP"
 
               "*BACKEND-BYTE-ORDER*" "*BACKEND-DISASSEM-PARAMS*"
-              "*BACKEND-FASL-FILE-IMPLEMENTATION*"
-              "*BACKEND-FASL-FILE-TYPE*" "*BACKEND-FASL-FILE-VERSION*"
               "*BACKEND-INFO-ENVIRONMENT*"
               "*BACKEND-INSTRUCTION-FLAVORS*" "*BACKEND-INSTRUCTION-FORMATS*"
               "*BACKEND-INTERNAL-ERRORS*" "*BACKEND-PAGE-SIZE*"
               "*BACKEND-INFO-ENVIRONMENT*"
               "*BACKEND-INSTRUCTION-FLAVORS*" "*BACKEND-INSTRUCTION-FORMATS*"
               "*BACKEND-INTERNAL-ERRORS*" "*BACKEND-PAGE-SIZE*"
               "*CODE-SEGMENT*" 
               "*CONVERTING-FOR-INTERPRETER*"
               "*COUNT-VOP-USAGES*" "*ELSEWHERE*"
               "*CODE-SEGMENT*" 
               "*CONVERTING-FOR-INTERPRETER*"
               "*COUNT-VOP-USAGES*" "*ELSEWHERE*"
-              "*FASL-HEADER-STRING-START-STRING*"
-              "*FASL-HEADER-STRING-STOP-CHAR-CODE*"
               "*SETF-ASSUMED-FBOUNDP*"
               "*SUPPRESS-VALUES-DECLARATION*"
 
               "*SETF-ASSUMED-FBOUNDP*"
               "*SUPPRESS-VALUES-DECLARATION*"
 
               "CHECK-SIGNED-BYTE-32" "CHECK-SYMBOL" "CHECK-UNSIGNED-BYTE-32"
               "CLOSURE-INIT" "CLOSURE-REF"
               "CODE-CONSTANT-REF" "CODE-CONSTANT-SET" 
               "CHECK-SIGNED-BYTE-32" "CHECK-SYMBOL" "CHECK-UNSIGNED-BYTE-32"
               "CLOSURE-INIT" "CLOSURE-REF"
               "CODE-CONSTANT-REF" "CODE-CONSTANT-SET" 
-              "COMPILE-FOR-EVAL" "COMPONENT" "COMPONENT-HEADER-LENGTH"
+              "COMPILE-FOR-EVAL" "COMPILER-ERROR"
+              "COMPONENT" "COMPONENT-HEADER-LENGTH"
               "COMPONENT-INFO" "COMPONENT-LIVE-TN" "COMPUTE-FUNCTION"
               "COMPUTE-OLD-NFP" "COPY-MORE-ARG" 
               "CURRENT-BINDING-POINTER" "CURRENT-NFP-TN"
               "COMPONENT-INFO" "COMPONENT-LIVE-TN" "COMPUTE-FUNCTION"
               "COMPUTE-OLD-NFP" "COPY-MORE-ARG" 
               "CURRENT-BINDING-POINTER" "CURRENT-NFP-TN"
               "NOTE-NEXT-INSTRUCTION"
               "SET-SLOT"
               "LOCATION-NUMBER"
               "NOTE-NEXT-INSTRUCTION"
               "SET-SLOT"
               "LOCATION-NUMBER"
-              "BYTE-FASL-FILE-VERSION"
               "*COMPONENT-BEING-COMPILED*"
               "BLOCK-NUMBER"
               "BACKEND"
               "*COMPONENT-BEING-COMPILED*"
               "BLOCK-NUMBER"
               "BACKEND"
-              "BACKEND-BYTE-FASL-FILE-IMPLEMENTATION"
               "IR2-BLOCK-BLOCK"
               "DISASSEM-BYTE-COMPONENT"
               "FUNCALLABLE-INSTANCE-LEXENV"
               "IR2-BLOCK-BLOCK"
               "DISASSEM-BYTE-COMPONENT"
               "FUNCALLABLE-INSTANCE-LEXENV"
              "IR2-COMPONENT-DYNCOUNT-INFO"
              "DYNCOUNT-INFO" "DYNCOUNT-INFO-P"))
 
              "IR2-COMPONENT-DYNCOUNT-INFO"
              "DYNCOUNT-INFO" "DYNCOUNT-INFO-P"))
 
+ #s(sb-cold:package-data
+    :name "SB!FASL"
+    :doc "private: stuff related to FASL load/dump logic (and GENESIS)"
+    :use ("CL" "SB!ALIEN" "SB!ASSEM" "SB!BIGNUM" "SB!C" "SB!C-CALL"
+          "SB!EXT" "SB!INT" "SB!KERNEL" "SB!SYS")
+    :export ("*ASSEMBLER-ROUTINES*"
+             "+BACKEND-FASL-FILE-IMPLEMENTATION+"
+             "*BACKEND-FASL-FILE-TYPE*"
+             "CLOSE-FASL-OUTPUT"
+             "DUMP-ASSEMBLER-ROUTINES"
+             "DUMP-OBJECT"
+             "FASL-CONSTANT-ALREADY-DUMPED-P"
+             "+FASL-FILE-VERSION+"
+             "FASL-DUMP-BYTE-COMPONENT"
+             "FASL-DUMP-COLD-LOAD-FORM" "FASL-DUMP-COMPONENT"
+             "FASL-DUMP-LOAD-TIME-VALUE" "FASL-DUMP-LOAD-TIME-VALUE-LAMBDA"
+             "FASL-DUMP-SOURCE-INFO" "FASL-DUMP-TOP-LEVEL-LAMBDA-CALL"
+             "FASL-NOTE-HANDLE-FOR-CONSTANT"
+             "FASL-OUTPUT" "FASL-OUTPUT-P" "FASL-OUTPUT-STREAM"
+             "FASL-VALIDATE-STRUCTURE"
+             "*!LOAD-TIME-VALUES*"
+             "LOAD-TYPE-PREDICATE"
+             "OPEN-FASL-OUTPUT"
+             "*!REVERSED-COLD-TOPLEVELS*"
+             "*STATIC-FOREIGN-SYMBOLS*"))
+
  ;; This package is a grab bag for things which used to be internal
  ;; symbols in package COMMON-LISP. Lots of these symbols are accessed
  ;; with explicit SB!IMPL:: prefixes in the code. It would be nice to
  ;; reduce the use of this practice, so if symbols from here which are
  ;; accessed that way are found to belong more appropriately in
  ;; This package is a grab bag for things which used to be internal
  ;; symbols in package COMMON-LISP. Lots of these symbols are accessed
  ;; with explicit SB!IMPL:: prefixes in the code. It would be nice to
  ;; reduce the use of this practice, so if symbols from here which are
  ;; accessed that way are found to belong more appropriately in
- ;; an existing package (e.g. KERNEL or SYS or EXT) or a new package
- ;; (e.g. something to collect together all the FOP stuff), I
+ ;; an existing package (e.g. KERNEL or SYS or EXT or FASL), I
  ;; (WHN 19990223) encourage maintainers to move them there..
  ;;
  ;; ..except that it's getting so big and crowded that maybe it
  ;; (WHN 19990223) encourage maintainers to move them there..
  ;;
  ;; ..except that it's getting so big and crowded that maybe it
     :name "SB!IMPL"
     :doc "private: a grab bag of implementation details"
     :use ("CL" "SB!ALIEN" "SB!BIGNUM" "SB!C-CALL" "SB!DEBUG" "SB!EXT"
     :name "SB!IMPL"
     :doc "private: a grab bag of implementation details"
     :use ("CL" "SB!ALIEN" "SB!BIGNUM" "SB!C-CALL" "SB!DEBUG" "SB!EXT"
-          "SB!GRAY" "SB!INT" "SB!KERNEL" "SB!SYS"))
+          "SB!FASL" "SB!GRAY" "SB!INT" "SB!KERNEL" "SB!SYS"))
 
  #s(sb-cold:package-data
     :name "SB!DEBUG"
 
  #s(sb-cold:package-data
     :name "SB!DEBUG"
@@ -588,14 +608,14 @@ like *STACK-TOP-HINT*"
  #s(sb-cold:package-data
     :name "SB!FORMAT"
     :doc "private: implementation of FORMAT and friends"
  #s(sb-cold:package-data
     :name "SB!FORMAT"
     :doc "private: implementation of FORMAT and friends"
-    :use ("CL" "SB!KERNEL" "SB!EXT" "SB!INT"))
+    :use ("CL" "SB!EXT" "SB!INT" "SB!KERNEL"))
 
  #s(sb-cold:package-data
     :name "SB!GRAY"
     :doc
 "public: an implementation of the stream-definition-by-user
 Lisp extension proposal by David N. Gray"
 
  #s(sb-cold:package-data
     :name "SB!GRAY"
     :doc
 "public: an implementation of the stream-definition-by-user
 Lisp extension proposal by David N. Gray"
-    :use ("CL" "SB!KERNEL" "SB!EXT" "SB!INT")
+    :use ("CL" "SB!EXT" "SB!INT" "SB!KERNEL")
     :export ("FUNDAMENTAL-BINARY-STREAM" "FUNDAMENTAL-BINARY-INPUT-STREAM"
              "FUNDAMENTAL-BINARY-OUTPUT-STREAM" "FUNDAMENTAL-CHARACTER-STREAM"
              "FUNDAMENTAL-CHARACTER-INPUT-STREAM"
     :export ("FUNDAMENTAL-BINARY-STREAM" "FUNDAMENTAL-BINARY-INPUT-STREAM"
              "FUNDAMENTAL-BINARY-OUTPUT-STREAM" "FUNDAMENTAL-CHARACTER-STREAM"
              "FUNDAMENTAL-CHARACTER-INPUT-STREAM"
@@ -616,7 +636,7 @@ Lisp extension proposal by David N. Gray"
 "private: miscellaneous unsupported extensions to the ANSI spec. Most of
 the stuff in here originated in CMU CL's EXTENSIONS package and is
 retained, possibly temporariliy, because it might be used internally."
 "private: miscellaneous unsupported extensions to the ANSI spec. Most of
 the stuff in here originated in CMU CL's EXTENSIONS package and is
 retained, possibly temporariliy, because it might be used internally."
-    :use ("CL" "SB!ALIEN" "SB!C-CALL" "SB!SYS" "SB!GRAY")
+    :use ("CL" "SB!ALIEN" "SB!C-CALL" "SB!GRAY" "SB!FASL" "SB!SYS")
     :export ("*AFTER-SAVE-INITIALIZATIONS*" "*BEFORE-SAVE-INITIALIZATIONS*"
 
              "*ALL-MODIFIER-NAMES*"
     :export ("*AFTER-SAVE-INITIALIZATIONS*" "*BEFORE-SAVE-INITIALIZATIONS*"
 
              "*ALL-MODIFIER-NAMES*"
@@ -668,7 +688,7 @@ retained, possibly temporariliy, because it might be used internally."
              ;; miscellaneous non-standard but handy user-level functions..
              "ASSQ" "DELQ" "MEMQ" "POSQ" "NEQ"
              "%FIND-PACKAGE-OR-LOSE" "FIND-UNDELETED-PACKAGE-OR-LOSE"
              ;; miscellaneous non-standard but handy user-level functions..
              "ASSQ" "DELQ" "MEMQ" "POSQ" "NEQ"
              "%FIND-PACKAGE-OR-LOSE" "FIND-UNDELETED-PACKAGE-OR-LOSE"
-             "SANE-PACKAGE"
+             "SANE-PACKAGE" "SANE-DEFAULT-PATHNAME-DEFAULTS"
              "CIRCULAR-LIST-P"
              "SWAPPED-ARGS-FUN"
              "ANY/TYPE" "EVERY/TYPE"
              "CIRCULAR-LIST-P"
              "SWAPPED-ARGS-FUN"
              "ANY/TYPE" "EVERY/TYPE"
@@ -807,6 +827,21 @@ retained, possibly temporariliy, because it might be used internally."
              ;; a sort of quasi unbound tag for use in hash tables
              "+EMPTY-HT-SLOT+"
 
              ;; a sort of quasi unbound tag for use in hash tables
              "+EMPTY-HT-SLOT+"
 
+             ;; low-level i/o stuff
+             "DONE-WITH-FAST-READ-BYTE"
+             "DONE-WITH-FAST-READ-CHAR"
+             "FAST-READ-BYTE"
+             "FAST-READ-BYTE-REFILL"
+             "FAST-READ-CHAR"
+             "FAST-READ-CHAR-REFILL"
+             "FAST-READ-S-INTEGER"
+             "FAST-READ-U-INTEGER"
+             "FAST-READ-VARIABLE-U-INTEGER"
+             "FILE-NAME"
+             "INTERN*"
+             "PREPARE-FOR-FAST-READ-BYTE"
+             "PREPARE-FOR-FAST-READ-CHAR"
+
              ;; not used any more, I think -- WHN 19991206
              #+nil
              ("SERVE-BUTTON-PRESS"
              ;; not used any more, I think -- WHN 19991206
              #+nil
              ("SERVE-BUTTON-PRESS"
@@ -842,7 +877,7 @@ retained, possibly temporariliy, because it might be used internally."
 integration' (said CMU CL architecture.tex) and that probably was and
 is a good idea, but see SB-SYS for blurring of boundaries."
     :use ("CL" "SB!ALIEN" "SB!ALIEN-INTERNALS" "SB!BIGNUM"
 integration' (said CMU CL architecture.tex) and that probably was and
 is a good idea, but see SB-SYS for blurring of boundaries."
     :use ("CL" "SB!ALIEN" "SB!ALIEN-INTERNALS" "SB!BIGNUM"
-          "SB!EXT" "SB!INT" "SB!SYS" "SB!GRAY")
+          "SB!EXT" "SB!FASL" "SB!INT" "SB!SYS" "SB!GRAY")
     :import-from (("SB!C-CALL" "VOID"))
     :reexport ("DEF!STRUCT" "DEF!MACRO" "VOID" "WEAK-POINTER-P")
     :export ("%ACOS" "%ACOSH" "%ARRAY-AVAILABLE-ELEMENTS"
     :import-from (("SB!C-CALL" "VOID"))
     :reexport ("DEF!STRUCT" "DEF!MACRO" "VOID" "WEAK-POINTER-P")
     :export ("%ACOS" "%ACOSH" "%ARRAY-AVAILABLE-ELEMENTS"
@@ -955,11 +990,12 @@ is a good idea, but see SB-SYS for blurring of boundaries."
              "DOUBLE-FLOAT-P" "FLOAT-WAIT"
              "DYNAMIC-SPACE-FREE-POINTER"
              "!DEFUN-FROM-COLLECTED-COLD-INIT-FORMS"
              "DOUBLE-FLOAT-P" "FLOAT-WAIT"
              "DYNAMIC-SPACE-FREE-POINTER"
              "!DEFUN-FROM-COLLECTED-COLD-INIT-FORMS"
-             "ERROR-NUMBER-OR-LOSE" "FDOCUMENTATION" "FILENAME"
+             "ERROR-NUMBER-OR-LOSE" "FDEFINITION-OBJECT"
+             "FDOCUMENTATION" "FILENAME"
              "FIND-AND-INIT-OR-CHECK-LAYOUT"
              "FLOAT-EXPONENT" "FLOAT-FORMAT-DIGITS" "FLOAT-FORMAT-NAME"
              "FLOAT-FORMAT-MAX" "FLOATING-POINT-EXCEPTION"
              "FIND-AND-INIT-OR-CHECK-LAYOUT"
              "FLOAT-EXPONENT" "FLOAT-FORMAT-DIGITS" "FLOAT-FORMAT-NAME"
              "FLOAT-FORMAT-MAX" "FLOATING-POINT-EXCEPTION"
-             "FORM" "FUNCALLABLE-INSTANCE-P"
+             "FORM" "*FREE-INTERRUPT-CONTEXT-INDEX*" "FUNCALLABLE-INSTANCE-P"
              "FUNCTION-CODE-HEADER" "FUNCTION-DOC"
              "FUNCTION-TYPE"
              "FUNCTION-TYPE-ALLOWP"
              "FUNCTION-CODE-HEADER" "FUNCTION-DOC"
              "FUNCTION-TYPE"
              "FUNCTION-TYPE-ALLOWP"
@@ -976,7 +1012,11 @@ is a good idea, but see SB-SYS for blurring of boundaries."
              "HAIRY-TYPE-CHECK-TEMPLATE-NAME" "HAIRY-TYPE-SPECIFIER"
              "HANDLE-CIRCULARITY" "IGNORE-IT"
              "ILL-BIN" "ILL-BOUT" "ILL-IN" "ILL-OUT"
              "HAIRY-TYPE-CHECK-TEMPLATE-NAME" "HAIRY-TYPE-SPECIFIER"
              "HANDLE-CIRCULARITY" "IGNORE-IT"
              "ILL-BIN" "ILL-BOUT" "ILL-IN" "ILL-OUT"
-             "INDEX-TOO-LARGE-ERROR" "INTEGER-DECODE-DOUBLE-FLOAT"
+             "INDEX-TOO-LARGE-ERROR"
+             "*!INITIAL-ASSEMBLER-ROUTINES*"
+             "*!INITIAL-FDEFN-OBJECTS*" "*!INITIAL-FOREIGN-SYMBOLS*"
+             "*!INITIAL-LAYOUTS*" "*!INITIAL-SYMBOLS*"
+             "INTEGER-DECODE-DOUBLE-FLOAT"
              "INTEGER-DECODE-LONG-FLOAT" "INTEGER-DECODE-SINGLE-FLOAT"
              "INTERNAL-ERROR" "INTERNAL-TIME"
              "INTERSECTION-TYPE" "INTERSECTION-TYPE-P"
              "INTEGER-DECODE-LONG-FLOAT" "INTEGER-DECODE-SINGLE-FLOAT"
              "INTERNAL-ERROR" "INTERNAL-TIME"
              "INTERSECTION-TYPE" "INTERSECTION-TYPE-P"
@@ -1078,14 +1118,16 @@ is a good idea, but see SB-SYS for blurring of boundaries."
              "PACKAGE-HASHTABLE-SIZE" "PACKAGE-HASHTABLE-FREE"
              "PACKAGE-INTERNAL-SYMBOLS" "PACKAGE-EXTERNAL-SYMBOLS"
              "PARSE-DEFMACRO" "PARSE-LAMBDA-LIST" "PARSE-UNKNOWN-TYPE"
              "PACKAGE-HASHTABLE-SIZE" "PACKAGE-HASHTABLE-FREE"
              "PACKAGE-INTERNAL-SYMBOLS" "PACKAGE-EXTERNAL-SYMBOLS"
              "PARSE-DEFMACRO" "PARSE-LAMBDA-LIST" "PARSE-UNKNOWN-TYPE"
-             "PARSE-UNKNOWN-TYPE-SPECIFIER"
-             "PATHNAME-DESIGNATOR" "PUNT-PRINT-IF-TOO-LONG"
+             "PARSE-UNKNOWN-TYPE-SPECIFIER" "PATHNAME-DESIGNATOR"
+             #+x86 "*PSEUDO-ATOMIC-ATOMIC*"
+             #+x86 "*PSEUDO-ATOMIC-INTERRUPTED*"
+             "PUNT-PRINT-IF-TOO-LONG"
              "READER-PACKAGE-ERROR"
              #!+gengc "*SAVED-STATE-CHAIN*"
              "SCALE-DOUBLE-FLOAT" "SCALE-LONG-FLOAT"
              "SCALE-SINGLE-FLOAT"
              "SEQUENCE-END" "SEQUENCE-OF-CHECKED-LENGTH-GIVEN-TYPE"
              "READER-PACKAGE-ERROR"
              #!+gengc "*SAVED-STATE-CHAIN*"
              "SCALE-DOUBLE-FLOAT" "SCALE-LONG-FLOAT"
              "SCALE-SINGLE-FLOAT"
              "SEQUENCE-END" "SEQUENCE-OF-CHECKED-LENGTH-GIVEN-TYPE"
-             "SET-HEADER-DATA" "SHIFT-TOWARDS-END"
+             "SET-ARRAY-HEADER" "SET-HEADER-DATA" "SHIFT-TOWARDS-END"
              "SHIFT-TOWARDS-START" "SHRINK-VECTOR" "SIGNED-BYTE-32-P"
              "SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT-P"
              "SIMPLE-ARRAY-COMPLEX-LONG-FLOAT-P"
              "SHIFT-TOWARDS-START" "SHRINK-VECTOR" "SIGNED-BYTE-32-P"
              "SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT-P"
              "SIMPLE-ARRAY-COMPLEX-LONG-FLOAT-P"
@@ -1237,9 +1279,6 @@ is a good idea, but see SB-SYS for blurring of boundaries."
              "!BACKQ-COLD-INIT" "!SHARPM-COLD-INIT"
              "!CLASS-FINALIZE" "GC-COLD-INIT-OR-REINIT"
 
              "!BACKQ-COLD-INIT" "!SHARPM-COLD-INIT"
              "!CLASS-FINALIZE" "GC-COLD-INIT-OR-REINIT"
 
-             ;; These belong in an "SB!LOAD" package someday.
-             "*STATIC-FOREIGN-SYMBOLS*" "*ASSEMBLER-ROUTINES*"
-
              ;; Note: These are out of lexicographical order because in CMU CL
              ;; they were defined as internal symbols in package "CL"
              ;; imported into package "C", as opposed to what we're
              ;; Note: These are out of lexicographical order because in CMU CL
              ;; they were defined as internal symbols in package "CL"
              ;; imported into package "C", as opposed to what we're
@@ -1542,7 +1581,7 @@ no guarantees of interface stability."
              "EPROTONOSUPPORT" "UNIX-SIGBLOCK" "SIGIO" "ENOMEM" "SIGEMT"
              "EFAULT" "ENODEV" "EIO" "EVICEERR" "ETXTBSY" "EWOULDBLOCK"
              "EAGAIN" "EDESTADDRREQ" "ENOEXEC" "ENETUNREACH" "ENOTEMPTY"
              "EPROTONOSUPPORT" "UNIX-SIGBLOCK" "SIGIO" "ENOMEM" "SIGEMT"
              "EFAULT" "ENODEV" "EIO" "EVICEERR" "ETXTBSY" "EWOULDBLOCK"
              "EAGAIN" "EDESTADDRREQ" "ENOEXEC" "ENETUNREACH" "ENOTEMPTY"
-             "UNIX-MAYBE-PREPEND-CURRENT-DIRECTORY" "ENFILE"
+             "ENFILE"
              "SIGTTOU" "EEXIST" "SIGPROF" "SIGSTOP" "ENETRESET" "SIGURG"
              "ENOBUFS" "EPROCLIM" "EROFS" "ETOOMANYREFS" "UNIX-FILE-KIND"
              "ELOCAL" "UNIX-SIGSETMASK" "EREMOTE" "ESOCKTNOSUPPORT"
              "SIGTTOU" "EEXIST" "SIGPROF" "SIGSTOP" "ENETRESET" "SIGURG"
              "ENOBUFS" "EPROCLIM" "EROFS" "ETOOMANYREFS" "UNIX-FILE-KIND"
              "ELOCAL" "UNIX-SIGSETMASK" "EREMOTE" "ESOCKTNOSUPPORT"
@@ -1601,8 +1640,9 @@ no guarantees of interface stability."
     :doc
 "internal: the default place to hide information about the hardware and data
 structure representations"
     :doc
 "internal: the default place to hide information about the hardware and data
 structure representations"
-    :use ("CL" "SB!ALIEN" "SB!ALIEN-INTERNALS" "SB!ASSEM"
-          "SB!C" "SB!C-CALL" "SB!EXT" "SB!INT" "SB!KERNEL" "SB!SYS" "SB!UNIX")
+    :use ("CL" "SB!ALIEN" "SB!ALIEN-INTERNALS" "SB!ASSEM" "SB!C"
+          "SB!C-CALL" "SB!EXT" "SB!FASL" "SB!INT" "SB!KERNEL"
+          "SB!SYS" "SB!UNIX")
     :export ("*ASSEMBLY-UNIT-LENGTH*" "*PRIMITIVE-OBJECTS*"
              "AFTER-BREAKPOINT-TRAP"
              "ANY-REG-SC-NUMBER" "ARRAY-DATA-SLOT" "ARRAY-DIMENSIONS-OFFSET"
     :export ("*ASSEMBLY-UNIT-LENGTH*" "*PRIMITIVE-OBJECTS*"
              "AFTER-BREAKPOINT-TRAP"
              "ANY-REG-SC-NUMBER" "ARRAY-DATA-SLOT" "ARRAY-DIMENSIONS-OFFSET"
@@ -1754,7 +1794,6 @@ structure representations"
             #!-gencgc "DYNAMIC-1-SPACE-END" 
              "READ-ONLY-SPACE-START" "READ-ONLY-SPACE-END"
              "TARGET-BYTE-ORDER"
             #!-gencgc "DYNAMIC-1-SPACE-END" 
              "READ-ONLY-SPACE-START" "READ-ONLY-SPACE-END"
              "TARGET-BYTE-ORDER"
-             "TARGET-FASL-CODE-FORMAT" "TARGET-FASL-FILE-TYPE"
              "TARGET-HEAP-ADDRESS-SPACE" "*TARGET-MOST-NEGATIVE-FIXNUM*"
              "*TARGET-MOST-POSITIVE-FIXNUM*" 
              "STATIC-SPACE-START" "STATIC-SPACE-END"
              "TARGET-HEAP-ADDRESS-SPACE" "*TARGET-MOST-NEGATIVE-FIXNUM*"
              "*TARGET-MOST-POSITIVE-FIXNUM*" 
              "STATIC-SPACE-START" "STATIC-SPACE-END"
index 06aa556..c005c0f 100644 (file)
   ;; assume that we are never called with nvals == 1 and that a0 has already
   ;; been loaded.
   (inst ble nvals default-a0-and-on)
   ;; assume that we are never called with nvals == 1 and that a0 has already
   ;; been loaded.
   (inst ble nvals default-a0-and-on)
-  (inst ldl a1 (* 1 sb!vm:word-bytes) vals)
+  (inst ldl a1 (* 1 word-bytes) vals)
   (inst subq nvals (fixnumize 2) count)
   (inst ble count default-a2-and-on)
   (inst subq nvals (fixnumize 2) count)
   (inst ble count default-a2-and-on)
-  (inst ldl a2 (* 2 sb!vm:word-bytes) vals)
+  (inst ldl a2 (* 2 word-bytes) vals)
   (inst subq nvals (fixnumize 3) count)
   (inst ble count default-a3-and-on)
   (inst subq nvals (fixnumize 3) count)
   (inst ble count default-a3-and-on)
-  (inst ldl a3 (* 3 sb!vm:word-bytes) vals)
+  (inst ldl a3 (* 3 word-bytes) vals)
   (inst subq nvals (fixnumize 4) count)
   (inst ble count default-a4-and-on)
   (inst subq nvals (fixnumize 4) count)
   (inst ble count default-a4-and-on)
-  (inst ldl a4 (* 4 sb!vm:word-bytes) vals)
+  (inst ldl a4 (* 4 word-bytes) vals)
   (inst subq nvals (fixnumize 5) count)
   (inst ble count default-a5-and-on)
   (inst subq nvals (fixnumize 5) count)
   (inst ble count default-a5-and-on)
-  (inst ldl a5 (* 5 sb!vm:word-bytes) vals)
+  (inst ldl a5 (* 5 word-bytes) vals)
   (inst subq nvals (fixnumize 6) count)
   (inst ble count done)
 
   ;; Copy the remaining args to the top of the stack.
   (inst subq nvals (fixnumize 6) count)
   (inst ble count done)
 
   ;; Copy the remaining args to the top of the stack.
-  (inst addq vals (* 6 sb!vm:word-bytes) vals)
-  (inst addq cfp-tn (* 6 sb!vm:word-bytes) dst)
+  (inst addq vals (* 6 word-bytes) vals)
+  (inst addq cfp-tn (* 6 word-bytes) dst)
 
   LOOP
   (inst ldl temp 0 vals)
 
   LOOP
   (inst ldl temp 0 vals)
-  (inst addq vals sb!vm:word-bytes vals)
+  (inst addq vals word-bytes vals)
   (inst stl temp 0 dst)
   (inst subq count (fixnumize 1) count)
   (inst stl temp 0 dst)
   (inst subq count (fixnumize 1) count)
-  (inst addq dst sb!vm:word-bytes dst)
+  (inst addq dst word-bytes dst)
   (inst bne count loop)
                
   (inst br zero-tn done)
   (inst bne count loop)
                
   (inst br zero-tn done)
      
   ;; Load the argument regs (must do this now, 'cause the blt might
   ;; trash these locations)
      
   ;; Load the argument regs (must do this now, 'cause the blt might
   ;; trash these locations)
-  (inst ldl a0 (* 0 sb!vm:word-bytes) args)
-  (inst ldl a1 (* 1 sb!vm:word-bytes) args)
-  (inst ldl a2 (* 2 sb!vm:word-bytes) args)
-  (inst ldl a3 (* 3 sb!vm:word-bytes) args)
-  (inst ldl a4 (* 4 sb!vm:word-bytes) args)
-  (inst ldl a5 (* 5 sb!vm:word-bytes) args)
+  (inst ldl a0 (* 0 word-bytes) args)
+  (inst ldl a1 (* 1 word-bytes) args)
+  (inst ldl a2 (* 2 word-bytes) args)
+  (inst ldl a3 (* 3 word-bytes) args)
+  (inst ldl a4 (* 4 word-bytes) args)
+  (inst ldl a5 (* 5 word-bytes) args)
 
   ;; Calc SRC, DST, and COUNT
   (inst subq nargs (fixnumize register-arg-count) count)
 
   ;; Calc SRC, DST, and COUNT
   (inst subq nargs (fixnumize register-arg-count) count)
-  (inst addq args (* sb!vm:word-bytes register-arg-count) src)
+  (inst addq args (* word-bytes register-arg-count) src)
   (inst ble count done)
   (inst ble count done)
-  (inst addq cfp-tn (* sb!vm:word-bytes register-arg-count) dst)
+  (inst addq cfp-tn (* word-bytes register-arg-count) dst)
        
   LOOP
   ;; Copy one arg.
   (inst ldl temp 0 src)
        
   LOOP
   ;; Copy one arg.
   (inst ldl temp 0 src)
-  (inst addq src sb!vm:word-bytes src)
+  (inst addq src word-bytes src)
   (inst stl temp 0 dst)
   (inst subq count (fixnumize 1) count)
   (inst stl temp 0 dst)
   (inst subq count (fixnumize 1) count)
-  (inst addq dst sb!vm:word-bytes dst)
+  (inst addq dst word-bytes dst)
   (inst bgt count loop)
        
   DONE
   ;; We are done.  Do the jump.
   (progn
   (inst bgt count loop)
        
   DONE
   ;; We are done.  Do the jump.
   (progn
-    (loadw temp lexenv sb!vm:closure-function-slot sb!vm:function-pointer-type)
+    (loadw temp lexenv closure-function-slot function-pointer-type)
     (lisp-jump temp lip)))
 
 \f
     (lisp-jump temp lip)))
 
 \f
      (:temp temp1 non-descriptor-reg nl3-offset))
   (declare (ignore start count))
 
      (:temp temp1 non-descriptor-reg nl3-offset))
   (declare (ignore start count))
 
-  (load-symbol-value cur-uwp sb!impl::*current-unwind-protect-block*)
+  (load-symbol-value cur-uwp *current-unwind-protect-block*)
   (let ((error (generate-error-code nil invalid-unwind-error)))
     (inst beq block error))
   
   (let ((error (generate-error-code nil invalid-unwind-error)))
     (inst beq block error))
   
-  (loadw target-uwp block sb!vm:unwind-block-current-uwp-slot)
+  (loadw target-uwp block unwind-block-current-uwp-slot)
   (inst cmpeq cur-uwp target-uwp temp1)
   (inst beq temp1 do-uwp)
       
   (inst cmpeq cur-uwp target-uwp temp1)
   (inst beq temp1 do-uwp)
       
 
   do-exit
       
 
   do-exit
       
-  (loadw cfp-tn cur-uwp sb!vm:unwind-block-current-cont-slot)
-  (loadw code-tn cur-uwp sb!vm:unwind-block-current-code-slot)
+  (loadw cfp-tn cur-uwp unwind-block-current-cont-slot)
+  (loadw code-tn cur-uwp unwind-block-current-code-slot)
   (progn
   (progn
-    (loadw lra cur-uwp sb!vm:unwind-block-entry-pc-slot)
+    (loadw lra cur-uwp unwind-block-entry-pc-slot)
     (lisp-return lra lip :frob-code nil))
 
   do-uwp
 
     (lisp-return lra lip :frob-code nil))
 
   do-uwp
 
-  (loadw next-uwp cur-uwp sb!vm:unwind-block-current-uwp-slot)
-  (store-symbol-value next-uwp sb!impl::*current-unwind-protect-block*)
+  (loadw next-uwp cur-uwp unwind-block-current-uwp-slot)
+  (store-symbol-value next-uwp *current-unwind-protect-block*)
   (inst br zero-tn do-exit))
 
 (define-assembly-routine
   (inst br zero-tn do-exit))
 
 (define-assembly-routine
   
   (progn start count) ; We just need them in the registers.
 
   
   (progn start count) ; We just need them in the registers.
 
-  (load-symbol-value catch sb!impl::*current-catch-block*)
+  (load-symbol-value catch *current-catch-block*)
   
   loop
   
   (let ((error (generate-error-code nil unseen-throw-tag-error target)))
     (inst beq catch error))
   
   
   loop
   
   (let ((error (generate-error-code nil unseen-throw-tag-error target)))
     (inst beq catch error))
   
-  (loadw tag catch sb!vm:catch-block-tag-slot)
+  (loadw tag catch catch-block-tag-slot)
   (inst cmpeq tag target temp1)
   (inst bne temp1 exit)
   (inst cmpeq tag target temp1)
   (inst bne temp1 exit)
-  (loadw catch catch sb!vm:catch-block-previous-catch-slot)
+  (loadw catch catch catch-block-previous-catch-slot)
   (inst br zero-tn loop)
   
   exit
   (inst br zero-tn loop)
   
   exit
index d2dc911..7de12e5 100644 (file)
 
 (in-package "SB!C")
 \f
 
 (in-package "SB!C")
 \f
-(defvar *do-assembly* nil
-  #!+sb-doc "If non-NIL, emit assembly code. If NIL, emit VOP templates.")
+;;; If non-NIL, emit assembly code. If NIL, emit VOP templates.
+(defvar *do-assembly* nil)
 
 
-(defvar *lap-output-file* nil
-  #!+sb-doc "the FASL file currently being output to")
+;;; a list of (NAME . LABEL) for every entry point
+(defvar *entry-points* nil)
 
 
-(defvar *entry-points* nil
-  #!+sb-doc "a list of (name . label) for every entry point")
+;;; Set this to NIL to inhibit assembly-level optimization. (For
+;;; compiler debugging, rather than policy control.)
+(defvar *assembly-optimize* t)
 
 
-(defvar *assembly-optimize* t
-  #!+sb-doc
-  "Set this to NIL to inhibit assembly-level optimization. For compiler
-  debugging, rather than policy control.")
-
-;;; Note: You might think from the name that this would act like COMPILE-FILE,
-;;; but in fact it's arguably more like LOAD, even down to the return
-;;; convention. It LOADs a file, then writes out any assembly code created
-;;; by the process.
+;;; Note: You might think from the name that this would act like
+;;; COMPILE-FILE, but in fact it's arguably more like LOAD, even down
+;;; to the return convention. It LOADs a file, then writes out any
+;;; assembly code created by the process.
 (defun assemble-file (name
                      &key
                      (output-file (make-pathname :defaults name
 (defun assemble-file (name
                      &key
                      (output-file (make-pathname :defaults name
@@ -37,7 +33,8 @@
   ;; FIXME: Consider nuking the filename defaulting logic here.
   (let* ((*do-assembly* t)
         (name (pathname name))
   ;; FIXME: Consider nuking the filename defaulting logic here.
   (let* ((*do-assembly* t)
         (name (pathname name))
-        (*lap-output-file* (open-fasl-file (pathname output-file) name))
+        ;; the fasl file currently being output to
+        (lap-fasl-output (open-fasl-output (pathname output-file) name))
         (*entry-points* nil)
         (won nil)
         (*code-segment* nil)
         (*entry-points* nil)
         (won nil)
         (*code-segment* nil)
@@ -50,7 +47,7 @@
          (load (merge-pathnames name (make-pathname :type "lisp")))
          (fasl-dump-cold-load-form `(in-package ,(package-name
                                                   (sane-package)))
          (load (merge-pathnames name (make-pathname :type "lisp")))
          (fasl-dump-cold-load-form `(in-package ,(package-name
                                                   (sane-package)))
-                                   *lap-output-file*)
+                                   lap-fasl-output)
          (sb!assem:append-segment *code-segment* *elsewhere*)
          (setf *elsewhere* nil)
          (let ((length (sb!assem:finalize-segment *code-segment*)))
          (sb!assem:append-segment *code-segment* *elsewhere*)
          (setf *elsewhere* nil)
          (let ((length (sb!assem:finalize-segment *code-segment*)))
@@ -58,9 +55,9 @@
                                     length
                                     *fixups*
                                     *entry-points*
                                     length
                                     *fixups*
                                     *entry-points*
-                                    *lap-output-file*))
+                                    lap-fasl-output))
          (setq won t))
          (setq won t))
-      (close-fasl-file *lap-output-file* (not won)))
+      (close-fasl-output lap-fasl-output (not won)))
     won))
 
 (defstruct (reg-spec (:copier nil))
     won))
 
 (defstruct (reg-spec (:copier nil))
index 3784517..c56dbdc 100644 (file)
 
   (declare (ignore start count))
 
 
   (declare (ignore start count))
 
-  (load-symbol-value catch sb!impl::*current-catch-block*)
+  (load-symbol-value catch *current-catch-block*)
 
   LOOP
 
 
   LOOP
 
     (inst or block block)              ; check for NULL pointer
     (inst jmp :z error))
 
     (inst or block block)              ; check for NULL pointer
     (inst jmp :z error))
 
-  (load-symbol-value uwp sb!impl::*current-unwind-protect-block*)
+  (load-symbol-value uwp *current-unwind-protect-block*)
 
   ;; Does *cuwpb* match value stored in argument cuwp slot?
   (inst cmp uwp
 
   ;; Does *cuwpb* match value stored in argument cuwp slot?
   (inst cmp uwp
   ;; If a match, return to context in arg block.
   (inst jmp :e do-exit)
 
   ;; If a match, return to context in arg block.
   (inst jmp :e do-exit)
 
-  ;; Not a match - return to *current-unwind-protect-block* context.
+  ;; Not a match - return to *CURRENT-UNWIND-PROTECT-BLOCK* context.
   ;; Important! Must save (and return) the arg 'block' for later use!!
   (move edx-tn block)
   (move block uwp)
   ;; Set next unwind protect context.
   (loadw uwp uwp unwind-block-current-uwp-slot)
   ;; Important! Must save (and return) the arg 'block' for later use!!
   (move edx-tn block)
   (move block uwp)
   ;; Set next unwind protect context.
   (loadw uwp uwp unwind-block-current-uwp-slot)
-  (store-symbol-value uwp sb!impl::*current-unwind-protect-block*)
+  (store-symbol-value uwp *current-unwind-protect-block*)
 
   DO-EXIT
 
 
   DO-EXIT
 
index 1edce29..9b6e9fb 100644 (file)
         (error "bogus value for :FILL-POINTER in ADJUST-ARRAY: ~S"
                fill-pointer))))
 
         (error "bogus value for :FILL-POINTER in ADJUST-ARRAY: ~S"
                fill-pointer))))
 
+;;; Destructively alter VECTOR, changing its length to NEW-LENGTH,
+;;; which must be less than or equal to its current length.
 (defun shrink-vector (vector new-length)
 (defun shrink-vector (vector new-length)
-  #!+sb-doc
-  "Destructively alter VECTOR, changing its length to NEW-LENGTH, which
-   must be less than or equal to its current length."
   (declare (vector vector))
   (unless (array-header-p vector)
     (macrolet ((frob (name &rest things)
   (declare (vector vector))
   (unless (array-header-p vector)
     (macrolet ((frob (name &rest things)
   (setf (%array-fill-pointer vector) new-length)
   vector)
 
   (setf (%array-fill-pointer vector) new-length)
   vector)
 
+;;; Fill in array header with the provided information, and return the array.
 (defun set-array-header (array data length fill-pointer displacement dimensions
                         &optional displacedp)
 (defun set-array-header (array data length fill-pointer displacement dimensions
                         &optional displacedp)
-  #!+sb-doc
-  "Fills in array header with provided information. Returns array."
   (setf (%array-data-vector array) data)
   (setf (%array-available-elements array) length)
   (cond (fill-pointer
   (setf (%array-data-vector array) data)
   (setf (%array-available-elements array) length)
   (cond (fill-pointer
index a890b0a..cb73c3c 100644 (file)
            (value (cdr x)))
        (setf (svref res value)
              (if (and (consp key) (eq (car key) '%fdefinition-marker%))
            (value (cdr x)))
        (setf (svref res value)
              (if (and (consp key) (eq (car key) '%fdefinition-marker%))
-                 (sb!impl::fdefinition-object (cdr key) t)
+                 (fdefinition-object (cdr key) t)
                  key))))
     res))
 \f
                  key))))
     res))
 \f
index 956797f..e5bce7a 100644 (file)
@@ -311,7 +311,7 @@ instead (which is another name for the same thing)."))
       ;; reason.. (Perhaps we should do it anyway in case someone
       ;; manages to save an image from within a pseudo-atomic-atomic
       ;; operation?)
       ;; reason.. (Perhaps we should do it anyway in case someone
       ;; manages to save an image from within a pseudo-atomic-atomic
       ;; operation?)
-      #!+x86 (setf sb!impl::*pseudo-atomic-atomic* 0))
+      #!+x86 (setf *pseudo-atomic-atomic* 0))
     (gc-on)))
 \f
 ;;;; some support for any hapless wretches who end up debugging cold
     (gc-on)))
 \f
 ;;;; some support for any hapless wretches who end up debugging cold
index 2714eaf..5932205 100644 (file)
@@ -9,7 +9,7 @@
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!IMPL")
+(in-package "SB!FASL")
 
 ;;;; fast-read operations
 ;;;;
 
 ;;;; fast-read operations
 ;;;;
index 04e2f30..83378bd 100644 (file)
 #!+x86
 (defun find-escaped-frame (frame-pointer)
   (declare (type system-area-pointer frame-pointer))
 #!+x86
 (defun find-escaped-frame (frame-pointer)
   (declare (type system-area-pointer frame-pointer))
-  (dotimes (index sb!impl::*free-interrupt-context-index* (values nil 0 nil))
+  (dotimes (index *free-interrupt-context-index* (values nil 0 nil))
     (sb!alien:with-alien
        ((lisp-interrupt-contexts (array (* os-context-t) nil)
                                  :extern))
     (sb!alien:with-alien
        ((lisp-interrupt-contexts (array (* os-context-t) nil)
                                  :extern))
 #!-x86
 (defun find-escaped-frame (frame-pointer)
   (declare (type system-area-pointer frame-pointer))
 #!-x86
 (defun find-escaped-frame (frame-pointer)
   (declare (type system-area-pointer frame-pointer))
-  (dotimes (index sb!impl::*free-interrupt-context-index* (values nil 0 nil))
+  (dotimes (index *free-interrupt-context-index* (values nil 0 nil))
     (sb!alien:with-alien
      ((lisp-interrupt-contexts (array (* os-context-t) nil) :extern))
      (let ((scp (sb!alien:deref lisp-interrupt-contexts index)))
     (sb!alien:with-alien
      ((lisp-interrupt-contexts (array (* os-context-t) nil) :extern))
      (let ((scp (sb!alien:deref lisp-interrupt-contexts index)))
    code-locations at which execution would continue with frame as the top
    frame if someone threw to the corresponding tag."
   (let ((catch
    code-locations at which execution would continue with frame as the top
    frame if someone threw to the corresponding tag."
   (let ((catch
-        #!-gengc (descriptor-sap sb!impl::*current-catch-block*)
+        #!-gengc (descriptor-sap *current-catch-block*)
         #!+gengc (mutator-current-catch-block))
        (res nil)
        (fp (frame-pointer (frame-real-frame frame))))
         #!+gengc (mutator-current-catch-block))
        (res nil)
        (fp (frame-pointer (frame-real-frame frame))))
index c3bcaee..ec6b02b 100644 (file)
 
 ;;; entries in STATIC-SYMBOLS table, references to which can be compiled
 ;;; as though they're special variables
 
 ;;; entries in STATIC-SYMBOLS table, references to which can be compiled
 ;;; as though they're special variables
+;;;
+;;; FIXME: These should be listed once and only once, instead of
+;;; listed here and then listed separately (and by now, 2001-06-06,
+;;; slightly differently) elsewhere.
 (declaim (special *posix-argv*
                  *!initial-fdefn-objects*
                  *read-only-space-free-pointer*
 (declaim (special *posix-argv*
                  *!initial-fdefn-objects*
                  *read-only-space-free-pointer*
                  sb!vm:*initial-dynamic-space-free-pointer*
                  *current-catch-block*
                  *current-unwind-protect-block*
                  sb!vm:*initial-dynamic-space-free-pointer*
                  *current-catch-block*
                  *current-unwind-protect-block*
-                 sb!c::*eval-stack-top*
+                 *eval-stack-top*
                  sb!vm::*alien-stack*
                  sb!vm::*alien-stack*
-                 ;; KLUDGE: I happened to notice that these should be #!+X86.
-                 ;; There could easily be others in the list, too.
+                 ;; FIXME: The pseudo-atomic variable stuff should be
+                 ;; conditional on :SB-PSEUDO-ATOMIC-SYMBOLS, which
+                 ;; should be conditional on :X86, instead of the
+                 ;; pseudo-atomic stuff being directly conditional on
+                 ;; :X86. (Note that non-X86 ports mention
+                 ;; pseudo-atomicity too, but they handle it without
+                 ;; messing with special variables.)
                  #!+x86 *pseudo-atomic-atomic*
                  #!+x86 *pseudo-atomic-interrupted*
                  sb!unix::*interrupts-enabled*
                  #!+x86 *pseudo-atomic-atomic*
                  #!+x86 *pseudo-atomic-interrupted*
                  sb!unix::*interrupts-enabled*
index 583345f..6df3f9f 100644 (file)
 
 ;;; This is kind of like FILE-POSITION, but is an internal hack used
 ;;; by the filesys stuff to get and set the file name.
 
 ;;; This is kind of like FILE-POSITION, but is an internal hack used
 ;;; by the filesys stuff to get and set the file name.
+;;;
+;;; FIXME: misleading name, screwy interface
 (defun file-name (stream &optional new-name)
   (when (typep stream 'fd-stream)
       (cond (new-name
 (defun file-name (stream &optional new-name)
   (when (typep stream 'fd-stream)
       (cond (new-name
index 586c970..58dce2a 100644 (file)
     (error 'simple-file-error
           :pathname pathname
           :format-control "can't use a wild pathname here"))
     (error 'simple-file-error
           :pathname pathname
           :format-control "can't use a wild pathname here"))
-  (let ((namestring (unix-namestring pathname t)))
+  (let* ((defaulted-pathname (merge-pathnames
+                             pathname
+                             (sane-default-pathname-defaults)))
+        (namestring (unix-namestring defaulted-pathname t)))
     (when (and namestring (sb!unix:unix-file-kind namestring))
     (when (and namestring (sb!unix:unix-file-kind namestring))
-      (let ((truename (sb!unix:unix-resolve-links
-                      (sb!unix:unix-maybe-prepend-current-directory
-                       namestring))))
+      (let ((truename (sb!unix:unix-resolve-links namestring)))
        (when truename
          (let ((*ignore-wildcards* t))
            (pathname (sb!unix:unix-simplify-pathname truename))))))))
        (when truename
          (let ((*ignore-wildcards* t))
            (pathname (sb!unix:unix-simplify-pathname truename))))))))
index f78317b..fce38fe 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; FOP definitions
 
 ;;;; FOP definitions
 
-(in-package "SB!IMPL")
+(in-package "SB!FASL")
 
 ;;; Define NAME as a fasl operation, with op-code FOP-CODE. PUSHP
 ;;; describes what the body does to the fop stack:
 
 ;;; Define NAME as a fasl operation, with op-code FOP-CODE. PUSHP
 ;;; describes what the body does to the fop stack:
                   (n-size (gensym))
                   (n-buffer (gensym)))
               `(define-fop (,name ,code)
                   (n-size (gensym))
                   (n-buffer (gensym)))
               `(define-fop (,name ,code)
-                 (prepare-for-fast-read-byte *fasl-file*
+                 (prepare-for-fast-read-byte *fasl-input-stream*
                    (let ((,n-package ,package)
                          (,n-size (fast-read-u-integer ,name-size)))
                      (when (> ,n-size *load-symbol-buffer-size*)
                    (let ((,n-package ,package)
                          (,n-size (fast-read-u-integer ,name-size)))
                      (when (> ,n-size *load-symbol-buffer-size*)
                                                 (* ,n-size 2)))))
                      (done-with-fast-read-byte)
                      (let ((,n-buffer *load-symbol-buffer*))
                                                 (* ,n-size 2)))))
                      (done-with-fast-read-byte)
                      (let ((,n-buffer *load-symbol-buffer*))
-                       (read-string-as-bytes *fasl-file*
+                       (read-string-as-bytes *fasl-input-stream*
                                              ,n-buffer
                                              ,n-size)
                        (push-fop-table (intern* ,n-buffer
                                              ,n-buffer
                                              ,n-size)
                        (push-fop-table (intern* ,n-buffer
                    (fop-uninterned-small-symbol-save 13)
   (let* ((arg (clone-arg))
         (res (make-string arg)))
                    (fop-uninterned-small-symbol-save 13)
   (let* ((arg (clone-arg))
         (res (make-string arg)))
-    (read-string-as-bytes *fasl-file* res)
+    (read-string-as-bytes *fasl-input-stream* res)
     (push-fop-table (make-symbol res))))
 
 (define-fop (fop-package 14)
     (push-fop-table (make-symbol res))))
 
 (define-fop (fop-package 14)
 \f
 ;;;; fops for loading numbers
 
 \f
 ;;;; fops for loading numbers
 
-;;; Load a signed integer LENGTH bytes long from *FASL-FILE*.
+;;; Load a signed integer LENGTH bytes long from *FASL-INPUT-STREAM*.
 (defun load-s-integer (length)
   (declare (fixnum length))
   ;; #+cmu (declare (optimize (inhibit-warnings 2)))
   (do* ((index length (1- index))
 (defun load-s-integer (length)
   (declare (fixnum length))
   ;; #+cmu (declare (optimize (inhibit-warnings 2)))
   (do* ((index length (1- index))
-       (byte 0 (read-byte *fasl-file*))
+       (byte 0 (read-byte *fasl-input-stream*))
        (result 0 (+ result (ash byte bits)))
        (bits 0 (+ bits 8)))
        ((= index 0)
        (result 0 (+ result (ash byte bits)))
        (bits 0 (+ bits 8)))
        ((= index 0)
   (load-s-integer (clone-arg)))
 
 (define-fop (fop-word-integer 35)
   (load-s-integer (clone-arg)))
 
 (define-fop (fop-word-integer 35)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
      (fast-read-s-integer 4)
      (done-with-fast-read-byte))))
 
 (define-fop (fop-byte-integer 36)
     (prog1
      (fast-read-s-integer 4)
      (done-with-fast-read-byte))))
 
 (define-fop (fop-byte-integer 36)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
      (fast-read-s-integer 1)
      (done-with-fast-read-byte))))
     (prog1
      (fast-read-s-integer 1)
      (done-with-fast-read-byte))))
     (%make-complex (pop-stack) im)))
 
 (define-fop (fop-complex-single-float 72)
     (%make-complex (pop-stack) im)))
 
 (define-fop (fop-complex-single-float 72)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
        (complex (make-single-float (fast-read-s-integer 4))
                 (make-single-float (fast-read-s-integer 4)))
       (done-with-fast-read-byte))))
 
 (define-fop (fop-complex-double-float 73)
     (prog1
        (complex (make-single-float (fast-read-s-integer 4))
                 (make-single-float (fast-read-s-integer 4)))
       (done-with-fast-read-byte))))
 
 (define-fop (fop-complex-double-float 73)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
        (let* ((re-lo (fast-read-u-integer 4))
               (re-hi (fast-read-u-integer 4))
     (prog1
        (let* ((re-lo (fast-read-u-integer 4))
               (re-hi (fast-read-u-integer 4))
 
 #!+long-float
 (define-fop (fop-complex-long-float 67)
 
 #!+long-float
 (define-fop (fop-complex-long-float 67)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
        (let* ((re-lo (fast-read-u-integer 4))
               #!+sparc (re-mid (fast-read-u-integer 4))
     (prog1
        (let* ((re-lo (fast-read-u-integer 4))
               #!+sparc (re-mid (fast-read-u-integer 4))
       (done-with-fast-read-byte))))
 
 (define-fop (fop-single-float 46)
       (done-with-fast-read-byte))))
 
 (define-fop (fop-single-float 46)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1 (make-single-float (fast-read-s-integer 4))
       (done-with-fast-read-byte))))
 
 (define-fop (fop-double-float 47)
     (prog1 (make-single-float (fast-read-s-integer 4))
       (done-with-fast-read-byte))))
 
 (define-fop (fop-double-float 47)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
        (let ((lo (fast-read-u-integer 4)))
          (make-double-float (fast-read-s-integer 4) lo))
     (prog1
        (let ((lo (fast-read-u-integer 4)))
          (make-double-float (fast-read-s-integer 4) lo))
 
 #!+long-float
 (define-fop (fop-long-float 52)
 
 #!+long-float
 (define-fop (fop-long-float 52)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (prog1
        (let ((lo (fast-read-u-integer 4))
              #!+sparc (mid (fast-read-u-integer 4))
     (prog1
        (let ((lo (fast-read-u-integer 4))
              #!+sparc (mid (fast-read-u-integer 4))
 (define-cloned-fops (fop-string 37) (fop-small-string 38)
   (let* ((arg (clone-arg))
         (res (make-string arg)))
 (define-cloned-fops (fop-string 37) (fop-small-string 38)
   (let* ((arg (clone-arg))
         (res (make-string arg)))
-    (read-string-as-bytes *fasl-file* res)
+    (read-string-as-bytes *fasl-input-stream* res)
     res))
 
 (define-cloned-fops (fop-vector 39) (fop-small-vector 40)
     res))
 
 (define-cloned-fops (fop-vector 39) (fop-small-vector 40)
 (define-fop (fop-single-float-vector 84)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'single-float)))
 (define-fop (fop-single-float-vector 84)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'single-float)))
-    (read-n-bytes *fasl-file* result 0 (* length sb!vm:word-bytes))
+    (read-n-bytes *fasl-input-stream* result 0 (* length sb!vm:word-bytes))
     result))
 
 (define-fop (fop-double-float-vector 85)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'double-float)))
     result))
 
 (define-fop (fop-double-float-vector 85)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'double-float)))
-    (read-n-bytes *fasl-file* result 0 (* length sb!vm:word-bytes 2))
+    (read-n-bytes *fasl-input-stream* result 0 (* length sb!vm:word-bytes 2))
     result))
 
 #!+long-float
 (define-fop (fop-long-float-vector 88)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'long-float)))
     result))
 
 #!+long-float
 (define-fop (fop-long-float-vector 88)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type 'long-float)))
-    (read-n-bytes *fasl-file*
+    (read-n-bytes *fasl-input-stream*
                  result
                  0
                  (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4))
                  result
                  0
                  (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4))
 (define-fop (fop-complex-single-float-vector 86)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex single-float))))
 (define-fop (fop-complex-single-float-vector 86)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex single-float))))
-    (read-n-bytes *fasl-file* result 0 (* length sb!vm:word-bytes 2))
+    (read-n-bytes *fasl-input-stream* result 0 (* length sb!vm:word-bytes 2))
     result))
 
 (define-fop (fop-complex-double-float-vector 87)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex double-float))))
     result))
 
 (define-fop (fop-complex-double-float-vector 87)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex double-float))))
-    (read-n-bytes *fasl-file* result 0 (* length sb!vm:word-bytes 2 2))
+    (read-n-bytes *fasl-input-stream* result 0 (* length sb!vm:word-bytes 2 2))
     result))
 
 #!+long-float
 (define-fop (fop-complex-long-float-vector 89)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex long-float))))
     result))
 
 #!+long-float
 (define-fop (fop-complex-long-float-vector 89)
   (let* ((length (read-arg 4))
         (result (make-array length :element-type '(complex long-float))))
-    (read-n-bytes *fasl-file* result 0
+    (read-n-bytes *fasl-input-stream* result 0
                  (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4 2))
     result))
 
                  (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4 2))
     result))
 
 ;;; This must be packed according to the local byte-ordering, allowing us to
 ;;; directly read the bits.
 (define-fop (fop-int-vector 43)
 ;;; This must be packed according to the local byte-ordering, allowing us to
 ;;; directly read the bits.
 (define-fop (fop-int-vector 43)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (let* ((len (fast-read-u-integer 4))
           (size (fast-read-byte))
           (res (case size
     (let* ((len (fast-read-u-integer 4))
           (size (fast-read-byte))
           (res (case size
                            size)))))
       (declare (type index len))
       (done-with-fast-read-byte)
                            size)))))
       (declare (type index len))
       (done-with-fast-read-byte)
-      (read-n-bytes *fasl-file*
+      (read-n-bytes *fasl-input-stream*
                    res
                    0
                    (ceiling (the index (* size len))
                    res
                    0
                    (ceiling (the index (* size len))
 ;;; This is the same as FOP-INT-VECTOR, except this is for signed
 ;;; SIMPLE-ARRAYs.
 (define-fop (fop-signed-int-vector 50)
 ;;; This is the same as FOP-INT-VECTOR, except this is for signed
 ;;; SIMPLE-ARRAYs.
 (define-fop (fop-signed-int-vector 50)
-  (prepare-for-fast-read-byte *fasl-file*
+  (prepare-for-fast-read-byte *fasl-input-stream*
     (let* ((len (fast-read-u-integer 4))
           (size (fast-read-byte))
           (res (case size
     (let* ((len (fast-read-u-integer 4))
           (size (fast-read-byte))
           (res (case size
                            size)))))
       (declare (type index len))
       (done-with-fast-read-byte)
                            size)))))
       (declare (type index len))
       (done-with-fast-read-byte)
-      (read-n-bytes *fasl-file*
+      (read-n-bytes *fasl-input-stream*
                    res
                    0
                    (ceiling (the index (* (if (= size 30)
                    res
                    0
                    (ceiling (the index (* (if (= size 30)
            (format t "~S defined~%" res))
     res))
 \f
            (format t "~S defined~%" res))
     res))
 \f
-;;;; Some Dylan fops used to live here. By 1 November 1998 the code was
-;;;; sufficiently stale that the functions it called were no longer defined,
-;;;; so I (William Harold Newman) deleted it.
+;;;; Some Dylan FOPs used to live here. By 1 November 1998 the code
+;;;; was sufficiently stale that the functions it called were no
+;;;; longer defined, so I (William Harold Newman) deleted it.
 ;;;;
 ;;;; In case someone in the future is trying to make sense of FOP layout,
 ;;;; it might be worth recording that the Dylan FOPs were
 ;;;;
 ;;;; In case someone in the future is trying to make sense of FOP layout,
 ;;;; it might be worth recording that the Dylan FOPs were
         (code-object (pop-stack))
         (len (read-arg 1))
         (sym (make-string len)))
         (code-object (pop-stack))
         (len (read-arg 1))
         (sym (make-string len)))
-    (read-n-bytes *fasl-file* sym 0 len)
+    (read-n-bytes *fasl-input-stream* sym 0 len)
     (sb!vm:fixup-code-object code-object
                             (read-arg 4)
                             (foreign-symbol-address-as-integer sym)
     (sb!vm:fixup-code-object code-object
                             (read-arg 4)
                             (foreign-symbol-address-as-integer sym)
index 42fe943..1654689 100644 (file)
 
 (in-package "SB!KERNEL")
 
 
 (in-package "SB!KERNEL")
 
+;;; Return the 24 bits of data in the header of object X, which must
+;;; be an other-pointer object.
 (defun get-header-data (x)
 (defun get-header-data (x)
-  #!+sb-doc
-  "Return the 24 bits of data in the header of object X, which must be an
-  other-pointer object."
   (get-header-data x))
 
   (get-header-data x))
 
+;;; Set the 24 bits of data in the header of object X (which must be
+;;; an other-pointer object) to VAL.
 (defun set-header-data (x val)
 (defun set-header-data (x val)
-  #!+sb-doc
-  "Sets the 24 bits of data in the header of object X (which must be an
-  other-pointer object) to VAL."
   (set-header-data x val))
 
   (set-header-data x val))
 
+;;; Return the length of the closure X. This is one more than the
+;;; number of variables closed over.
 (defun get-closure-length (x)
 (defun get-closure-length (x)
-  #!+sb-doc
-  "Returns the length of the closure X. This is one more than the number
-  of variables closed over."
   (get-closure-length x))
 
   (get-closure-length x))
 
+;;; Return the three-bit lowtag for the object X.
 (defun get-lowtag (x)
 (defun get-lowtag (x)
-  #!+sb-doc
-  "Returns the three-bit lowtag for the object X."
   (get-lowtag x))
 
   (get-lowtag x))
 
+;;; Return the 8-bit header type for the object X.
 (defun get-type (x)
 (defun get-type (x)
-  #!+sb-doc
-  "Returns the 8-bit header type for the object X."
   (get-type x))
 
   (get-type x))
 
+;;; Return a System-Area-Pointer pointing to the data for the vector
+;;; X, which must be simple.
+;;;
+;;; FIXME: so it should be SIMPLE-VECTOR-SAP, right?
 (defun vector-sap (x)
 (defun vector-sap (x)
-  #!+sb-doc
-  "Return a System-Area-Pointer pointing to the data for the vector X, which
-  must be simple."
   (declare (type (simple-unboxed-array (*)) x))
   (vector-sap x))
 
   (declare (type (simple-unboxed-array (*)) x))
   (vector-sap x))
 
+;;; Return a System-Area-Pointer pointing to the end of the binding stack.
 (defun sb!c::binding-stack-pointer-sap ()
 (defun sb!c::binding-stack-pointer-sap ()
-  #!+sb-doc
-  "Return a System-Area-Pointer pointing to the end of the binding stack."
   (sb!c::binding-stack-pointer-sap))
 
   (sb!c::binding-stack-pointer-sap))
 
+;;; Return a System-Area-Pointer pointing to the next free word of the
+;;; current dynamic space.
 (defun sb!c::dynamic-space-free-pointer ()
 (defun sb!c::dynamic-space-free-pointer ()
-  #!+sb-doc
-  "Returns a System-Area-Pointer pointing to the next free work of the current
-  dynamic space."
   (sb!c::dynamic-space-free-pointer))
 
   (sb!c::dynamic-space-free-pointer))
 
+;;; Return a System-Area-Pointer pointing to the end of the control stack.
 (defun sb!c::control-stack-pointer-sap ()
 (defun sb!c::control-stack-pointer-sap ()
-  #!+sb-doc
-  "Return a System-Area-Pointer pointing to the end of the control stack."
   (sb!c::control-stack-pointer-sap))
 
   (sb!c::control-stack-pointer-sap))
 
+;;; Return the header typecode for FUNCTION. Can be set with SETF.
 (defun function-subtype (function)
 (defun function-subtype (function)
-  #!+sb-doc
-  "Return the header typecode for FUNCTION. Can be set with SETF."
   (function-subtype function))
   (function-subtype function))
-
 (defun (setf function-subtype) (type function)
   (setf (function-subtype function) type))
 
 (defun (setf function-subtype) (type function)
   (setf (function-subtype function) type))
 
+;;; Extract the arglist from the function header FUNC.
 (defun %function-arglist (func)
 (defun %function-arglist (func)
-  #!+sb-doc
-  "Extracts the arglist from the function header FUNC."
   (%function-arglist func))
 
   (%function-arglist func))
 
+;;; Extract the name from the function header FUNC.
 (defun %function-name (func)
 (defun %function-name (func)
-  #!+sb-doc
-  "Extracts the name from the function header FUNC."
   (%function-name func))
 
   (%function-name func))
 
+;;; Extract the type from the function header FUNC.
 (defun %function-type (func)
 (defun %function-type (func)
-  #!+sb-doc
-  "Extracts the type from the function header FUNC."
   (%function-type func))
 
   (%function-type func))
 
+;;; Extract the function from CLOSURE.
 (defun %closure-function (closure)
 (defun %closure-function (closure)
-  #!+sb-doc
-  "Extracts the function from CLOSURE."
   (%closure-function closure))
 
   (%closure-function closure))
 
+;;; Return the length of VECTOR. There is no reason to use this in
+;;; ordinary code, 'cause length (the vector foo)) is the same.
 (defun sb!c::vector-length (vector)
 (defun sb!c::vector-length (vector)
-  #!+sb-doc
-  "Return the length of VECTOR. There is no reason to use this, 'cause
-  (length (the vector foo)) is the same."
   (sb!c::vector-length vector))
 
   (sb!c::vector-length vector))
 
+;;; Extract the INDEXth slot from CLOSURE.
 (defun %closure-index-ref (closure index)
 (defun %closure-index-ref (closure index)
-  #!+sb-doc
-  "Extract the INDEXth slot from CLOSURE."
   (%closure-index-ref closure index))
 
   (%closure-index-ref closure index))
 
+;;; Allocate a unboxed, simple vector with type code TYPE, length LENGTH, and
+;;; WORDS words long. Note: it is your responsibility to ensure that the
+;;; relation between LENGTH and WORDS is correct.
 (defun allocate-vector (type length words)
 (defun allocate-vector (type length words)
-  #!+sb-doc
-  "Allocate a unboxed, simple vector with type code TYPE, length LENGTH, and
-  WORDS words long. Note: it is your responsibility to ensure that the
-  relation between LENGTH and WORDS is correct."
   (allocate-vector type length words))
 
   (allocate-vector type length words))
 
+;;; Allocate an array header with type code TYPE and rank RANK.
 (defun make-array-header (type rank)
 (defun make-array-header (type rank)
-  #!+sb-doc
-  "Allocate an array header with type code TYPE and rank RANK."
   (make-array-header type rank))
 
   (make-array-header type rank))
 
+;;; Return a SAP pointing to the instructions part of CODE-OBJ.
 (defun code-instructions (code-obj)
 (defun code-instructions (code-obj)
-  #!+sb-doc
-  "Return a SAP pointing to the instructions part of CODE-OBJ."
   (code-instructions code-obj))
 
   (code-instructions code-obj))
 
+;;; Extract the INDEXth element from the header of CODE-OBJ. Can be
+;;; set with SETF.
 (defun code-header-ref (code-obj index)
 (defun code-header-ref (code-obj index)
-  #!+sb-doc
-  "Extract the INDEXth element from the header of CODE-OBJ. Can be set with
-  setf."
   (code-header-ref code-obj index))
 
 (defun code-header-set (code-obj index new)
   (code-header-ref code-obj index))
 
 (defun code-header-set (code-obj index new)
index 3e98990..de45d75 100644 (file)
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!IMPL")
-\f
-;;;; variables
-
-;;; FIXME: It's awkward having LOAD stuff in SB!IMPL and dump stuff in
-;;; SB!C. Among other things, it makes it hard to figure out where
-;;; *FASL-HEADER-STRING-START-STRING* and
-;;; *FASL-HEADER-STRING-STOP-CHAR-CODE* should go. Perhaps we should
-;;; make a package called SB-DUMP or SB-LD which includes all
-;;; knowledge of both loading and dumping.
-
-;;; This value is used to identify fasl files. Even though this is not
-;;; declared as a constant (because ANSI Common Lisp has no facility
-;;; for declaring values which are constant under EQUAL but not EQL),
-;;; obviously you shouldn't mess with it lightly. If you do set a new
-;;; value for some reason, keep these things in mind:
-;;; * To avoid confusion with the similar but incompatible CMU CL
-;;;   fasl file format, the value should not be "FASL FILE", which
-;;;   is what CMU CL used for the same purpose.
-;;; * Since its presence at the head of a file is used by LOAD to
-;;;   decide whether a file is to be fasloaded or just loaded
-;;;   ordinarily (as source), the value should be something which
-;;;   can't legally appear at the head of a Lisp source file.
-;;; * The value should not contain any line-terminating characters,
-;;;   because they're hard to express portably and because the LOAD
-;;;   code might reasonably use READ-LINE to get the value to compare
-;;;   against.
-(defparameter sb!c:*fasl-header-string-start-string* "# FASL"
-  #!+sb-doc
-  "a string which appears at the start of a fasl file header")
-
-(defparameter sb!c:*fasl-header-string-stop-char-code* 255
-  #!+sb-doc
-  "the code for a character which terminates a fasl file header")
-
-(defvar *load-depth* 0
-  #!+sb-doc
-  "the current number of recursive loads")
-(declaim (type index *load-depth*))
-
-;;; the FASL file we're reading from
-(defvar *fasl-file*)
-(declaim (type lisp-stream *fasl-file*))
-
-(defvar *load-print* nil
-  #!+sb-doc
-  "the default for the :PRINT argument to LOAD")
-(defvar *load-verbose* nil
-  ;; Note that CMU CL's default for this was T, and ANSI says it's
-  ;; implementation-dependent. We choose NIL on the theory that it's
-  ;; a nicer default behavior for Unix programs.
-  #!+sb-doc
-  "the default for the :VERBOSE argument to LOAD")
+(in-package "SB!FASL")
 \f
 ;;;; miscellaneous load utilities
 
 \f
 ;;;; miscellaneous load utilities
 
         (cnt 1 (1+ cnt)))
        ((>= cnt n) res))))
 
         (cnt 1 (1+ cnt)))
        ((>= cnt n) res))))
 
-;;; Read an N-byte unsigned integer from the *FASL-FILE*
+;;; Read an N-byte unsigned integer from the *FASL-INPUT-STREAM*
 (defmacro read-arg (n)
   (declare (optimize (speed 0)))
   (if (= n 1)
 (defmacro read-arg (n)
   (declare (optimize (speed 0)))
   (if (= n 1)
-      `(the (unsigned-byte 8) (read-byte *fasl-file*))
-      `(prepare-for-fast-read-byte *fasl-file*
+      `(the (unsigned-byte 8) (read-byte *fasl-input-stream*))
+      `(prepare-for-fast-read-byte *fasl-input-stream*
         (prog1
          (fast-read-u-integer ,n)
          (done-with-fast-read-byte)))))
         (prog1
          (fast-read-u-integer ,n)
          (done-with-fast-read-byte)))))
     (when byte
 
       ;; Read the string part of the fasl header, or die.
     (when byte
 
       ;; Read the string part of the fasl header, or die.
-      (let* ((fhsss sb!c:*fasl-header-string-start-string*)
+      (let* ((fhsss *fasl-header-string-start-string*)
             (fhsss-length (length fhsss)))
        (unless (= byte (char-code (schar fhsss 0)))
          (error "illegal first byte in fasl file header"))
        (do ((byte (read-byte stream) (read-byte stream))
             (count 1 (1+ count)))
             (fhsss-length (length fhsss)))
        (unless (= byte (char-code (schar fhsss 0)))
          (error "illegal first byte in fasl file header"))
        (do ((byte (read-byte stream) (read-byte stream))
             (count 1 (1+ count)))
-           ((= byte sb!c:*fasl-header-string-stop-char-code*)
+           ((= byte +fasl-header-string-stop-char-code+)
             t)
          (declare (fixnum byte count))
          (when (and (< count fhsss-length)
             t)
          (declare (fixnum byte count))
          (when (and (< count fhsss-length)
                            needed-version))
                   t)))
          (or (check-version "native code"
                            needed-version))
                   t)))
          (or (check-version "native code"
-                            #.sb!c:*backend-fasl-file-implementation*
-                            #.sb!c:*backend-fasl-file-version*)
+                            +backend-fasl-file-implementation+
+                            +fasl-file-version+)
              (check-version "byte code"
              (check-version "byte code"
-                            #.(sb!c:backend-byte-fasl-file-implementation)
-                            sb!c:byte-fasl-file-version)
+                            (backend-byte-fasl-file-implementation)
+                            +fasl-file-version+)
              (error "~S was compiled for implementation ~A, but this is a ~A."
                     stream
                     implementation
              (error "~S was compiled for implementation ~A, but this is a ~A."
                     stream
                     implementation
-                    sb!c:*backend-fasl-file-implementation*)))))))
+                    +backend-fasl-file-implementation+)))))))
 
 ;; Setting this variable gives you a trace of fops as they are loaded and
 ;; executed.
 
 ;; Setting this variable gives you a trace of fops as they are loaded and
 ;; executed.
     (error "attempt to load an empty FASL file:~%  ~S" (namestring stream)))
 
   (do-load-verbose stream verbose)
     (error "attempt to load an empty FASL file:~%  ~S" (namestring stream)))
 
   (do-load-verbose stream verbose)
-  (let* ((*fasl-file* stream)
+  (let* ((*fasl-input-stream* stream)
         (*current-fop-table* (or (pop *free-fop-tables*) (make-array 1000)))
         (*current-fop-table-size* (length *current-fop-table*))
         (*fop-stack-pointer-on-entry* *fop-stack-pointer*))
         (*current-fop-table* (or (pop *free-fop-tables*) (make-array 1000)))
         (*current-fop-table-size* (length *current-fop-table*))
         (*fop-stack-pointer-on-entry* *fop-stack-pointer*))
index 7e8e78d..b3127f3 100644 (file)
                                                (type-of maybe-package))
                                            '*package* really-package)))))))
 
                                                (type-of maybe-package))
                                            '*package* really-package)))))))
 
+;;; Access *DEFAULT-PATHNAME-DEFAULTS*, warning if it's silly. (Unlike
+;;; the vaguely-analogous SANE-PACKAGE, we don't actually need to
+;;; reset the variable when it's silly, since even crazy values of
+;;; *DEFAULT-PATHNAME-DEFAULTS* don't leave the system in a state where
+;;; it's hard to recover interactively.)
+(defun sane-default-pathname-defaults ()
+  (let* ((dfd *default-pathname-defaults*)
+        (dfd-dir (pathname-directory dfd)))
+    ;; It's generally not good to use a relative pathname for
+    ;; *DEFAULT-PATHNAME-DEFAULTS*, since relative pathnames
+    ;; are defined by merging into a default pathname (which is,
+    ;; by default, *DEFAULT-PATHNAME-DEFAULTS*).
+    (when (and (consp dfd-dir)
+              (eql (first dfd-dir) :relative))
+      (warn
+       "~@<~S is a relative pathname. (But we'll try using it anyway.)~@:>"
+       '*default-pathname-defaults*))
+    *default-pathname-defaults*))
+
 ;;; Give names to elements of a numeric sequence.
 (defmacro defenum ((&key (prefix "") (suffix "") (start 0) (step 1))
                   &rest identifiers)
 ;;; Give names to elements of a numeric sequence.
 (defmacro defenum ((&key (prefix "") (suffix "") (start 0) (step 1))
                   &rest identifiers)
index dfaa5cf..cd6e61d 100644 (file)
     (without-gcing
       (save (unix-namestring core-file-name nil)
            (get-lisp-obj-address #'restart-lisp)))))
     (without-gcing
       (save (unix-namestring core-file-name nil)
            (get-lisp-obj-address #'restart-lisp)))))
-\f
-;;;; functions used by worldload.lisp in CMU CL bootstrapping
-
-;;; If NAME has been byte-compiled, and :RUNTIME is a feature, then
-;;; load the byte-compiled version, otherwise just do normal load.
-#+nil ; no longer needed in SBCL.. I think.. -- WHN 19990814
-(defun maybe-byte-load (name &optional (load-native t))
-  (let ((bname (make-pathname
-               :defaults name
-               :type #.(sb!c:backend-byte-fasl-file-type))))
-    (cond ((and (featurep :runtime)
-               (probe-file bname))
-          (load bname))
-         (load-native
-          (load name)))))
-
-;;; Replace a cold-loaded native object file with a byte-compiled one, if it
-;;; exists.
-#+nil ; no longer needed in SBCL.. I think.. -- WHN 19990814
-(defun byte-load-over (name)
-  (load (make-pathname
-        :defaults name
-        :type #.(sb!c:backend-byte-fasl-file-type))
-       :if-does-not-exist nil))
index bb82e38..b47f4c4 100644 (file)
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!IMPL")
+(in-package "SB!FASL")
 
 (defvar *load-source-default-type* "lisp"
   #!+sb-doc
   "The source file types which LOAD looks for by default.")
 
 
 (defvar *load-source-default-type* "lisp"
   #!+sb-doc
   "The source file types which LOAD looks for by default.")
 
+(declaim (type (or pathname null) *load-truename* *load-pathname*))
 (defvar *load-truename* nil
   #!+sb-doc
   "the TRUENAME of the file that LOAD is currently loading")
 (defvar *load-truename* nil
   #!+sb-doc
   "the TRUENAME of the file that LOAD is currently loading")
-
 (defvar *load-pathname* nil
   #!+sb-doc
   "the defaulted pathname that LOAD is currently loading")
 (defvar *load-pathname* nil
   #!+sb-doc
   "the defaulted pathname that LOAD is currently loading")
-
-(declaim (type (or pathname null) *load-truename* *load-pathname*))
 \f
 ;;;; LOAD-AS-SOURCE
 
 \f
 ;;;; LOAD-AS-SOURCE
 
       (t
        (let ((first-line (with-open-file (stream truename :direction :input)
                           (read-line stream nil)))
       (t
        (let ((first-line (with-open-file (stream truename :direction :input)
                           (read-line stream nil)))
-            (fhs sb!c:*fasl-header-string-start-string*))
+            (fhsss *fasl-header-string-start-string*))
         (cond
          ((and first-line
                (>= (length (the simple-string first-line))
         (cond
          ((and first-line
                (>= (length (the simple-string first-line))
-                   (length fhs))
-               (string= first-line fhs :end1 (length fhs)))
+                   (length fhsss))
+               (string= first-line fhsss :end1 (length fhsss)))
           (internal-load pathname truename if-does-not-exist verbose print
                          :binary))
          (t
           (internal-load pathname truename if-does-not-exist verbose print
                          :binary))
          (t
-          (when (string= (pathname-type truename)
-                         sb!c:*backend-fasl-file-type*)
+          (when (string= (pathname-type truename) *backend-fasl-file-type*)
             (error "File has a fasl file type, but no fasl file header:~%  ~S"
                    (namestring truename)))
           (internal-load pathname truename if-does-not-exist verbose print
             (error "File has a fasl file type, but no fasl file header:~%  ~S"
                    (namestring truename)))
           (internal-load pathname truename if-does-not-exist verbose print
   (multiple-value-bind (src-pn src-tn)
       (try-default-type pathname *load-source-default-type*)
     (multiple-value-bind (obj-pn obj-tn)
   (multiple-value-bind (src-pn src-tn)
       (try-default-type pathname *load-source-default-type*)
     (multiple-value-bind (obj-pn obj-tn)
-       (try-default-type pathname sb!c:*backend-fasl-file-type*)
+       (try-default-type pathname *backend-fasl-file-type*)
       (cond
        ((and obj-tn
             src-tn
       (cond
        ((and obj-tn
             src-tn
        (declare (fixnum i))
        (setf (code-header-ref code (decf index)) (pop-stack)))
       (sb!sys:without-gcing
        (declare (fixnum i))
        (setf (code-header-ref code (decf index)) (pop-stack)))
       (sb!sys:without-gcing
-       (read-n-bytes *fasl-file*
+       (read-n-bytes *fasl-input-stream*
                      (code-instructions code)
                      0
                      #!-gengc code-length
                      #!+gengc (* code-length sb!vm:word-bytes)))
       code)))
 
                      (code-instructions code)
                      0
                      #!-gengc code-length
                      #!+gengc (* code-length sb!vm:word-bytes)))
       code)))
 
+;;; Moving native code during a GC or purify is not so trivial on the
+;;; x86 port.
+;;;
+;;; Our strategy for allowing the loading of x86 native code into the
+;;; dynamic heap requires that the addresses of fixups be saved for
+;;; all these code objects. After a purify these fixups can be
+;;; dropped. In CMU CL, this policy was enabled with
+;;; *ENABLE-DYNAMIC-SPACE-CODE*; in SBCL it's always used.
+;;;
+;;; A little analysis of the header information is used to determine
+;;; if a code object is byte compiled, or native code.
 #!+x86
 (defun load-code (box-num code-length)
   (declare (fixnum box-num code-length))
 #!+x86
 (defun load-code (box-num code-length)
   (declare (fixnum box-num code-length))
        (push (pop-stack) stuff))
       (let* ((dbi (car (last stuff)))  ; debug-info
             (tto (first stuff))        ; trace-table-offset
        (push (pop-stack) stuff))
       (let* ((dbi (car (last stuff)))  ; debug-info
             (tto (first stuff))        ; trace-table-offset
-            (load-to-dynamic-space
-             (or *enable-dynamic-space-code*
-                 ;; definitely byte-compiled code?
-                 (and *load-byte-compiled-code-to-dynamic-space*
-                      (sb!c::debug-info-p dbi)
-                      (not (sb!c::compiled-debug-info-p dbi)))
-                 ;; or a x86 top level form?
-                 (and *load-x86-tlf-to-dynamic-space*
-                      (sb!c::compiled-debug-info-p dbi)
-                      (string= (sb!c::compiled-debug-info-name dbi)
-                               "top-level form")))) )
+            ;; Old CMU CL code had maybe-we-shouldn't-load-to-dyn-space
+            ;; pussyfooting around here, apparently dating back to the
+            ;; stone age of the X86 port, but in SBCL we always load
+            ;; to dynamic space. FIXME: So now this "variable" could go
+            ;; away entirely.
+            (load-to-dynamic-space t))
 
        (setq stuff (nreverse stuff))
 
 
        (setq stuff (nreverse stuff))
 
            (declare (fixnum i))
            (setf (code-header-ref code (decf index)) (pop stuff)))
          (sb!sys:without-gcing
            (declare (fixnum i))
            (setf (code-header-ref code (decf index)) (pop stuff)))
          (sb!sys:without-gcing
-          (read-n-bytes *fasl-file* (code-instructions code) 0 code-length))
+          (read-n-bytes *fasl-input-stream*
+                        (code-instructions code)
+                        0
+                        code-length))
          code)))))
 \f
 ;;;; linkage fixups
          code)))))
 \f
 ;;;; linkage fixups
index cca3068..a63916f 100644 (file)
@@ -1418,12 +1418,10 @@ a host-structure or string."
                          :namestring namestr
                          :offset (cdadr chunks)))))
        (parse-host (logical-chunkify namestr start end)))
                          :namestring namestr
                          :offset (cdadr chunks)))))
        (parse-host (logical-chunkify namestr start end)))
-      (values host :unspecific
-             (and (not (equal (directory)'(:absolute)))
-                  (directory))
-             name type version))))
+      (values host :unspecific (directory) name type version))))
 
 
-;;; We can't initialize this yet because not all host methods are loaded yet.
+;;; We can't initialize this yet because not all host methods are
+;;; loaded yet.
 (defvar *logical-pathname-defaults*)
 
 (defun logical-pathname (pathspec)
 (defvar *logical-pathname-defaults*)
 
 (defun logical-pathname (pathspec)
index 02504a2..410f1a6 100644 (file)
 \f
 (defconstant most-positive-fixnum #.sb!vm:*target-most-positive-fixnum*
   #!+sb-doc
 \f
 (defconstant most-positive-fixnum #.sb!vm:*target-most-positive-fixnum*
   #!+sb-doc
-  "The fixnum closest in value to positive infinity.")
+  "the fixnum closest in value to positive infinity")
 
 (defconstant most-negative-fixnum #.sb!vm:*target-most-negative-fixnum*
   #!+sb-doc
 
 (defconstant most-negative-fixnum #.sb!vm:*target-most-negative-fixnum*
   #!+sb-doc
-  "The fixnum closest in value to negative infinity.")
+  "the fixnum closest in value to negative infinity")
 \f
 ;;;; magic specials initialized by genesis
 
 \f
 ;;;; magic specials initialized by genesis
 
+;;; FIXME: The DEFVAR here is redundant with the (DECLAIM (SPECIAL ..))
+;;; of all static symbols in early-impl.lisp.
 #!-gengc
 (progn
   (defvar *current-catch-block*)
 #!-gengc
 (progn
   (defvar *current-catch-block*)
index 9c1e08c..b907676 100644 (file)
 (defun fixup-code-object (code offset fixup kind)
   (declare (type index offset))
   (flet ((add-fixup (code offset)
 (defun fixup-code-object (code offset fixup kind)
   (declare (type index offset))
   (flet ((add-fixup (code offset)
-          ;; Although this could check for and ignore fixups for code
-          ;; objects in the read-only and static spaces, this should
-          ;; only be the case when *enable-dynamic-space-code* is
-          ;; True.
-          (when sb!impl::*enable-dynamic-space-code*
-            (incf *num-fixups*)
-            (let ((fixups (code-header-ref code code-constants-offset)))
-              (cond ((typep fixups '(simple-array (unsigned-byte 32) (*)))
-                     (let ((new-fixups
-                            (adjust-array fixups (1+ (length fixups))
-                                          :element-type '(unsigned-byte 32))))
-                       (setf (aref new-fixups (length fixups)) offset)
-                       (setf (code-header-ref code code-constants-offset)
-                             new-fixups)))
-                    (t
-                     (unless (or (eq (get-type fixups)
-                                     sb!vm:unbound-marker-type)
-                                 (zerop fixups))
-                       (format t "** Init. code FU = ~S~%" fixups)) ; FIXME
+          ;; (We check for and ignore fixups for code objects in the
+          ;; read-only and static spaces. (In the old CMU CL code
+          ;; this check was conditional on *ENABLE-DYNAMIC-SPACE-CODE*,
+          ;; but in SBCL relocatable dynamic space code is always in
+          ;; use, so we always do the check.)
+          (incf *num-fixups*)
+          (let ((fixups (code-header-ref code code-constants-offset)))
+            (cond ((typep fixups '(simple-array (unsigned-byte 32) (*)))
+                   (let ((new-fixups
+                          (adjust-array fixups (1+ (length fixups))
+                                        :element-type '(unsigned-byte 32))))
+                     (setf (aref new-fixups (length fixups)) offset)
                      (setf (code-header-ref code code-constants-offset)
                      (setf (code-header-ref code code-constants-offset)
-                           (make-specializable-array
-                            1
-                            :element-type '(unsigned-byte 32)
-                            :initial-element offset))))))))
+                           new-fixups)))
+                  (t
+                   (unless (or (eq (get-type fixups)
+                                   sb!vm:unbound-marker-type)
+                               (zerop fixups))
+                     (format t "** Init. code FU = ~S~%" fixups)) ; FIXME
+                   (setf (code-header-ref code code-constants-offset)
+                         (make-specializable-array
+                          1
+                          :element-type '(unsigned-byte 32)
+                          :initial-element offset)))))))
     (sb!sys:without-gcing
      (let* ((sap (truly-the system-area-pointer
                            (sb!kernel:code-instructions code)))
     (sb!sys:without-gcing
      (let* ((sap (truly-the system-area-pointer
                            (sb!kernel:code-instructions code)))
index 195dcc2..9149984 100644 (file)
 ;;;; compiler constants
 
 (setf *backend-fasl-file-type* "axpf")
 ;;;; compiler constants
 
 (setf *backend-fasl-file-type* "axpf")
-(setf *backend-fasl-file-implementation* :alpha)
-(setf *backend-fasl-file-version* 2)
-;;;(setf *backend-fasl-file-version* 8)
-;;; 8 = sbcl-0.6.10.4 revived Gray stream support, changing stream layouts
+(defconstant +backend-fasl-file-implementation+ :alpha)
 
 (setf *backend-register-save-penalty* 3)
 
 
 (setf *backend-register-save-penalty* 3)
 
index bb06154..3fd46b2 100644 (file)
            (eval :scs (descriptor-reg)))
   (:vop-var vop)
   (:generator 13
            (eval :scs (descriptor-reg)))
   (:vop-var vop)
   (:generator 13
-    (load-symbol-value catch sb!impl::*current-catch-block*)
+    (load-symbol-value catch *current-catch-block*)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
        (inst mskll cur-nfp 4 nfp)))
     (inst mskll nsp-tn 4 nsp)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
        (inst mskll cur-nfp 4 nfp)))
     (inst mskll nsp-tn 4 nsp)
-    (load-symbol-value eval sb!impl::*eval-stack-top*)))
+    (load-symbol-value eval *eval-stack-top*)))
 
 (define-vop (restore-dynamic-state)
   (:args (catch :scs (descriptor-reg))
 
 (define-vop (restore-dynamic-state)
   (:args (catch :scs (descriptor-reg))
@@ -65,8 +65,8 @@
   (:vop-var vop)
   (:temporary (:sc any-reg) temp)
   (:generator 10
   (:vop-var vop)
   (:temporary (:sc any-reg) temp)
   (:generator 10
-    (store-symbol-value catch sb!impl::*current-catch-block*)
-    (store-symbol-value eval sb!impl::*eval-stack-top*)
+    (store-symbol-value catch *current-catch-block*)
+    (store-symbol-value eval *eval-stack-top*)
     (inst mskll nsp-tn 0 temp)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
     (inst mskll nsp-tn 0 temp)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
@@ -95,7 +95,7 @@
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 22
     (inst lda block (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 22
     (inst lda block (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
-    (load-symbol-value temp sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value temp *current-unwind-protect-block*)
     (storew temp block sb!vm:unwind-block-current-uwp-slot)
     (storew cfp-tn block sb!vm:unwind-block-current-cont-slot)
     (storew code-tn block sb!vm:unwind-block-current-code-slot)
     (storew temp block sb!vm:unwind-block-current-uwp-slot)
     (storew cfp-tn block sb!vm:unwind-block-current-cont-slot)
     (storew code-tn block sb!vm:unwind-block-current-code-slot)
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 44
     (inst lda result (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 44
     (inst lda result (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
-    (load-symbol-value temp sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value temp *current-unwind-protect-block*)
     (storew temp result sb!vm:catch-block-current-uwp-slot)
     (storew cfp-tn result sb!vm:catch-block-current-cont-slot)
     (storew code-tn result sb!vm:catch-block-current-code-slot)
     (storew temp result sb!vm:catch-block-current-uwp-slot)
     (storew cfp-tn result sb!vm:catch-block-current-cont-slot)
     (storew code-tn result sb!vm:catch-block-current-code-slot)
     (storew temp result sb!vm:catch-block-entry-pc-slot)
 
     (storew tag result sb!vm:catch-block-tag-slot)
     (storew temp result sb!vm:catch-block-entry-pc-slot)
 
     (storew tag result sb!vm:catch-block-tag-slot)
-    (load-symbol-value temp sb!impl::*current-catch-block*)
+    (load-symbol-value temp *current-catch-block*)
     (storew temp result sb!vm:catch-block-previous-catch-slot)
     (storew temp result sb!vm:catch-block-previous-catch-slot)
-    (store-symbol-value result sb!impl::*current-catch-block*)
+    (store-symbol-value result *current-catch-block*)
 
     (move result block)))
 
 
     (move result block)))
 
   (:temporary (:scs (descriptor-reg)) new-uwp)
   (:generator 7
     (inst lda new-uwp (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
   (:temporary (:scs (descriptor-reg)) new-uwp)
   (:generator 7
     (inst lda new-uwp (* (tn-offset tn) sb!vm:word-bytes) cfp-tn)
-    (store-symbol-value new-uwp sb!impl::*current-unwind-protect-block*)))
-
+    (store-symbol-value new-uwp *current-unwind-protect-block*)))
 
 (define-vop (unlink-catch-block)
   (:temporary (:scs (any-reg)) block)
   (:policy :fast-safe)
   (:translate %catch-breakup)
   (:generator 17
 
 (define-vop (unlink-catch-block)
   (:temporary (:scs (any-reg)) block)
   (:policy :fast-safe)
   (:translate %catch-breakup)
   (:generator 17
-    (load-symbol-value block sb!impl::*current-catch-block*)
+    (load-symbol-value block *current-catch-block*)
     (loadw block block sb!vm:catch-block-previous-catch-slot)
     (loadw block block sb!vm:catch-block-previous-catch-slot)
-    (store-symbol-value block sb!impl::*current-catch-block*)))
+    (store-symbol-value block *current-catch-block*)))
 
 (define-vop (unlink-unwind-protect)
   (:temporary (:scs (any-reg)) block)
   (:policy :fast-safe)
   (:translate %unwind-protect-breakup)
   (:generator 17
 
 (define-vop (unlink-unwind-protect)
   (:temporary (:scs (any-reg)) block)
   (:policy :fast-safe)
   (:translate %unwind-protect-breakup)
   (:generator 17
-    (load-symbol-value block sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value block *current-unwind-protect-block*)
     (loadw block block sb!vm:unwind-block-current-uwp-slot)
     (loadw block block sb!vm:unwind-block-current-uwp-slot)
-    (store-symbol-value block sb!impl::*current-unwind-protect-block*)))
+    (store-symbol-value block *current-unwind-protect-block*)))
 \f
 ;;;; NLX entry VOPs
 
 \f
 ;;;; NLX entry VOPs
 
index c618478..55511ad 100644 (file)
     sb!impl::*!initial-fdefn-objects*
 
     ;; Functions that the C code needs to call
     sb!impl::*!initial-fdefn-objects*
 
     ;; Functions that the C code needs to call
-    sb!impl::%initial-function
-    sb!impl::maybe-gc
+    maybe-gc
     sb!kernel::internal-error
     sb!di::handle-breakpoint
     sb!di::handle-function-end-breakpoint
     sb!kernel::internal-error
     sb!di::handle-breakpoint
     sb!di::handle-function-end-breakpoint
-    sb!impl::fdefinition-object
+    fdefinition-object
 
     ;; free Pointers
     *read-only-space-free-pointer*
 
     ;; free Pointers
     *read-only-space-free-pointer*
     *initial-dynamic-space-free-pointer*
 
     ;; things needed for non-local exit
     *initial-dynamic-space-free-pointer*
 
     ;; things needed for non-local exit
-    sb!impl::*current-catch-block*
-    sb!impl::*current-unwind-protect-block*
-    sb!c::*eval-stack-top*
+    *current-catch-block*
+    *current-unwind-protect-block*
+    *eval-stack-top*
 
     ;; interrupt handling
 
     ;; interrupt handling
-    sb!impl::*free-interrupt-context-index*
+    *free-interrupt-context-index*
     sb!unix::*interrupts-enabled*
     sb!unix::*interrupt-pending*))
 
     sb!unix::*interrupts-enabled*
     sb!unix::*interrupt-pending*))
 
index 837baf9..6c0c529 100644 (file)
 \f
 ;;;; miscellaneous backend properties
 
 \f
 ;;;; miscellaneous backend properties
 
-;;; the conventional file extension for fasl files on this architecture,
-;;; e.g. "x86f"
-(defvar *backend-fasl-file-type* nil)
-(declaim (type (or simple-string null) *backend-fasl-file-type*))
-
-;;; implementation and version of fasl files used
-(defvar *backend-fasl-file-implementation* nil)
-(defvar *backend-fasl-file-version* nil)
-(declaim (type (or keyword null) *backend-fasl-file-implementation*))
-(declaim (type (or index null) *backend-fasl-file-version*))
-
-;;; the number of references that a TN must have to offset the overhead of
-;;; saving the TN across a call
+;;; the number of references that a TN must have to offset the
+;;; overhead of saving the TN across a call
 (defvar *backend-register-save-penalty* 0)
 (declaim (type index *backend-register-save-penalty*))
 
 (defvar *backend-register-save-penalty* 0)
 (declaim (type index *backend-register-save-penalty*))
 
 ;;; the VM support routines
 (defvar *backend-support-routines* (make-vm-support-routines))
 (declaim (type vm-support-routines *backend-support-routines*))
 ;;; the VM support routines
 (defvar *backend-support-routines* (make-vm-support-routines))
 (declaim (type vm-support-routines *backend-support-routines*))
-\f
-;;;; utilities
-
-(defun backend-byte-fasl-file-implementation ()
-  *backend-byte-order*)
index cc8a999..fedaa89 100644 (file)
 
 (in-package "SB!C")
 
 
 (in-package "SB!C")
 
-;;;; the fasl file format that we use
-(defconstant byte-fasl-file-version 3)
-;;; 1 = before about sbcl-0.6.9.8
-;;; 2 = merged package SB-CONDITIONS into SB-KERNEL around sbcl-0.6.9.8
-;;; 3 = deleted obsolete CONS-UNIQUE-TAG bytecode in sbcl-0.6.11.8
-
 ;;; ### remaining work:
 ;;;
 ;;; - add more inline operations.
 ;;; ### remaining work:
 ;;;
 ;;; - add more inline operations.
              (describe-byte-component component xeps segment
                                       *compiler-trace-output*))
            (etypecase *compile-object*
              (describe-byte-component component xeps segment
                                       *compiler-trace-output*))
            (etypecase *compile-object*
-             (fasl-file
+             (fasl-output
               (maybe-mumble "FASL")
               (fasl-dump-byte-component segment code-length constants xeps
                                         *compile-object*))
               (maybe-mumble "FASL")
               (fasl-dump-byte-component segment code-length constants xeps
                                         *compile-object*))
index d17167c..ba1aaa2 100644 (file)
@@ -9,23 +9,23 @@
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!C")
-
-;;; FIXME: Double colons are bad, and there are lots of them in this
-;;; file, because both dump logic in SB!C and load logic in SB!IMPL
-;;; need to know about fops. Perhaps all the load/dump logic should be
-;;; moved into a single package, perhaps called SB-LD.
+(in-package "SB!FASL")
+;;; KLUDGE: Even though we're IN-PACKAGE SB!FASL, some of the code in
+;;; here is awfully chummy with the SB!C package. CMU CL didn't have
+;;; any separation between the two packages, and a lot of tight
+;;; coupling remains. -- WHN 2001-06-04
 \f
 ;;;; fasl dumper state
 
 \f
 ;;;; fasl dumper state
 
-;;; The FASL-FILE structure represents everything we need to know
-;;; about dumping to a fasl file. We need to objectify the state,
-;;; since the fasdumper must be reentrant.
-(defstruct (fasl-file
+;;; The FASL-OUTPUT structure represents everything we need to
+;;; know about dumping to a fasl file. (We need to objectify the
+;;; state because the fasdumper must be reentrant.)
+(defstruct (fasl-output
            #-no-ansi-print-object
            (:print-object (lambda (x s)
                             (print-unreadable-object (x s :type t)
            #-no-ansi-print-object
            (:print-object (lambda (x s)
                             (print-unreadable-object (x s :type t)
-                              (prin1 (namestring (fasl-file-stream x)) s))))
+                              (prin1 (namestring (fasl-output-stream x))
+                                     s))))
            (:copier nil))
   ;; the stream we dump to
   (stream (required-argument) :type stream)
            (:copier nil))
   ;; the stream we dump to
   (stream (required-argument) :type stream)
 (defvar *dump-only-valid-structures* t)
 ;;;; utilities
 
 (defvar *dump-only-valid-structures* t)
 ;;;; utilities
 
-;;; Write the byte B to the specified fasl-file stream.
-(defun dump-byte (b fasl-file)
-  (declare (type (unsigned-byte 8) b) (type fasl-file fasl-file))
-  (write-byte b (fasl-file-stream fasl-file)))
+;;; Write the byte B to the specified FASL-OUTPUT stream.
+(defun dump-byte (b fasl-output)
+  (declare (type (unsigned-byte 8) b) (type fasl-output fasl-output))
+  (write-byte b (fasl-output-stream fasl-output)))
 
 ;;; Dump a 4 byte unsigned integer.
 
 ;;; Dump a 4 byte unsigned integer.
-(defun dump-unsigned-32 (num fasl-file)
-  (declare (type (unsigned-byte 32) num) (type fasl-file fasl-file))
-  (let ((stream (fasl-file-stream fasl-file)))
+(defun dump-unsigned-32 (num fasl-output)
+  (declare (type (unsigned-byte 32) num))
+  (declare (type fasl-output fasl-output))
+  (let ((stream (fasl-output-stream fasl-output)))
     (dotimes (i 4)
       (write-byte (ldb (byte 8 (* 8 i)) num) stream))))
 
     (dotimes (i 4)
       (write-byte (ldb (byte 8 (* 8 i)) num) stream))))
 
 ;;; for either signed or unsigned integers. There's no range checking
 ;;; -- if you don't specify enough bytes for the number to fit, this
 ;;; function cheerfully outputs the low bytes.
 ;;; for either signed or unsigned integers. There's no range checking
 ;;; -- if you don't specify enough bytes for the number to fit, this
 ;;; function cheerfully outputs the low bytes.
-(defun dump-integer-as-n-bytes  (num bytes file)
-  (declare (integer num) (type index bytes) (type fasl-file file))
+(defun dump-integer-as-n-bytes  (num bytes fasl-output)
+  (declare (integer num) (type index bytes))
+  (declare (type fasl-output fasl-output))
   (do ((n num (ash n -8))
        (i bytes (1- i)))
       ((= i 0))
     (declare (type index i))
   (do ((n num (ash n -8))
        (i bytes (1- i)))
       ((= i 0))
     (declare (type index i))
-    (dump-byte (logand n #xff) file))
+    (dump-byte (logand n #xff) fasl-output))
   (values))
 
 ;;; Setting this variable to an (UNSIGNED-BYTE 32) value causes
   (values))
 
 ;;; Setting this variable to an (UNSIGNED-BYTE 32) value causes
 #!+sb-show (defvar *fop-nop4-count* nil)
 #!+sb-show (declaim (type (or (unsigned-byte 32) null) *fop-nop4-count*))
 
 #!+sb-show (defvar *fop-nop4-count* nil)
 #!+sb-show (declaim (type (or (unsigned-byte 32) null) *fop-nop4-count*))
 
-;;; Dump the FOP code for the named FOP to the specified fasl-file.
+;;; Dump the FOP code for the named FOP to the specified FASL-OUTPUT.
 ;;;
 ;;; FIXME: This should be a function, with a compiler macro expansion
 ;;; for the common constant-FS case. (Among other things, that'll stop
 ;;;
 ;;; FIXME: This should be a function, with a compiler macro expansion
 ;;; for the common constant-FS case. (Among other things, that'll stop
 ;;; optimizations should be conditional on #!+SB-FROZEN.
 (defmacro dump-fop (fs file)
   (let* ((fs (eval fs))
 ;;; optimizations should be conditional on #!+SB-FROZEN.
 (defmacro dump-fop (fs file)
   (let* ((fs (eval fs))
-        (val (get fs 'sb!impl::fop-code)))
+        (val (get fs 'fop-code)))
     (if val
       `(progn
         #!+sb-show
         (when *fop-nop4-count*
     (if val
       `(progn
         #!+sb-show
         (when *fop-nop4-count*
-          (dump-byte ,(get 'sb!impl::fop-nop4 'sb!impl::fop-code) ,file)
+          (dump-byte ,(get 'fop-nop4 'fop-code) ,file)
           (dump-unsigned-32 (mod (incf *fop-nop4-count*) (expt 2 32)) ,file))
         (dump-byte ',val ,file))
       (error "compiler bug: ~S is not a legal fasload operator." fs))))
           (dump-unsigned-32 (mod (incf *fop-nop4-count*) (expt 2 32)) ,file))
         (dump-byte ',val ,file))
       (error "compiler bug: ~S is not a legal fasload operator." fs))))
            (dump-unsigned-32 ,n-n ,n-file)))))
 
 ;;; Push the object at table offset Handle on the fasl stack.
            (dump-unsigned-32 ,n-n ,n-file)))))
 
 ;;; Push the object at table offset Handle on the fasl stack.
-(defun dump-push (handle file)
-  (declare (type index handle) (type fasl-file file))
-  (dump-fop* handle sb!impl::fop-byte-push sb!impl::fop-push file)
+(defun dump-push (handle fasl-output)
+  (declare (type index handle) (type fasl-output fasl-output))
+  (dump-fop* handle fop-byte-push fop-push fasl-output)
   (values))
 
 ;;; Pop the object currently on the fasl stack top into the table, and
 ;;; return the table index, incrementing the free pointer.
   (values))
 
 ;;; Pop the object currently on the fasl stack top into the table, and
 ;;; return the table index, incrementing the free pointer.
-(defun dump-pop (file)
+(defun dump-pop (fasl-output)
   (prog1
   (prog1
-      (fasl-file-table-free file)
-    (dump-fop 'sb!impl::fop-pop file)
-    (incf (fasl-file-table-free file))))
+      (fasl-output-table-free fasl-output)
+    (dump-fop 'fop-pop fasl-output)
+    (incf (fasl-output-table-free fasl-output))))
 
 ;;; If X is in File's EQUAL-TABLE, then push the object and return T,
 ;;; otherwise NIL. If *COLD-LOAD-DUMP* is true, then do nothing and
 ;;; return NIL.
 
 ;;; If X is in File's EQUAL-TABLE, then push the object and return T,
 ;;; otherwise NIL. If *COLD-LOAD-DUMP* is true, then do nothing and
 ;;; return NIL.
-(defun equal-check-table (x file)
-  (declare (type fasl-file file))
+(defun equal-check-table (x fasl-output)
+  (declare (type fasl-output fasl-output))
   (unless *cold-load-dump*
   (unless *cold-load-dump*
-    (let ((handle (gethash x (fasl-file-equal-table file))))
+    (let ((handle (gethash x (fasl-output-equal-table fasl-output))))
       (cond (handle
       (cond (handle
-            (dump-push handle file)
+            (dump-push handle fasl-output)
             t)
            (t
             nil)))))
             t)
            (t
             nil)))))
 ;;; object in the table. The object (also passed in as X) must already
 ;;; be on the top of the FOP stack. If *COLD-LOAD-DUMP* is true, then
 ;;; we don't do anything.
 ;;; object in the table. The object (also passed in as X) must already
 ;;; be on the top of the FOP stack. If *COLD-LOAD-DUMP* is true, then
 ;;; we don't do anything.
-(defun eq-save-object (x file)
-  (declare (type fasl-file file))
+(defun eq-save-object (x fasl-output)
+  (declare (type fasl-output fasl-output))
   (unless *cold-load-dump*
   (unless *cold-load-dump*
-    (let ((handle (dump-pop file)))
-      (setf (gethash x (fasl-file-eq-table file)) handle)
-      (dump-push handle file)))
+    (let ((handle (dump-pop fasl-output)))
+      (setf (gethash x (fasl-output-eq-table fasl-output)) handle)
+      (dump-push handle fasl-output)))
   (values))
   (values))
-(defun equal-save-object (x file)
-  (declare (type fasl-file file))
+(defun equal-save-object (x fasl-output)
+  (declare (type fasl-output fasl-output))
   (unless *cold-load-dump*
   (unless *cold-load-dump*
-    (let ((handle (dump-pop file)))
-      (setf (gethash x (fasl-file-equal-table file)) handle)
-      (setf (gethash x (fasl-file-eq-table file)) handle)
-      (dump-push handle file)))
+    (let ((handle (dump-pop fasl-output)))
+      (setf (gethash x (fasl-output-equal-table fasl-output)) handle)
+      (setf (gethash x (fasl-output-eq-table fasl-output)) handle)
+      (dump-push handle fasl-output)))
   (values))
 
 ;;; Record X in File's CIRCULARITY-TABLE unless *COLD-LOAD-DUMP* is
   (values))
 
 ;;; Record X in File's CIRCULARITY-TABLE unless *COLD-LOAD-DUMP* is
 ;;; should never be recursively called on a circular reference.
 ;;; Instead, the dumping function must detect the circularity and
 ;;; arrange for the dumped object to be patched.
 ;;; should never be recursively called on a circular reference.
 ;;; Instead, the dumping function must detect the circularity and
 ;;; arrange for the dumped object to be patched.
-(defun note-potential-circularity (x file)
+(defun note-potential-circularity (x fasl-output)
   (unless *cold-load-dump*
   (unless *cold-load-dump*
-    (let ((circ (fasl-file-circularity-table file)))
+    (let ((circ (fasl-output-circularity-table fasl-output)))
       (aver (not (gethash x circ)))
       (setf (gethash x circ) x)))
   (values))
       (aver (not (gethash x circ)))
       (setf (gethash x circ) x)))
   (values))
 ;;; Dump FORM to a fasl file so that it evaluated at load time in normal
 ;;; load and at cold-load time in cold load. This is used to dump package
 ;;; frobbing forms.
 ;;; Dump FORM to a fasl file so that it evaluated at load time in normal
 ;;; load and at cold-load time in cold load. This is used to dump package
 ;;; frobbing forms.
-(defun fasl-dump-cold-load-form (form file)
-  (declare (type fasl-file file))
-  (dump-fop 'sb!impl::fop-normal-load file)
+(defun fasl-dump-cold-load-form (form fasl-output)
+  (declare (type fasl-output fasl-output))
+  (dump-fop 'fop-normal-load fasl-output)
   (let ((*cold-load-dump* t))
   (let ((*cold-load-dump* t))
-    (dump-object form file))
-  (dump-fop 'sb!impl::fop-eval-for-effect file)
-  (dump-fop 'sb!impl::fop-maybe-cold-load file)
+    (dump-object form fasl-output))
+  (dump-fop 'fop-eval-for-effect fasl-output)
+  (dump-fop 'fop-maybe-cold-load fasl-output)
   (values))
 \f
 ;;;; opening and closing fasl files
 
   (values))
 \f
 ;;;; opening and closing fasl files
 
-;;; Open a fasl file, write its header, and return a FASL-FILE object
-;;; for dumping to it. Some human-readable information about the
-;;; source code is given by the string WHERE. If BYTE-P is true, this
-;;; file will contain no native code, and is thus largely
+;;; Open a fasl file, write its header, and return a FASL-OUTPUT
+;;; object for dumping to it. Some human-readable information about
+;;; the source code is given by the string WHERE. If BYTE-P is true,
+;;; this file will contain no native code, and is thus largely
 ;;; implementation independent.
 ;;; implementation independent.
-(defun open-fasl-file (name where &optional byte-p)
+(defun open-fasl-output (name where &optional byte-p)
   (declare (type pathname name))
   (let* ((stream (open name
                       :direction :output
                       :if-exists :new-version
                       :element-type 'sb!assem:assembly-unit))
   (declare (type pathname name))
   (let* ((stream (open name
                       :direction :output
                       :if-exists :new-version
                       :element-type 'sb!assem:assembly-unit))
-        (res (make-fasl-file :stream stream)))
+        (res (make-fasl-output :stream stream)))
 
     ;; Begin the header with the constant machine-readable (and
     ;; semi-human-readable) string which is used to identify fasl files.
 
     ;; Begin the header with the constant machine-readable (and
     ;; semi-human-readable) string which is used to identify fasl files.
-    (write-string sb!c:*fasl-header-string-start-string* stream)
+    (write-string *fasl-header-string-start-string* stream)
 
     ;; The constant string which begins the header is followed by
     ;; arbitrary human-readable text, terminated by a special
 
     ;; The constant string which begins the header is followed by
     ;; arbitrary human-readable text, terminated by a special
             (machine-instance)
             (sb!xc:lisp-implementation-type)
             (sb!xc:lisp-implementation-version)))
             (machine-instance)
             (sb!xc:lisp-implementation-type)
             (sb!xc:lisp-implementation-version)))
-    (dump-byte sb!c:*fasl-header-string-stop-char-code* res)
+    (dump-byte +fasl-header-string-stop-char-code+ res)
 
     ;; Finish the header by outputting fasl file implementation and
     ;; version in machine-readable form.
 
     ;; Finish the header by outputting fasl file implementation and
     ;; version in machine-readable form.
-    (multiple-value-bind (implementation version)
-       (if byte-p
-           (values *backend-byte-order*
-                   byte-fasl-file-version)
-           (values *backend-fasl-file-implementation*
-                   *backend-fasl-file-version*))
+    (let ((implementation (if byte-p
+                             (backend-byte-fasl-file-implementation)
+                             +backend-fasl-file-implementation+)))
       (dump-unsigned-32 (length (symbol-name implementation)) res)
       (dotimes (i (length (symbol-name implementation)))
       (dump-unsigned-32 (length (symbol-name implementation)) res)
       (dotimes (i (length (symbol-name implementation)))
-       (dump-byte (char-code (aref (symbol-name implementation) i)) res))
-      (dump-unsigned-32 version res))
+       (dump-byte (char-code (aref (symbol-name implementation) i)) res)))
+    (dump-unsigned-32 +fasl-file-version+ res)
 
     res))
 
 
     res))
 
-;;; Close the specified FASL-FILE, aborting the write if ABORT-P.
-;;; We do various sanity checks, then end the group.
-(defun close-fasl-file (file abort-p)
-  (declare (type fasl-file file))
-  (aver (zerop (hash-table-count (fasl-file-patch-table file))))
-  (dump-fop 'sb!impl::fop-verify-empty-stack file)
-  (dump-fop 'sb!impl::fop-verify-table-size file)
-  (dump-unsigned-32 (fasl-file-table-free file) file)
-  (dump-fop 'sb!impl::fop-end-group file)
-  (close (fasl-file-stream file) :abort abort-p)
+;;; Close the specified FASL-OUTPUT, aborting the write if ABORT-P. 
+(defun close-fasl-output (fasl-output abort-p)
+  (declare (type fasl-output fasl-output))
+
+  ;; sanity checks
+  (aver (zerop (hash-table-count (fasl-output-patch-table fasl-output))))
+
+  ;; End the group.
+  (dump-fop 'fop-verify-empty-stack fasl-output)
+  (dump-fop 'fop-verify-table-size fasl-output)
+  (dump-unsigned-32 (fasl-output-table-free fasl-output)
+                   fasl-output)
+  (dump-fop 'fop-end-group fasl-output)
+
+  ;; That's all, folks.
+  (close (fasl-output-stream fasl-output) :abort abort-p)
   (values))
 \f
 ;;;; main entries to object dumping
   (values))
 \f
 ;;;; main entries to object dumping
 ;;;
 ;;; When we go to dump the object, we enter it in the CIRCULARITY-TABLE.
 (defun dump-non-immediate-object (x file)
 ;;;
 ;;; When we go to dump the object, we enter it in the CIRCULARITY-TABLE.
 (defun dump-non-immediate-object (x file)
-  (let ((index (gethash x (fasl-file-eq-table file))))
+  (let ((index (gethash x (fasl-output-eq-table file))))
     (cond ((and index (not *cold-load-dump*))
           (dump-push index file))
          (t
     (cond ((and index (not *cold-load-dump*))
           (dump-push index file))
          (t
   (cond ((listp x)
         (if x
             (dump-non-immediate-object x file)
   (cond ((listp x)
         (if x
             (dump-non-immediate-object x file)
-            (dump-fop 'sb!impl::fop-empty-list file)))
+            (dump-fop 'fop-empty-list file)))
        ((symbolp x)
         (if (eq x t)
        ((symbolp x)
         (if (eq x t)
-            (dump-fop 'sb!impl::fop-truth file)
+            (dump-fop 'fop-truth file)
             (dump-non-immediate-object x file)))
        ((fixnump x) (dump-integer x file))
        ((characterp x) (dump-character x file))
             (dump-non-immediate-object x file)))
        ((fixnump x) (dump-integer x file))
        ((characterp x) (dump-character x file))
 ;;; fetching the enclosing object from the table, and then CDR'ing it
 ;;; if necessary.
 (defun dump-circularities (infos file)
 ;;; fetching the enclosing object from the table, and then CDR'ing it
 ;;; if necessary.
 (defun dump-circularities (infos file)
-  (let ((table (fasl-file-eq-table file)))
+  (let ((table (fasl-output-eq-table file)))
     (dolist (info infos)
     (dolist (info infos)
+
       (let* ((value (circularity-value info))
             (enclosing (circularity-enclosing-object info)))
        (dump-push (gethash enclosing table) file)
       (let* ((value (circularity-value info))
             (enclosing (circularity-enclosing-object info)))
        (dump-push (gethash enclosing table) file)
          (do ((current enclosing (cdr current))
               (i 0 (1+ i)))
              ((eq current value)
          (do ((current enclosing (cdr current))
               (i 0 (1+ i)))
              ((eq current value)
-              (dump-fop 'sb!impl::fop-nthcdr file)
+              (dump-fop 'fop-nthcdr file)
               (dump-unsigned-32 i file))
            (declare (type index i)))))
 
       (ecase (circularity-type info)
               (dump-unsigned-32 i file))
            (declare (type index i)))))
 
       (ecase (circularity-type info)
-       (:rplaca (dump-fop 'sb!impl::fop-rplaca file))
-       (:rplacd (dump-fop 'sb!impl::fop-rplacd file))
-       (:svset (dump-fop 'sb!impl::fop-svset file))
-       (:struct-set (dump-fop 'sb!impl::fop-structset file)))
+        (:rplaca     (dump-fop 'fop-rplaca    file))
+        (:rplacd     (dump-fop 'fop-rplacd    file))
+        (:svset      (dump-fop 'fop-svset     file))
+        (:struct-set (dump-fop 'fop-structset file)))
       (dump-unsigned-32 (gethash (circularity-object info) table) file)
       (dump-unsigned-32 (circularity-index info) file))))
 
 ;;; Set up stuff for circularity detection, then dump an object. All
 ;;; shared and circular structure will be exactly preserved within a
       (dump-unsigned-32 (gethash (circularity-object info) table) file)
       (dump-unsigned-32 (circularity-index info) file))))
 
 ;;; Set up stuff for circularity detection, then dump an object. All
 ;;; shared and circular structure will be exactly preserved within a
-;;; single call to Dump-Object. Sharing between objects dumped by
+;;; single call to DUMP-OBJECT. Sharing between objects dumped by
 ;;; separate calls is only preserved when convenient.
 ;;;
 ;;; We peek at the object type so that we only pay the circular
 ;;; separate calls is only preserved when convenient.
 ;;;
 ;;; We peek at the object type so that we only pay the circular
          (consp x)
          (typep x 'instance))
       (let ((*circularities-detected* ())
          (consp x)
          (typep x 'instance))
       (let ((*circularities-detected* ())
-           (circ (fasl-file-circularity-table file)))
+           (circ (fasl-output-circularity-table file)))
        (clrhash circ)
        (sub-dump-object x file)
        (when *circularities-detected*
        (clrhash circ)
        (sub-dump-object x file)
        (when *circularities-detected*
 ;;; Emit a funcall of the function and return the handle for the
 ;;; result.
 (defun fasl-dump-load-time-value-lambda (fun file)
 ;;; Emit a funcall of the function and return the handle for the
 ;;; result.
 (defun fasl-dump-load-time-value-lambda (fun file)
-  (declare (type clambda fun) (type fasl-file file))
-  (let ((handle (gethash (leaf-info fun) (fasl-file-entry-table file))))
+  (declare (type sb!c::clambda fun) (type fasl-output file))
+  (let ((handle (gethash (sb!c::leaf-info fun)
+                        (fasl-output-entry-table file))))
     (aver handle)
     (dump-push handle file)
     (aver handle)
     (dump-push handle file)
-    (dump-fop 'sb!impl::fop-funcall file)
+    (dump-fop 'fop-funcall file)
     (dump-byte 0 file))
   (dump-pop file))
 
 ;;; Return T iff CONSTANT has not already been dumped. It's been
 ;;; dumped if it's in the EQ table.
     (dump-byte 0 file))
   (dump-pop file))
 
 ;;; Return T iff CONSTANT has not already been dumped. It's been
 ;;; dumped if it's in the EQ table.
-(defun fasl-constant-already-dumped (constant file)
-  (if (or (gethash constant (fasl-file-eq-table file))
-         (gethash constant (fasl-file-valid-structures file)))
+(defun fasl-constant-already-dumped-p (constant file)
+  (if (or (gethash constant (fasl-output-eq-table file))
+         (gethash constant (fasl-output-valid-structures file)))
       t
       nil))
 
 ;;; Use HANDLE whenever we try to dump CONSTANT. HANDLE should have been
 ;;; returned earlier by FASL-DUMP-LOAD-TIME-VALUE-LAMBDA.
 (defun fasl-note-handle-for-constant (constant handle file)
       t
       nil))
 
 ;;; Use HANDLE whenever we try to dump CONSTANT. HANDLE should have been
 ;;; returned earlier by FASL-DUMP-LOAD-TIME-VALUE-LAMBDA.
 (defun fasl-note-handle-for-constant (constant handle file)
-  (let ((table (fasl-file-eq-table file)))
+  (let ((table (fasl-output-eq-table file)))
     (when (gethash constant table)
       (error "~S already dumped?" constant))
     (setf (gethash constant table) handle))
     (when (gethash constant table)
       (error "~S already dumped?" constant))
     (setf (gethash constant table) handle))
 ;;; Note that the specified structure can just be dumped by
 ;;; enumerating the slots.
 (defun fasl-validate-structure (structure file)
 ;;; Note that the specified structure can just be dumped by
 ;;; enumerating the slots.
 (defun fasl-validate-structure (structure file)
-  (setf (gethash structure (fasl-file-valid-structures file)) t)
+  (setf (gethash structure (fasl-output-valid-structures file)) t)
   (values))
 \f
 ;;;; number dumping
   (values))
 \f
 ;;;; number dumping
 (defun dump-ratio (x file)
   (sub-dump-object (numerator x) file)
   (sub-dump-object (denominator x) file)
 (defun dump-ratio (x file)
   (sub-dump-object (numerator x) file)
   (sub-dump-object (denominator x) file)
-  (dump-fop 'sb!impl::fop-ratio file))
+  (dump-fop 'fop-ratio file))
 
 ;;; Dump an integer.
 (defun dump-integer (n file)
   (typecase n
     ((signed-byte 8)
 
 ;;; Dump an integer.
 (defun dump-integer (n file)
   (typecase n
     ((signed-byte 8)
-     (dump-fop 'sb!impl::fop-byte-integer file)
+     (dump-fop 'fop-byte-integer file)
      (dump-byte (logand #xFF n) file))
     ((unsigned-byte 31)
      (dump-byte (logand #xFF n) file))
     ((unsigned-byte 31)
-     (dump-fop 'sb!impl::fop-word-integer file)
+     (dump-fop 'fop-word-integer file)
      (dump-unsigned-32 n file))
     ((signed-byte 32)
      (dump-unsigned-32 n file))
     ((signed-byte 32)
-     (dump-fop 'sb!impl::fop-word-integer file)
+     (dump-fop 'fop-word-integer file)
      (dump-integer-as-n-bytes n 4 file))
     (t
      (let ((bytes (ceiling (1+ (integer-length n)) 8)))
      (dump-integer-as-n-bytes n 4 file))
     (t
      (let ((bytes (ceiling (1+ (integer-length n)) 8)))
-       (dump-fop* bytes
-                 sb!impl::fop-small-integer
-                 sb!impl::fop-integer
-                 file)
+       (dump-fop* bytes fop-small-integer fop-integer file)
        (dump-integer-as-n-bytes n bytes file)))))
 
 (defun dump-float (x file)
   (etypecase x
     (single-float
        (dump-integer-as-n-bytes n bytes file)))))
 
 (defun dump-float (x file)
   (etypecase x
     (single-float
-     (dump-fop 'sb!impl::fop-single-float file)
+     (dump-fop 'fop-single-float file)
      (dump-integer-as-n-bytes (single-float-bits x) 4 file))
     (double-float
      (dump-integer-as-n-bytes (single-float-bits x) 4 file))
     (double-float
-     (dump-fop 'sb!impl::fop-double-float file)
+     (dump-fop 'fop-double-float file)
      (let ((x x))
        (declare (double-float x))
        ;; FIXME: Why sometimes DUMP-UNSIGNED-32 and sometimes
      (let ((x x))
        (declare (double-float x))
        ;; FIXME: Why sometimes DUMP-UNSIGNED-32 and sometimes
        (dump-integer-as-n-bytes (double-float-high-bits x) 4 file)))
     #!+long-float
     (long-float
        (dump-integer-as-n-bytes (double-float-high-bits x) 4 file)))
     #!+long-float
     (long-float
-     (dump-fop 'sb!impl::fop-long-float file)
+     (dump-fop 'fop-long-float file)
      (dump-long-float x file))))
 
 (defun dump-complex (x file)
   (typecase x
     #-sb-xc-host
     ((complex single-float)
      (dump-long-float x file))))
 
 (defun dump-complex (x file)
   (typecase x
     #-sb-xc-host
     ((complex single-float)
-     (dump-fop 'sb!impl::fop-complex-single-float file)
+     (dump-fop 'fop-complex-single-float file)
      (dump-integer-as-n-bytes (single-float-bits (realpart x)) 4 file)
      (dump-integer-as-n-bytes (single-float-bits (imagpart x)) 4 file))
     #-sb-xc-host
     ((complex double-float)
      (dump-integer-as-n-bytes (single-float-bits (realpart x)) 4 file)
      (dump-integer-as-n-bytes (single-float-bits (imagpart x)) 4 file))
     #-sb-xc-host
     ((complex double-float)
-     (dump-fop 'sb!impl::fop-complex-double-float file)
+     (dump-fop 'fop-complex-double-float file)
      (let ((re (realpart x)))
        (declare (double-float re))
        (dump-unsigned-32 (double-float-low-bits re) file)
      (let ((re (realpart x)))
        (declare (double-float re))
        (dump-unsigned-32 (double-float-low-bits re) file)
        (dump-integer-as-n-bytes (double-float-high-bits im) 4 file)))
     #!+(and long-float (not sb-xc))
     ((complex long-float)
        (dump-integer-as-n-bytes (double-float-high-bits im) 4 file)))
     #!+(and long-float (not sb-xc))
     ((complex long-float)
-     (dump-fop 'sb!impl::fop-complex-long-float file)
+     (dump-fop 'fop-complex-long-float file)
      (dump-long-float (realpart x) file)
      (dump-long-float (imagpart x) file))
     (t
      (sub-dump-object (realpart x) file)
      (sub-dump-object (imagpart x) file)
      (dump-long-float (realpart x) file)
      (dump-long-float (imagpart x) file))
     (t
      (sub-dump-object (realpart x) file)
      (sub-dump-object (imagpart x) file)
-     (dump-fop 'sb!impl::fop-complex file))))
+     (dump-fop 'fop-complex file))))
 \f
 ;;;; symbol dumping
 
 \f
 ;;;; symbol dumping
 
 ;;; DUMP-SYMBOL and DUMP-LIST. The mapping between names and behavior
 ;;; should be made more consistent.
 (defun dump-package (pkg file)
 ;;; DUMP-SYMBOL and DUMP-LIST. The mapping between names and behavior
 ;;; should be made more consistent.
 (defun dump-package (pkg file)
-  (declare (type package pkg) (type fasl-file file) (values index)
-          (inline assoc))
-  (cond ((cdr (assoc pkg (fasl-file-packages file) :test #'eq)))
+  (declare (type package pkg) (type fasl-output file))
+  (declare (values index))
+  (declare (inline assoc))
+  (cond ((cdr (assoc pkg (fasl-output-packages file) :test #'eq)))
        (t
         (unless *cold-load-dump*
        (t
         (unless *cold-load-dump*
-          (dump-fop 'sb!impl::fop-normal-load file))
+          (dump-fop 'fop-normal-load file))
         (dump-simple-string (package-name pkg) file)
         (dump-simple-string (package-name pkg) file)
-        (dump-fop 'sb!impl::fop-package file)
+        (dump-fop 'fop-package file)
         (unless *cold-load-dump*
         (unless *cold-load-dump*
-          (dump-fop 'sb!impl::fop-maybe-cold-load file))
+          (dump-fop 'fop-maybe-cold-load file))
         (let ((entry (dump-pop file)))
         (let ((entry (dump-pop file)))
-          (push (cons pkg entry) (fasl-file-packages file))
+          (push (cons pkg entry) (fasl-output-packages file))
           entry))))
 \f
 ;;; dumper for lists
           entry))))
 \f
 ;;; dumper for lists
 ;;; This inhibits all circularity detection.
 (defun dump-list (list file)
   (aver (and list
 ;;; This inhibits all circularity detection.
 (defun dump-list (list file)
   (aver (and list
-            (not (gethash list (fasl-file-circularity-table file)))))
+            (not (gethash list (fasl-output-circularity-table file)))))
   (do* ((l list (cdr l))
        (n 0 (1+ n))
   (do* ((l list (cdr l))
        (n 0 (1+ n))
-       (circ (fasl-file-circularity-table file)))
+       (circ (fasl-output-circularity-table file)))
        ((atom l)
        (cond ((null l)
               (terminate-undotted-list n file))
        ((atom l)
        (cond ((null l)
               (terminate-undotted-list n file))
             (sub-dump-object obj file))))))
 
 (defun terminate-dotted-list (n file)
             (sub-dump-object obj file))))))
 
 (defun terminate-dotted-list (n file)
-  (declare (type index n) (type fasl-file file))
+  (declare (type index n) (type fasl-output file))
   (case n
   (case n
-    (1 (dump-fop 'sb!impl::fop-list*-1 file))
-    (2 (dump-fop 'sb!impl::fop-list*-2 file))
-    (3 (dump-fop 'sb!impl::fop-list*-3 file))
-    (4 (dump-fop 'sb!impl::fop-list*-4 file))
-    (5 (dump-fop 'sb!impl::fop-list*-5 file))
-    (6 (dump-fop 'sb!impl::fop-list*-6 file))
-    (7 (dump-fop 'sb!impl::fop-list*-7 file))
-    (8 (dump-fop 'sb!impl::fop-list*-8 file))
+    (1 (dump-fop 'fop-list*-1 file))
+    (2 (dump-fop 'fop-list*-2 file))
+    (3 (dump-fop 'fop-list*-3 file))
+    (4 (dump-fop 'fop-list*-4 file))
+    (5 (dump-fop 'fop-list*-5 file))
+    (6 (dump-fop 'fop-list*-6 file))
+    (7 (dump-fop 'fop-list*-7 file))
+    (8 (dump-fop 'fop-list*-8 file))
     (T (do ((nn n (- nn 255)))
           ((< nn 256)
     (T (do ((nn n (- nn 255)))
           ((< nn 256)
-           (dump-fop 'sb!impl::fop-list* file)
+           (dump-fop 'fop-list* file)
            (dump-byte nn file))
         (declare (type index nn))
            (dump-byte nn file))
         (declare (type index nn))
-        (dump-fop 'sb!impl::fop-list* file)
+        (dump-fop 'fop-list* file)
         (dump-byte 255 file)))))
 
 ;;; If N > 255, must build list with one LIST operator, then LIST*
 ;;; operators.
 
 (defun terminate-undotted-list (n file)
         (dump-byte 255 file)))))
 
 ;;; If N > 255, must build list with one LIST operator, then LIST*
 ;;; operators.
 
 (defun terminate-undotted-list (n file)
-  (declare (type index n) (type fasl-file file))
+  (declare (type index n) (type fasl-output file))
   (case n
   (case n
-    (1 (dump-fop 'sb!impl::fop-list-1 file))
-    (2 (dump-fop 'sb!impl::fop-list-2 file))
-    (3 (dump-fop 'sb!impl::fop-list-3 file))
-    (4 (dump-fop 'sb!impl::fop-list-4 file))
-    (5 (dump-fop 'sb!impl::fop-list-5 file))
-    (6 (dump-fop 'sb!impl::fop-list-6 file))
-    (7 (dump-fop 'sb!impl::fop-list-7 file))
-    (8 (dump-fop 'sb!impl::fop-list-8 file))
+    (1 (dump-fop 'fop-list-1 file))
+    (2 (dump-fop 'fop-list-2 file))
+    (3 (dump-fop 'fop-list-3 file))
+    (4 (dump-fop 'fop-list-4 file))
+    (5 (dump-fop 'fop-list-5 file))
+    (6 (dump-fop 'fop-list-6 file))
+    (7 (dump-fop 'fop-list-7 file))
+    (8 (dump-fop 'fop-list-8 file))
     (T (cond ((< n 256)
     (T (cond ((< n 256)
-             (dump-fop 'sb!impl::fop-list file)
+             (dump-fop 'fop-list file)
              (dump-byte n file))
              (dump-byte n file))
-            (t (dump-fop 'sb!impl::fop-list file)
+            (t (dump-fop 'fop-list file)
                (dump-byte 255 file)
                (do ((nn (- n 255) (- nn 255)))
                    ((< nn 256)
                (dump-byte 255 file)
                (do ((nn (- n 255) (- nn 255)))
                    ((< nn 256)
-                    (dump-fop 'sb!impl::fop-list* file)
+                    (dump-fop 'fop-list* file)
                     (dump-byte nn file))
                  (declare (type index nn))
                     (dump-byte nn file))
                  (declare (type index nn))
-                 (dump-fop 'sb!impl::fop-list* file)
+                 (dump-fop 'fop-list* file)
                  (dump-byte 255 file)))))))
 \f
 ;;;; array dumping
                  (dump-byte 255 file)))))))
 \f
 ;;;; array dumping
 
 ;;; Dump a SIMPLE-VECTOR, handling any circularities.
 (defun dump-simple-vector (v file)
 
 ;;; Dump a SIMPLE-VECTOR, handling any circularities.
 (defun dump-simple-vector (v file)
-  (declare (type simple-vector v) (type fasl-file file))
+  (declare (type simple-vector v) (type fasl-output file))
   (note-potential-circularity v file)
   (do ((index 0 (1+ index))
        (length (length v))
   (note-potential-circularity v file)
   (do ((index 0 (1+ index))
        (length (length v))
-       (circ (fasl-file-circularity-table file)))
+       (circ (fasl-output-circularity-table file)))
       ((= index length)
       ((= index length)
-       (dump-fop* length
-                 sb!impl::fop-small-vector
-                 sb!impl::fop-vector
-                 file))
+       (dump-fop* length fop-small-vector fop-vector file))
     (let* ((obj (aref v index))
           (ref (gethash obj circ)))
       (cond (ref
     (let* ((obj (aref v index))
           (ref (gethash obj circ)))
       (cond (ref
   (let ((len (length vec)))
     (labels ((dump-unsigned-vector (size bytes)
               (unless data-only
   (let ((len (length vec)))
     (labels ((dump-unsigned-vector (size bytes)
               (unless data-only
-                (dump-fop 'sb!impl::fop-int-vector file)
+                (dump-fop 'fop-int-vector file)
                 (dump-unsigned-32 len file)
                 (dump-byte size file))
               ;; The case which is easy to handle in a portable way is when
                 (dump-unsigned-32 len file)
                 (dump-byte size file))
               ;; The case which is easy to handle in a portable way is when
               ;; provided in the cross-compilation host, only on the
               ;; target machine.)
               (unless data-only
               ;; provided in the cross-compilation host, only on the
               ;; target machine.)
               (unless data-only
-                (dump-fop 'sb!impl::fop-signed-int-vector file)
+                (dump-fop 'fop-signed-int-vector file)
                 (dump-unsigned-32 len file)
                 (dump-byte size file))
               (dump-raw-bytes vec bytes file)))
                 (dump-unsigned-32 len file)
                 (dump-byte size file))
               (dump-raw-bytes vec bytes file)))
 ;;; Dump characters and string-ish things.
 
 (defun dump-character (ch file)
 ;;; Dump characters and string-ish things.
 
 (defun dump-character (ch file)
-  (dump-fop 'sb!impl::fop-short-character file)
+  (dump-fop 'fop-short-character file)
   (dump-byte (char-code ch) file))
 
 ;;; a helper function shared by DUMP-SIMPLE-STRING and DUMP-SYMBOL
   (dump-byte (char-code ch) file))
 
 ;;; a helper function shared by DUMP-SIMPLE-STRING and DUMP-SYMBOL
-(defun dump-characters-of-string (s fasl-file)
-  (declare (type string s) (type fasl-file fasl-file))
+(defun dump-characters-of-string (s fasl-output)
+  (declare (type string s) (type fasl-output fasl-output))
   (dovector (c s)
   (dovector (c s)
-    (dump-byte (char-code c) fasl-file))
+    (dump-byte (char-code c) fasl-output))
   (values))
 
 ;;; Dump a SIMPLE-BASE-STRING.
 ;;; FIXME: should be called DUMP-SIMPLE-BASE-STRING then
 (defun dump-simple-string (s file)
   (declare (type simple-base-string s))
   (values))
 
 ;;; Dump a SIMPLE-BASE-STRING.
 ;;; FIXME: should be called DUMP-SIMPLE-BASE-STRING then
 (defun dump-simple-string (s file)
   (declare (type simple-base-string s))
-  (dump-fop* (length s)
-            sb!impl::fop-small-string
-            sb!impl::fop-string
-            file)
+  (dump-fop* (length s) fop-small-string fop-string file)
   (dump-characters-of-string s file)
   (values))
 
   (dump-characters-of-string s file)
   (values))
 
 ;;; table, but don't record that we have done so if *COLD-LOAD-DUMP*
 ;;; is true.
 (defun dump-symbol (s file)
 ;;; table, but don't record that we have done so if *COLD-LOAD-DUMP*
 ;;; is true.
 (defun dump-symbol (s file)
+  (declare (type fasl-output file))
   (let* ((pname (symbol-name s))
         (pname-length (length pname))
         (pkg (symbol-package s)))
 
     (cond ((null pkg)
           (dump-fop* pname-length
   (let* ((pname (symbol-name s))
         (pname-length (length pname))
         (pkg (symbol-package s)))
 
     (cond ((null pkg)
           (dump-fop* pname-length
-                     sb!impl::fop-uninterned-small-symbol-save
-                     sb!impl::fop-uninterned-symbol-save
+                     fop-uninterned-small-symbol-save
+                     fop-uninterned-symbol-save
                      file))
          ;; CMU CL had FOP-SYMBOL-SAVE/FOP-SMALL-SYMBOL-SAVE fops which
          ;; used the current value of *PACKAGE*. Unfortunately that's
                      file))
          ;; CMU CL had FOP-SYMBOL-SAVE/FOP-SMALL-SYMBOL-SAVE fops which
          ;; used the current value of *PACKAGE*. Unfortunately that's
          ;; from SBCL.
          ;;((eq pkg *package*)
          ;; (dump-fop* pname-length
          ;; from SBCL.
          ;;((eq pkg *package*)
          ;; (dump-fop* pname-length
-         ;;        sb!impl::fop-small-symbol-save
-         ;;        sb!impl::fop-symbol-save file))
+         ;;        fop-small-symbol-save
+         ;;        fop-symbol-save file))
          ((eq pkg sb!int:*cl-package*)
           (dump-fop* pname-length
          ((eq pkg sb!int:*cl-package*)
           (dump-fop* pname-length
-                     sb!impl::fop-lisp-small-symbol-save
-                     sb!impl::fop-lisp-symbol-save
+                     fop-lisp-small-symbol-save
+                     fop-lisp-symbol-save
                      file))
          ((eq pkg sb!int:*keyword-package*)
           (dump-fop* pname-length
                      file))
          ((eq pkg sb!int:*keyword-package*)
           (dump-fop* pname-length
-                     sb!impl::fop-keyword-small-symbol-save
-                     sb!impl::fop-keyword-symbol-save
+                     fop-keyword-small-symbol-save
+                     fop-keyword-symbol-save
                      file))
          ((< pname-length 256)
           (dump-fop* (dump-package pkg file)
                      file))
          ((< pname-length 256)
           (dump-fop* (dump-package pkg file)
-                     sb!impl::fop-small-symbol-in-byte-package-save
-                     sb!impl::fop-small-symbol-in-package-save
+                     fop-small-symbol-in-byte-package-save
+                     fop-small-symbol-in-package-save
                      file)
           (dump-byte pname-length file))
          (t
           (dump-fop* (dump-package pkg file)
                      file)
           (dump-byte pname-length file))
          (t
           (dump-fop* (dump-package pkg file)
-                     sb!impl::fop-symbol-in-byte-package-save
-                     sb!impl::fop-symbol-in-package-save
+                     fop-symbol-in-byte-package-save
+                     fop-symbol-in-package-save
                      file)
           (dump-unsigned-32 pname-length file)))
 
     (dump-characters-of-string pname file)
 
     (unless *cold-load-dump*
                      file)
           (dump-unsigned-32 pname-length file)))
 
     (dump-characters-of-string pname file)
 
     (unless *cold-load-dump*
-      (setf (gethash s (fasl-file-eq-table file))
-           (fasl-file-table-free file)))
+      (setf (gethash s (fasl-output-eq-table file))
+           (fasl-output-table-free file)))
 
 
-    (incf (fasl-file-table-free file)))
+    (incf (fasl-output-table-free file)))
 
   (values))
 \f
 ;;;; component (function) dumping
 
 
   (values))
 \f
 ;;;; component (function) dumping
 
-(defun dump-segment (segment code-length fasl-file)
+(defun dump-segment (segment code-length fasl-output)
   (declare (type sb!assem:segment segment)
   (declare (type sb!assem:segment segment)
-          (type fasl-file fasl-file))
-  (let* ((stream (fasl-file-stream fasl-file))
+          (type fasl-output fasl-output))
+  (let* ((stream (fasl-output-stream fasl-output))
         (nwritten (write-segment-contents segment stream)))
     ;; In CMU CL there was no enforced connection between the CODE-LENGTH
     ;; argument and the number of bytes actually written. I added this
         (nwritten (write-segment-contents segment stream)))
     ;; In CMU CL there was no enforced connection between the CODE-LENGTH
     ;; argument and the number of bytes actually written. I added this
   ;; do either. -- WHN 19990323
   #!+gengc (unless (zerop (logand code-length 3))
             (dotimes (i (- 4 (logand code-length 3)))
   ;; do either. -- WHN 19990323
   #!+gengc (unless (zerop (logand code-length 3))
             (dotimes (i (- 4 (logand code-length 3)))
-              (dump-byte 0 fasl-file)))
+              (dump-byte 0 fasl-output)))
   (values))
 
 ;;; Dump all the fixups. Currently there are three flavors of fixup:
 ;;;  - assembly routines: named by a symbol
 ;;;  - foreign (C) symbols: named by a string
 ;;;  - code object references: don't need a name.
   (values))
 
 ;;; Dump all the fixups. Currently there are three flavors of fixup:
 ;;;  - assembly routines: named by a symbol
 ;;;  - foreign (C) symbols: named by a string
 ;;;  - code object references: don't need a name.
-(defun dump-fixups (fixups fasl-file)
-  (declare (list fixups) (type fasl-file fasl-file))
+(defun dump-fixups (fixups fasl-output)
+  (declare (list fixups) (type fasl-output fasl-output))
   (dolist (info fixups)
     ;; FIXME: Packing data with LIST in NOTE-FIXUP and unpacking them
     ;; with FIRST, SECOND, and THIRD here is hard to follow and
   (dolist (info fixups)
     ;; FIXME: Packing data with LIST in NOTE-FIXUP and unpacking them
     ;; with FIRST, SECOND, and THIRD here is hard to follow and
       ;; I can tell, FIXUP-OFFSET is not actually an offset, it's an
       ;; internal label used instead of NAME for :CODE-OBJECT fixups.
       ;; Notice that in the :CODE-OBJECT case, NAME is ignored.)
       ;; I can tell, FIXUP-OFFSET is not actually an offset, it's an
       ;; internal label used instead of NAME for :CODE-OBJECT fixups.
       ;; Notice that in the :CODE-OBJECT case, NAME is ignored.)
-      (dump-fop 'sb!impl::fop-normal-load fasl-file)
+      (dump-fop 'fop-normal-load fasl-output)
       (let ((*cold-load-dump* t))
       (let ((*cold-load-dump* t))
-       (dump-object kind fasl-file))
-      (dump-fop 'sb!impl::fop-maybe-cold-load fasl-file)
+       (dump-object kind fasl-output))
+      (dump-fop 'fop-maybe-cold-load fasl-output)
       ;; Depending on the flavor, we may have various kinds of
       ;; noise before the offset.
       (ecase flavor
        (:assembly-routine
         (aver (symbolp name))
       ;; Depending on the flavor, we may have various kinds of
       ;; noise before the offset.
       (ecase flavor
        (:assembly-routine
         (aver (symbolp name))
-        (dump-fop 'sb!impl::fop-normal-load fasl-file)
+        (dump-fop 'fop-normal-load fasl-output)
         (let ((*cold-load-dump* t))
         (let ((*cold-load-dump* t))
-          (dump-object name fasl-file))
-        (dump-fop 'sb!impl::fop-maybe-cold-load fasl-file)
-        (dump-fop 'sb!impl::fop-assembler-fixup fasl-file))
+          (dump-object name fasl-output))
+        (dump-fop 'fop-maybe-cold-load fasl-output)
+        (dump-fop 'fop-assembler-fixup fasl-output))
        (:foreign
         (aver (stringp name))
        (:foreign
         (aver (stringp name))
-        (dump-fop 'sb!impl::fop-foreign-fixup fasl-file)
+        (dump-fop 'fop-foreign-fixup fasl-output)
         (let ((len (length name)))
           (aver (< len 256)) ; (limit imposed by fop definition)
         (let ((len (length name)))
           (aver (< len 256)) ; (limit imposed by fop definition)
-          (dump-byte len fasl-file)
+          (dump-byte len fasl-output)
           (dotimes (i len)
           (dotimes (i len)
-            (dump-byte (char-code (schar name i)) fasl-file))))
+            (dump-byte (char-code (schar name i)) fasl-output))))
        (:code-object
         (aver (null name))
        (:code-object
         (aver (null name))
-        (dump-fop 'sb!impl::fop-code-object-fixup fasl-file)))
+        (dump-fop 'fop-code-object-fixup fasl-output)))
       ;; No matter what the flavor, we'll always dump the offset.
       ;; No matter what the flavor, we'll always dump the offset.
-      (dump-unsigned-32 offset fasl-file)))
+      (dump-unsigned-32 offset fasl-output)))
   (values))
 
 ;;; Dump out the constant pool and code-vector for component, push the
   (values))
 
 ;;; Dump out the constant pool and code-vector for component, push the
                         code-length
                         trace-table-as-list
                         fixups
                         code-length
                         trace-table-as-list
                         fixups
-                        fasl-file)
+                        fasl-output)
 
   (declare (type component component)
           (list trace-table-as-list)
           (type index code-length)
 
   (declare (type component component)
           (list trace-table-as-list)
           (type index code-length)
-          (type fasl-file fasl-file))
+          (type fasl-output fasl-output))
 
   (let* ((2comp (component-info component))
 
   (let* ((2comp (component-info component))
-        (constants (ir2-component-constants 2comp))
+        (constants (sb!c::ir2-component-constants 2comp))
         (header-length (length constants))
         (packed-trace-table (pack-trace-table trace-table-as-list))
         (total-length (+ code-length
         (header-length (length constants))
         (packed-trace-table (pack-trace-table trace-table-as-list))
         (total-length (+ code-length
-                         (* (length packed-trace-table) tt-bytes-per-entry))))
+                         (* (length packed-trace-table)
+                            sb!c::tt-bytes-per-entry))))
 
     (collect ((patches))
 
       ;; Dump the debug info.
       #!+gengc
 
     (collect ((patches))
 
       ;; Dump the debug info.
       #!+gengc
-      (let ((info (debug-info-for-component component))
+      (let ((info (sb!c::debug-info-for-component component))
            (*dump-only-valid-structures* nil))
            (*dump-only-valid-structures* nil))
-       (dump-object info fasl-file)
-       (let ((info-handle (dump-pop fasl-file)))
-         (dump-push info-handle fasl-file)
-         (push info-handle (fasl-file-debug-info fasl-file))))
+       (dump-object info fasl-output)
+       (let ((info-handle (dump-pop fasl-output)))
+         (dump-push info-handle fasl-output)
+         (push info-handle (fasl-output-debug-info fasl-output))))
 
       ;; Dump the offset of the trace table.
 
       ;; Dump the offset of the trace table.
-      (dump-object code-length fasl-file)
+      (dump-object code-length fasl-output)
       ;; FIXME: As long as we don't have GENGC, the trace table is
       ;; hardwired to be empty. So we might be able to get rid of
       ;; trace tables? However, we should probably wait for the first
       ;; FIXME: As long as we don't have GENGC, the trace table is
       ;; hardwired to be empty. So we might be able to get rid of
       ;; trace tables? However, we should probably wait for the first
        (let ((entry (aref constants i)))
          (etypecase entry
            (constant
        (let ((entry (aref constants i)))
          (etypecase entry
            (constant
-            (dump-object (constant-value entry) fasl-file))
+            (dump-object (sb!c::constant-value entry) fasl-output))
            (cons
             (ecase (car entry)
               (:entry
            (cons
             (ecase (car entry)
               (:entry
-               (let* ((info (leaf-info (cdr entry)))
+               (let* ((info (sb!c::leaf-info (cdr entry)))
                       (handle (gethash info
                       (handle (gethash info
-                                       (fasl-file-entry-table fasl-file))))
+                                       (fasl-output-entry-table
+                                        fasl-output))))
                  (cond
                   (handle
                  (cond
                   (handle
-                   (dump-push handle fasl-file))
+                   (dump-push handle fasl-output))
                   (t
                    (patches (cons info i))
                   (t
                    (patches (cons info i))
-                   (dump-fop 'sb!impl::fop-misc-trap fasl-file)))))
+                   (dump-fop 'fop-misc-trap fasl-output)))))
               (:load-time-value
               (:load-time-value
-               (dump-push (cdr entry) fasl-file))
+               (dump-push (cdr entry) fasl-output))
               (:fdefinition
               (:fdefinition
-               (dump-object (cdr entry) fasl-file)
-               (dump-fop 'sb!impl::fop-fdefinition fasl-file))))
+               (dump-object (cdr entry) fasl-output)
+               (dump-fop 'fop-fdefinition fasl-output))))
            (null
            (null
-            (dump-fop 'sb!impl::fop-misc-trap fasl-file)))))
+            (dump-fop 'fop-misc-trap fasl-output)))))
 
       ;; Dump the debug info.
       #!-gengc
 
       ;; Dump the debug info.
       #!-gengc
-      (let ((info (debug-info-for-component component))
+      (let ((info (sb!c::debug-info-for-component component))
            (*dump-only-valid-structures* nil))
            (*dump-only-valid-structures* nil))
-       (dump-object info fasl-file)
-       (let ((info-handle (dump-pop fasl-file)))
-         (dump-push info-handle fasl-file)
-         (push info-handle (fasl-file-debug-info fasl-file))))
+       (dump-object info fasl-output)
+       (let ((info-handle (dump-pop fasl-output)))
+         (dump-push info-handle fasl-output)
+         (push info-handle (fasl-output-debug-info fasl-output))))
 
       (let ((num-consts #!+gengc (- header-length
                                    sb!vm:code-debug-info-slot)
 
       (let ((num-consts #!+gengc (- header-length
                                    sb!vm:code-debug-info-slot)
            (total-length #!+gengc (ceiling total-length 4)
                          #!-gengc total-length))
        (cond ((and (< num-consts #x100) (< total-length #x10000))
            (total-length #!+gengc (ceiling total-length 4)
                          #!-gengc total-length))
        (cond ((and (< num-consts #x100) (< total-length #x10000))
-              (dump-fop 'sb!impl::fop-small-code fasl-file)
-              (dump-byte num-consts fasl-file)
-              (dump-integer-as-n-bytes total-length 2 fasl-file))
+              (dump-fop 'fop-small-code fasl-output)
+              (dump-byte num-consts fasl-output)
+              (dump-integer-as-n-bytes total-length 2 fasl-output))
              (t
              (t
-              (dump-fop 'sb!impl::fop-code fasl-file)
-              (dump-unsigned-32 num-consts fasl-file)
-              (dump-unsigned-32 total-length fasl-file))))
+              (dump-fop 'fop-code fasl-output)
+              (dump-unsigned-32 num-consts fasl-output)
+              (dump-unsigned-32 total-length fasl-output))))
 
       ;; These two dumps are only ones which contribute to our
       ;; TOTAL-LENGTH value.
 
       ;; These two dumps are only ones which contribute to our
       ;; TOTAL-LENGTH value.
-      (dump-segment code-segment code-length fasl-file)
-      (dump-i-vector packed-trace-table fasl-file :data-only t)
+      (dump-segment code-segment code-length fasl-output)
+      (dump-i-vector packed-trace-table fasl-output :data-only t)
 
       ;; DUMP-FIXUPS does its own internal DUMP-FOPs: the bytes it
       ;; dumps aren't included in the TOTAL-LENGTH passed to our
       ;; FOP-CODE/FOP-SMALL-CODE fop.
 
       ;; DUMP-FIXUPS does its own internal DUMP-FOPs: the bytes it
       ;; dumps aren't included in the TOTAL-LENGTH passed to our
       ;; FOP-CODE/FOP-SMALL-CODE fop.
-      (dump-fixups fixups fasl-file)
+      (dump-fixups fixups fasl-output)
 
 
-      (dump-fop 'sb!impl::fop-sanctify-for-execution fasl-file)
-      (let ((handle (dump-pop fasl-file)))
+      (dump-fop 'fop-sanctify-for-execution fasl-output)
+      (let ((handle (dump-pop fasl-output)))
        (dolist (patch (patches))
          (push (cons handle (cdr patch))
        (dolist (patch (patches))
          (push (cons handle (cdr patch))
-               (gethash (car patch) (fasl-file-patch-table fasl-file))))
+               (gethash (car patch)
+                        (fasl-output-patch-table fasl-output))))
        handle))))
 
 (defun dump-assembler-routines (code-segment length fixups routines file)
        handle))))
 
 (defun dump-assembler-routines (code-segment length fixups routines file)
-  (dump-fop 'sb!impl::fop-assembler-code file)
+  (dump-fop 'fop-assembler-code file)
   (dump-unsigned-32 #!+gengc (ceiling length 4)
                    #!-gengc length
                    file)
   (dump-unsigned-32 #!+gengc (ceiling length 4)
                    #!-gengc length
                    file)
-  (write-segment-contents code-segment (fasl-file-stream file))
+  (write-segment-contents code-segment (fasl-output-stream file))
   (dolist (routine routines)
   (dolist (routine routines)
-    (dump-fop 'sb!impl::fop-normal-load file)
+    (dump-fop 'fop-normal-load file)
     (let ((*cold-load-dump* t))
       (dump-object (car routine) file))
     (let ((*cold-load-dump* t))
       (dump-object (car routine) file))
-    (dump-fop 'sb!impl::fop-maybe-cold-load file)
-    (dump-fop 'sb!impl::fop-assembler-routine file)
+    (dump-fop 'fop-maybe-cold-load file)
+    (dump-fop 'fop-assembler-routine file)
     (dump-unsigned-32 (label-position (cdr routine)) file))
   (dump-fixups fixups file)
     (dump-unsigned-32 (label-position (cdr routine)) file))
   (dump-fixups fixups file)
-  (dump-fop 'sb!impl::fop-sanctify-for-execution file)
+  (dump-fop 'fop-sanctify-for-execution file)
   (dump-pop file))
 
 ;;; Dump a function-entry data structure corresponding to ENTRY to
   (dump-pop file))
 
 ;;; Dump a function-entry data structure corresponding to ENTRY to
 ;;; cold loader can instantiate the definition at cold-load time,
 ;;; allowing forward references to functions in top-level forms.
 (defun dump-one-entry (entry code-handle file)
 ;;; cold loader can instantiate the definition at cold-load time,
 ;;; allowing forward references to functions in top-level forms.
 (defun dump-one-entry (entry code-handle file)
-  (declare (type entry-info entry) (type index code-handle)
-          (type fasl-file file))
-  (let ((name (entry-info-name entry)))
+  (declare (type sb!c::entry-info entry) (type index code-handle)
+          (type fasl-output file))
+  (let ((name (sb!c::entry-info-name entry)))
     (dump-push code-handle file)
     (dump-object name file)
     (dump-push code-handle file)
     (dump-object name file)
-    (dump-object (entry-info-arguments entry) file)
-    (dump-object (entry-info-type entry) file)
-    (dump-fop 'sb!impl::fop-function-entry file)
-    (dump-unsigned-32 (label-position (entry-info-offset entry)) file)
+    (dump-object (sb!c::entry-info-arguments entry) file)
+    (dump-object (sb!c::entry-info-type entry) file)
+    (dump-fop 'fop-function-entry file)
+    (dump-unsigned-32 (label-position (sb!c::entry-info-offset entry)) file)
     (let ((handle (dump-pop file)))
       (when (and name (or (symbolp name) (listp name)))
        (dump-object name file)
        (dump-push handle file)
     (let ((handle (dump-pop file)))
       (when (and name (or (symbolp name) (listp name)))
        (dump-object name file)
        (dump-push handle file)
-       (dump-fop 'sb!impl::fop-fset file))
+       (dump-fop 'fop-fset file))
       handle)))
 
 ;;; Alter the code object referenced by CODE-HANDLE at the specified
 ;;; OFFSET, storing the object referenced by ENTRY-HANDLE.
 (defun dump-alter-code-object (code-handle offset entry-handle file)
       handle)))
 
 ;;; Alter the code object referenced by CODE-HANDLE at the specified
 ;;; OFFSET, storing the object referenced by ENTRY-HANDLE.
 (defun dump-alter-code-object (code-handle offset entry-handle file)
-  (declare (type index code-handle entry-handle offset) (type fasl-file file))
+  (declare (type index code-handle entry-handle offset))
+  (declare (type fasl-output file))
   (dump-push code-handle file)
   (dump-push entry-handle file)
   (dump-push code-handle file)
   (dump-push entry-handle file)
-  (dump-fop* offset
-            sb!impl::fop-byte-alter-code
-            sb!impl::fop-alter-code
-            file)
+  (dump-fop* offset fop-byte-alter-code fop-alter-code file)
   (values))
 
 ;;; Dump the code, constants, etc. for component. We pass in the
   (values))
 
 ;;; Dump the code, constants, etc. for component. We pass in the
                            trace-table
                            fixups
                            file)
                            trace-table
                            fixups
                            file)
-  (declare (type component component) (list trace-table) (type fasl-file file))
+  (declare (type component component) (list trace-table))
+  (declare (type fasl-output file))
 
 
-  (dump-fop 'sb!impl::fop-verify-empty-stack file)
-  (dump-fop 'sb!impl::fop-verify-table-size file)
-  (dump-unsigned-32 (fasl-file-table-free file) file)
+  (dump-fop 'fop-verify-empty-stack file)
+  (dump-fop 'fop-verify-table-size file)
+  (dump-unsigned-32 (fasl-output-table-free file) file)
 
   #!+sb-dyncount
 
   #!+sb-dyncount
-  (let ((info (ir2-component-dyncount-info (component-info component))))
+  (let ((info (sb!c::ir2-component-dyncount-info (component-info component))))
     (when info
       (fasl-validate-structure info file)))
 
     (when info
       (fasl-validate-structure info file)))
 
                                       fixups
                                       file))
        (2comp (component-info component)))
                                       fixups
                                       file))
        (2comp (component-info component)))
-    (dump-fop 'sb!impl::fop-verify-empty-stack file)
+    (dump-fop 'fop-verify-empty-stack file)
 
 
-    (dolist (entry (ir2-component-entries 2comp))
+    (dolist (entry (sb!c::ir2-component-entries 2comp))
       (let ((entry-handle (dump-one-entry entry code-handle file)))
       (let ((entry-handle (dump-one-entry entry code-handle file)))
-       (setf (gethash entry (fasl-file-entry-table file)) entry-handle)
+       (setf (gethash entry (fasl-output-entry-table file)) entry-handle)
 
 
-       (let ((old (gethash entry (fasl-file-patch-table file))))
+       (let ((old (gethash entry (fasl-output-patch-table file))))
          ;; FIXME: All this code is shared with
          ;; FASL-DUMP-BYTE-COMPONENT, and should probably be gathered
          ;; up into a named function (DUMP-PATCHES?) called from both
          ;; FIXME: All this code is shared with
          ;; FASL-DUMP-BYTE-COMPONENT, and should probably be gathered
          ;; up into a named function (DUMP-PATCHES?) called from both
                                      (cdr patch)
                                      entry-handle
                                      file))
                                      (cdr patch)
                                      entry-handle
                                      file))
-           (remhash entry (fasl-file-patch-table file)))))))
+           (remhash entry (fasl-output-patch-table file)))))))
   (values))
 
 (defun dump-byte-code-object (segment code-length constants file)
   (declare (type sb!assem:segment segment)
           (type index code-length)
           (type vector constants)
   (values))
 
 (defun dump-byte-code-object (segment code-length constants file)
   (declare (type sb!assem:segment segment)
           (type index code-length)
           (type vector constants)
-          (type fasl-file file))
+          (type fasl-output file))
   (collect ((entry-patches))
 
     ;; Dump the debug info.
     #!+gengc
   (collect ((entry-patches))
 
     ;; Dump the debug info.
     #!+gengc
-    (let ((info (make-debug-info
-                :name (component-name *component-being-compiled*)))
+    (let ((info (sb!c::make-debug-info
+                :name (sb!c::component-name *component-being-compiled*)))
          (*dump-only-valid-structures* nil))
       (dump-object info file)
       (let ((info-handle (dump-pop file)))
        (dump-push info-handle file)
          (*dump-only-valid-structures* nil))
       (dump-object info file)
       (let ((info-handle (dump-pop file)))
        (dump-push info-handle file)
-       (push info-handle (fasl-file-debug-info file))))
+       (push info-handle (fasl-output-debug-info file))))
 
     ;; The "trace table" is initialized by loader to hold a list of
     ;; all byte functions in this code object (for debug info.)
 
     ;; The "trace table" is initialized by loader to hold a list of
     ;; all byte functions in this code object (for debug info.)
       (let ((entry (aref constants i)))
        (etypecase entry
          (constant
       (let ((entry (aref constants i)))
        (etypecase entry
          (constant
-          (dump-object (constant-value entry) file))
+          (dump-object (sb!c::constant-value entry) file))
          (null
          (null
-          (dump-fop 'sb!impl::fop-misc-trap file))
+          (dump-fop 'fop-misc-trap file))
          (list
           (ecase (car entry)
             (:entry
          (list
           (ecase (car entry)
             (:entry
-             (let* ((info (leaf-info (cdr entry)))
-                    (handle (gethash info (fasl-file-entry-table file))))
+             (let* ((info (sb!c::leaf-info (cdr entry)))
+                    (handle (gethash info
+                                     (fasl-output-entry-table file))))
                (cond
                 (handle
                  (dump-push handle file))
                 (t
                  (entry-patches (cons info
                                       (+ i sb!vm:code-constants-offset)))
                (cond
                 (handle
                  (dump-push handle file))
                 (t
                  (entry-patches (cons info
                                       (+ i sb!vm:code-constants-offset)))
-                 (dump-fop 'sb!impl::fop-misc-trap file)))))
+                 (dump-fop 'fop-misc-trap file)))))
             (:load-time-value
              (dump-push (cdr entry) file))
             (:fdefinition
              (dump-object (cdr entry) file)
             (:load-time-value
              (dump-push (cdr entry) file))
             (:fdefinition
              (dump-object (cdr entry) file)
-             (dump-fop 'sb!impl::fop-fdefinition file))
+             (dump-fop 'fop-fdefinition file))
             (:type-predicate
              (dump-object 'load-type-predicate file)
              (let ((*unparse-function-type-simplify* t))
                (dump-object (type-specifier (cdr entry)) file))
             (:type-predicate
              (dump-object 'load-type-predicate file)
              (let ((*unparse-function-type-simplify* t))
                (dump-object (type-specifier (cdr entry)) file))
-             (dump-fop 'sb!impl::fop-funcall file)
+             (dump-fop 'fop-funcall file)
              (dump-byte 1 file)))))))
 
     ;; Dump the debug info.
     #!-gengc
              (dump-byte 1 file)))))))
 
     ;; Dump the debug info.
     #!-gengc
-    (let ((info (make-debug-info :name
-                                (component-name *component-being-compiled*)))
+    (let ((info (sb!c::make-debug-info :name
+                                      (sb!c::component-name
+                                       *component-being-compiled*)))
          (*dump-only-valid-structures* nil))
       (dump-object info file)
       (let ((info-handle (dump-pop file)))
        (dump-push info-handle file)
          (*dump-only-valid-structures* nil))
       (dump-object info file)
       (let ((info-handle (dump-pop file)))
        (dump-push info-handle file)
-       (push info-handle (fasl-file-debug-info file))))
+       (push info-handle (fasl-output-debug-info file))))
 
     (let ((num-consts #!+gengc (+ (length constants) 2)
                      #!-gengc (1+ (length constants)))
          (code-length #!+gengc (ceiling code-length 4)
                       #!-gengc code-length))
       (cond ((and (< num-consts #x100) (< code-length #x10000))
 
     (let ((num-consts #!+gengc (+ (length constants) 2)
                      #!-gengc (1+ (length constants)))
          (code-length #!+gengc (ceiling code-length 4)
                       #!-gengc code-length))
       (cond ((and (< num-consts #x100) (< code-length #x10000))
-            (dump-fop 'sb!impl::fop-small-code file)
+            (dump-fop 'fop-small-code file)
             (dump-byte num-consts file)
             (dump-integer-as-n-bytes code-length 2 file))
            (t
             (dump-byte num-consts file)
             (dump-integer-as-n-bytes code-length 2 file))
            (t
-            (dump-fop 'sb!impl::fop-code file)
+            (dump-fop 'fop-code file)
             (dump-unsigned-32 num-consts file)
             (dump-unsigned-32 code-length file))))
     (dump-segment segment code-length file)
     (let ((code-handle (dump-pop file))
             (dump-unsigned-32 num-consts file)
             (dump-unsigned-32 code-length file))))
     (dump-segment segment code-length file)
     (let ((code-handle (dump-pop file))
-         (patch-table (fasl-file-patch-table file)))
+         (patch-table (fasl-output-patch-table file)))
       (dolist (patch (entry-patches))
        (push (cons code-handle (cdr patch))
              (gethash (car patch) patch-table)))
       code-handle)))
 
       (dolist (patch (entry-patches))
        (push (cons code-handle (cdr patch))
              (gethash (car patch) patch-table)))
       code-handle)))
 
-;;; Dump a BYTE-FUNCTION object. We dump the layout and
-;;; funcallable-instance info, but rely on the loader setting up the
-;;; correct funcallable-instance-function.
-(defun dump-byte-function (xep code-handle file)
-  (let ((nslots (- (get-closure-length xep)
-                  ;; 1- for header
-                  (1- sb!vm:funcallable-instance-info-offset))))
-    (dotimes (i nslots)
-      (if (zerop i)
-         (dump-push code-handle file)
-         (dump-object (%funcallable-instance-info xep i) file)))
-    (dump-object (%funcallable-instance-layout xep) file)
-    (dump-fop 'sb!impl::fop-make-byte-compiled-function file)
-    (dump-byte nslots file))
-  (values))
-
 ;;; Dump a byte-component. This is similar to FASL-DUMP-COMPONENT, but
 ;;; different.
 (defun fasl-dump-byte-component (segment length constants xeps file)
 ;;; Dump a byte-component. This is similar to FASL-DUMP-COMPONENT, but
 ;;; different.
 (defun fasl-dump-byte-component (segment length constants xeps file)
           (type index length)
           (type vector constants)
           (type list xeps)
           (type index length)
           (type vector constants)
           (type list xeps)
-          (type fasl-file file))
+          (type fasl-output file))
 
   (let ((code-handle (dump-byte-code-object segment length constants file)))
     (dolist (noise xeps)
       (let* ((lambda (car noise))
 
   (let ((code-handle (dump-byte-code-object segment length constants file)))
     (dolist (noise xeps)
       (let* ((lambda (car noise))
-            (info (lambda-info lambda))
+            (info (sb!c::lambda-info lambda))
             (xep (cdr noise)))
        (dump-byte-function xep code-handle file)
        (let* ((entry-handle (dump-pop file))
             (xep (cdr noise)))
        (dump-byte-function xep code-handle file)
        (let* ((entry-handle (dump-pop file))
-              (patch-table (fasl-file-patch-table file))
+              (patch-table (fasl-output-patch-table file))
               (old (gethash info patch-table)))
               (old (gethash info patch-table)))
-         (setf (gethash info (fasl-file-entry-table file)) entry-handle)
+         (setf (gethash info (fasl-output-entry-table file))
+               entry-handle)
          (when old
            (dolist (patch old)
              (dump-alter-code-object (car patch)
          (when old
            (dolist (patch old)
              (dump-alter-code-object (car patch)
 ;;; Dump a FOP-FUNCALL to call an already dumped top-level lambda at
 ;;; load time.
 (defun fasl-dump-top-level-lambda-call (fun file)
 ;;; Dump a FOP-FUNCALL to call an already dumped top-level lambda at
 ;;; load time.
 (defun fasl-dump-top-level-lambda-call (fun file)
-  (declare (type clambda fun) (type fasl-file file))
-  (let ((handle (gethash (leaf-info fun) (fasl-file-entry-table file))))
+  (declare (type sb!c::clambda fun) (type fasl-output file))
+  (let ((handle (gethash (sb!c::leaf-info fun)
+                        (fasl-output-entry-table file))))
     (aver handle)
     (dump-push handle file)
     (aver handle)
     (dump-push handle file)
-    (dump-fop 'sb!impl::fop-funcall-for-effect file)
+    (dump-fop 'fop-funcall-for-effect file)
     (dump-byte 0 file))
   (values))
 
 ;;; Compute the correct list of DEBUG-SOURCE structures and backpatch
 ;;; all of the dumped DEBUG-INFO structures. We clear the
     (dump-byte 0 file))
   (values))
 
 ;;; Compute the correct list of DEBUG-SOURCE structures and backpatch
 ;;; all of the dumped DEBUG-INFO structures. We clear the
-;;; FASL-FILE-DEBUG-INFO, so that subsequent components with different
-;;; source info may be dumped.
+;;; FASL-OUTPUT-DEBUG-INFO, so that subsequent components with
+;;; different source info may be dumped.
 (defun fasl-dump-source-info (info file)
 (defun fasl-dump-source-info (info file)
-  (declare (type source-info info) (type fasl-file file))
-  (let ((res (debug-source-for-info info))
+  (declare (type sb!c::source-info info) (type fasl-output file))
+  (let ((res (sb!c::debug-source-for-info info))
        (*dump-only-valid-structures* nil))
     (dump-object res file)
     (let ((res-handle (dump-pop file)))
        (*dump-only-valid-structures* nil))
     (dump-object res file)
     (let ((res-handle (dump-pop file)))
-      (dolist (info-handle (fasl-file-debug-info file))
+      (dolist (info-handle (fasl-output-debug-info file))
        (dump-push res-handle file)
        (dump-push res-handle file)
-       (dump-fop 'sb!impl::fop-structset file)
+       (dump-fop 'fop-structset file)
        (dump-unsigned-32 info-handle file)
        (dump-unsigned-32 2 file))))
        (dump-unsigned-32 info-handle file)
        (dump-unsigned-32 2 file))))
-
-  (setf (fasl-file-debug-info file) ())
+  (setf (fasl-output-debug-info file) nil)
   (values))
 \f
 ;;;; dumping structures
 
 (defun dump-structure (struct file)
   (when *dump-only-valid-structures*
   (values))
 \f
 ;;;; dumping structures
 
 (defun dump-structure (struct file)
   (when *dump-only-valid-structures*
-    (unless (gethash struct (fasl-file-valid-structures file))
+    (unless (gethash struct (fasl-output-valid-structures file))
       (error "attempt to dump invalid structure:~%  ~S~%How did this happen?"
             struct)))
   (note-potential-circularity struct file)
   (do ((index 0 (1+ index))
        (length (%instance-length struct))
       (error "attempt to dump invalid structure:~%  ~S~%How did this happen?"
             struct)))
   (note-potential-circularity struct file)
   (do ((index 0 (1+ index))
        (length (%instance-length struct))
-       (circ (fasl-file-circularity-table file)))
+       (circ (fasl-output-circularity-table file)))
       ((= index length)
       ((= index length)
-       (dump-fop* length
-                 sb!impl::fop-small-struct
-                 sb!impl::fop-struct
-                 file))
+       (dump-fop* length fop-small-struct fop-struct file))
     (let* ((obj (%instance-ref struct index))
           (ref (gethash obj circ)))
       (cond (ref
     (let* ((obj (%instance-ref struct index))
           (ref (gethash obj circ)))
       (cond (ref
   (let ((name (sb!xc:class-name (layout-class obj))))
     (unless name
       (compiler-error "dumping anonymous layout: ~S" obj))
   (let ((name (sb!xc:class-name (layout-class obj))))
     (unless name
       (compiler-error "dumping anonymous layout: ~S" obj))
-    (dump-fop 'sb!impl::fop-normal-load file)
+    (dump-fop 'fop-normal-load file)
     (let ((*cold-load-dump* t))
       (dump-object name file))
     (let ((*cold-load-dump* t))
       (dump-object name file))
-    (dump-fop 'sb!impl::fop-maybe-cold-load file))
+    (dump-fop 'fop-maybe-cold-load file))
   (sub-dump-object (layout-inherits obj) file)
   (sub-dump-object (layout-depthoid obj) file)
   (sub-dump-object (layout-length obj) file)
   (sub-dump-object (layout-inherits obj) file)
   (sub-dump-object (layout-depthoid obj) file)
   (sub-dump-object (layout-length obj) file)
-  (dump-fop 'sb!impl::fop-layout file))
+  (dump-fop 'fop-layout file))
index c50f246..a552178 100644 (file)
@@ -30,7 +30,7 @@
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!IMPL")
+(in-package "SB!FASL")
 
 ;;; a magic number used to identify our core files
 (defconstant core-magic
 
 ;;; a magic number used to identify our core files
 (defconstant core-magic
               `(cold-set ',symbol
                          (cold-fdefinition-object (cold-intern ',symbol)))))
     (frob !cold-init)
               `(cold-set ',symbol
                          (cold-fdefinition-object (cold-intern ',symbol)))))
     (frob !cold-init)
-    (frob sb!impl::maybe-gc)
+    (frob maybe-gc)
     (frob internal-error)
     (frob sb!di::handle-breakpoint)
     (frob sb!di::handle-function-end-breakpoint)
     (frob internal-error)
     (frob sb!di::handle-breakpoint)
     (frob sb!di::handle-function-end-breakpoint)
-    (frob sb!impl::fdefinition-object))
+    (frob fdefinition-object))
 
   (cold-set '*current-catch-block*          (make-fixnum-descriptor 0))
   (cold-set '*current-unwind-protect-block* (make-fixnum-descriptor 0))
 
   (cold-set '*current-catch-block*          (make-fixnum-descriptor 0))
   (cold-set '*current-unwind-protect-block* (make-fixnum-descriptor 0))
 
   (cold-set '*free-interrupt-context-index* (make-fixnum-descriptor 0))
 
 
   (cold-set '*free-interrupt-context-index* (make-fixnum-descriptor 0))
 
-  ;; FIXME: *!INITIAL-LAYOUTS* should be exported from SB!KERNEL, or
-  ;; perhaps from SB-LD.
-  (cold-set 'sb!kernel::*!initial-layouts* (cold-list-all-layouts))
+  (cold-set '*!initial-layouts* (cold-list-all-layouts))
 
   (/show "dumping packages" (mapcar #'car *cold-package-symbols*))
   (let ((initial-symbols *nil-descriptor*))
 
   (/show "dumping packages" (mapcar #'car *cold-package-symbols*))
   (let ((initial-symbols *nil-descriptor*))
                                offset-within-code-object))
         (gspace-byte-address (gspace-byte-address
                               (descriptor-gspace code-object))))
                                offset-within-code-object))
         (gspace-byte-address (gspace-byte-address
                               (descriptor-gspace code-object))))
-    (ecase sb!c:*backend-fasl-file-implementation*
-      ;; See CMUCL source for other formerly-supported architectures
-      ;; (and note that you have to rewrite them to use vector-ref unstead
-      ;; of sap-ref)
+    (ecase +backend-fasl-file-implementation+
+      ;; See CMU CL source for other formerly-supported architectures
+      ;; (and note that you have to rewrite them to use VECTOR-REF
+      ;; unstead of SAP-REF).
       (:alpha
         (ecase kind
          (:jmp-hint
       (:alpha
         (ecase kind
          (:jmp-hint
 \f
 ;;;; cold fops for loading symbols
 
 \f
 ;;;; cold fops for loading symbols
 
-;;; Load a symbol SIZE characters long from *FASL-FILE* and intern
+;;; Load a symbol SIZE characters long from *FASL-INPUT-STREAM* and intern
 ;;; that symbol in PACKAGE.
 (defun cold-load-symbol (size package)
   (let ((string (make-string size)))
 ;;; that symbol in PACKAGE.
 (defun cold-load-symbol (size package)
   (let ((string (make-string size)))
-    (read-string-as-bytes *fasl-file* string)
+    (read-string-as-bytes *fasl-input-stream* string)
     (cold-intern (intern string package) package)))
 
 (macrolet ((frob (name pname-len package-len)
     (cold-intern (intern string package) package)))
 
 (macrolet ((frob (name pname-len package-len)
                (fop-uninterned-small-symbol-save)
   (let* ((size (clone-arg))
         (name (make-string size)))
                (fop-uninterned-small-symbol-save)
   (let* ((size (clone-arg))
         (name (make-string size)))
-    (read-string-as-bytes *fasl-file* name)
+    (read-string-as-bytes *fasl-input-stream* name)
     (let ((symbol (allocate-symbol name)))
       (push-fop-table symbol))))
 \f
     (let ((symbol (allocate-symbol name)))
       (push-fop-table symbol))))
 \f
                (fop-small-string)
   (let* ((len (clone-arg))
         (string (make-string len)))
                (fop-small-string)
   (let* ((len (clone-arg))
         (string (make-string len)))
-    (read-string-as-bytes *fasl-file* string)
+    (read-string-as-bytes *fasl-input-stream* string)
     (string-to-core string)))
 
 (clone-cold-fop (fop-vector)
     (string-to-core string)))
 
 (clone-cold-fop (fop-vector)
                 (ceiling (* len sizebits)
                          sb!vm:byte-bits))))
     (read-sequence-or-die (descriptor-bytes result)
                 (ceiling (* len sizebits)
                          sb!vm:byte-bits))))
     (read-sequence-or-die (descriptor-bytes result)
-                         *fasl-file*
+                         *fasl-input-stream*
                          :start start
                          :end end)
     result))
                          :start start
                          :end end)
     result))
                   (ash sb!vm:vector-data-offset sb!vm:word-shift)))
         (end (+ start (* len sb!vm:word-bytes))))
     (read-sequence-or-die (descriptor-bytes result)
                   (ash sb!vm:vector-data-offset sb!vm:word-shift)))
         (end (+ start (* len sb!vm:word-bytes))))
     (read-sequence-or-die (descriptor-bytes result)
-                         *fasl-file*
+                         *fasl-input-stream*
                          :start start
                          :end end)
     result))
                          :start start
                          :end end)
     result))
 
 #!+long-float
 (define-cold-fop (fop-long-float)
 
 #!+long-float
 (define-cold-fop (fop-long-float)
-  (ecase sb!c:*backend-fasl-file-implementation*
-    (:x86 ; 80 bit long-float format
-     (prepare-for-fast-read-byte *fasl-file*
+  (ecase +backend-fasl-file-implementation+
+    (:x86 ; (which has 80-bit long-float format)
+     (prepare-for-fast-read-byte *fasl-input-stream*
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:long-float-size)
                                            sb!vm:long-float-type))
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:long-float-size)
                                            sb!vm:long-float-type))
     ;; SBCL.
     #+nil
     (#.sb!c:sparc-fasl-file-implementation ; 128 bit long-float format
     ;; SBCL.
     #+nil
     (#.sb!c:sparc-fasl-file-implementation ; 128 bit long-float format
-     (prepare-for-fast-read-byte *fasl-file*
+     (prepare-for-fast-read-byte *fasl-input-stream*
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:long-float-size)
                                            sb!vm:long-float-type))
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:long-float-size)
                                            sb!vm:long-float-type))
 
 #!+long-float
 (define-cold-fop (fop-complex-long-float)
 
 #!+long-float
 (define-cold-fop (fop-complex-long-float)
-  (ecase sb!c:*backend-fasl-file-implementation*
-    (:x86 ; 80 bit long-float format
-     (prepare-for-fast-read-byte *fasl-file*
+  (ecase +backend-fasl-file-implementation+
+    (:x86 ; (which has 80-bit long-float format)
+     (prepare-for-fast-read-byte *fasl-input-stream*
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:complex-long-float-size)
                                            sb!vm:complex-long-float-type))
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:complex-long-float-size)
                                            sb!vm:complex-long-float-type))
     ;; This was supported in CMU CL, but isn't currently supported in SBCL.
     #+nil
     (#.sb!c:sparc-fasl-file-implementation ; 128 bit long-float format
     ;; This was supported in CMU CL, but isn't currently supported in SBCL.
     #+nil
     (#.sb!c:sparc-fasl-file-implementation ; 128 bit long-float format
-     (prepare-for-fast-read-byte *fasl-file*
+     (prepare-for-fast-read-byte *fasl-input-stream*
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:complex-long-float-size)
                                            sb!vm:complex-long-float-type))
        (let* ((des (allocate-unboxed-object *dynamic* sb!vm:word-bits
                                            (1- sb!vm:complex-long-float-size)
                                            sb!vm:complex-long-float-type))
     (make-descriptor 0 0 nil counter)))
 
 (defun finalize-load-time-value-noise ()
     (make-descriptor 0 0 nil counter)))
 
 (defun finalize-load-time-value-noise ()
-  (cold-set (cold-intern 'sb!impl::*!load-time-values*)
+  (cold-set (cold-intern '*!load-time-values*)
            (allocate-vector-object *dynamic*
                                    sb!vm:word-bits
                                    *load-time-value-counter*
            (allocate-vector-object *dynamic*
                                    sb!vm:word-bits
                                    *load-time-value-counter*
                        (ash header-n-words sb!vm:word-shift)))
              (end (+ start code-size)))
         (read-sequence-or-die (descriptor-bytes des)
                        (ash header-n-words sb!vm:word-shift)))
              (end (+ start code-size)))
         (read-sequence-or-die (descriptor-bytes des)
-                              *fasl-file*
+                              *fasl-input-stream*
                               :start start
                               :end end)
         #!+sb-show
                               :start start
                               :end end)
         #!+sb-show
         (code-object (pop-stack))
         (len (read-arg 1))
         (sym (make-string len)))
         (code-object (pop-stack))
         (len (read-arg 1))
         (sym (make-string len)))
-    (read-string-as-bytes *fasl-file* sym)
+    (read-string-as-bytes *fasl-input-stream* sym)
     (let ((offset (read-arg 4))
          (value (lookup-foreign-symbol sym)))
       (do-cold-fixup code-object offset value kind))
     (let ((offset (read-arg 4))
          (value (lookup-foreign-symbol sym)))
       (do-cold-fixup code-object offset value kind))
                     (ash header-n-words sb!vm:word-shift)))
           (end (+ start length)))
       (read-sequence-or-die (descriptor-bytes des)
                     (ash header-n-words sb!vm:word-shift)))
           (end (+ start length)))
       (read-sequence-or-die (descriptor-bytes des)
-                           *fasl-file*
+                           *fasl-input-stream*
                            :start start
                            :end end))
     des))
                            :start start
                            :end end))
     des))
index 7cfa60d..b0e698f 100644 (file)
@@ -1,5 +1,9 @@
 ;;;; target-only code that knows how to load compiled code directly
 ;;;; into core
 ;;;; target-only code that knows how to load compiled code directly
 ;;;; into core
+;;;;
+;;;; FIXME: The filename here is confusing because "core" here means
+;;;; "main memory", while elsewhere in the system it connotes a
+;;;; ".core" file dumping the contents of main memory.
 
 ;;;; This software is part of the SBCL system. See the README file for
 ;;;; more information.
 
 ;;;; This software is part of the SBCL system. See the README file for
 ;;;; more information.
           (trace-table-bits (* trace-table-len tt-bits-per-entry))
           (total-length (+ length (ceiling trace-table-bits sb!vm:byte-bits)))
           (box-num (- (length constants) sb!vm:code-trace-table-offset-slot))
           (trace-table-bits (* trace-table-len tt-bits-per-entry))
           (total-length (+ length (ceiling trace-table-bits sb!vm:byte-bits)))
           (box-num (- (length constants) sb!vm:code-trace-table-offset-slot))
-          #!+x86
-          (code-obj
-           ;; FIXME: What is this *ENABLE-DYNAMIC-SPACE-CODE* stuff?
-           (if (and (boundp sb!impl::*enable-dynamic-space-code*)
-                    sb!impl::*enable-dynamic-space-code*)
-               (%primitive allocate-dynamic-code-object box-num total-length)
-             (%primitive allocate-code-object box-num total-length)))
-          #!-x86
           (code-obj
           (code-obj
+           ;; FIXME: In CMU CL the X86 behavior here depended on
+           ;; *ENABLE-DYNAMIC-SPACE-CODE*, but in SBCL we always use
+           ;; dynamic space code, so we could make
+           ;; ALLOCATE-DYNAMIC-CODE-OBJECT more parallel with
+           ;; ALLOCATE-CODE-OBJECT and remove this confusing
+           ;; read-macro conditionalization.
+           #!+x86
+           (%primitive allocate-dynamic-code-object box-num total-length)
+           #!-x86
            (%primitive allocate-code-object box-num total-length))
           (fill-ptr (code-instructions code-obj)))
       (declare (type index box-num total-length))
            (%primitive allocate-code-object box-num total-length))
           (fill-ptr (code-instructions code-obj)))
       (declare (type index box-num total-length))
                                         (cdr const) object))
               (:fdefinition
                (setf (code-header-ref code-obj index)
                                         (cdr const) object))
               (:fdefinition
                (setf (code-header-ref code-obj index)
-                     (sb!impl::fdefinition-object (cdr const) t))))))))))
+                     (fdefinition-object (cdr const) t))))))))))
   (values))
 
 (defun make-core-byte-component (segment length constants xeps object)
   (values))
 
 (defun make-core-byte-component (segment length constants xeps object)
index 307d762..6b36ad1 100644 (file)
     (values))
 
   ;; Generate a reference to a manifest constant, creating a new leaf
     (values))
 
   ;; Generate a reference to a manifest constant, creating a new leaf
-  ;; if necessary. If we are producing a fasl-file, make sure that
+  ;; if necessary. If we are producing a fasl file, make sure that
   ;; MAKE-LOAD-FORM gets used on any parts of the constant that it
   ;; needs to be.
   (defun reference-constant (start cont value)
   ;; MAKE-LOAD-FORM gets used on any parts of the constant that it
   ;; needs to be.
   (defun reference-constant (start cont value)
index 3f7d8e5..90e02db 100644 (file)
     (pprint-logical-block (*error-output* nil :per-line-prefix "; ")
        (apply #'compiler-mumble foo))))
 
     (pprint-logical-block (*error-output* nil :per-line-prefix "; ")
        (apply #'compiler-mumble foo))))
 
-(deftype object () '(or fasl-file core-object null))
+(deftype object () '(or fasl-output core-object null))
 
 (defvar *compile-object* nil)
 (declaim (type object *compile-object*))
 
 (defvar *compile-object* nil)
 (declaim (type object *compile-object*))
                                                     *compiler-trace-output*))
 
            (etypecase *compile-object*
                                                     *compiler-trace-output*))
 
            (etypecase *compile-object*
-             (fasl-file
+             (fasl-output
               (maybe-mumble "fasl")
               (fasl-dump-component component
                                    *code-segment*
               (maybe-mumble "fasl")
               (fasl-dump-component component
                                    *code-segment*
 (defun process-cold-load-form (form path eval)
   (let ((object *compile-object*))
     (etypecase object
 (defun process-cold-load-form (form path eval)
   (let ((object *compile-object*))
     (etypecase object
-      (fasl-file
+      (fasl-output
        (compile-top-level-lambdas () t)
        (fasl-dump-cold-load-form form object))
       ((or null core-object)
        (compile-top-level-lambdas () t)
        (fasl-dump-cold-load-form form object))
       ((or null core-object)
 ;;;;
 ;;;; (See EMIT-MAKE-LOAD-FORM.)
 
 ;;;;
 ;;;; (See EMIT-MAKE-LOAD-FORM.)
 
-;;; Returns T iff we are currently producing a fasl-file and hence
+;;; Returns T iff we are currently producing a fasl file and hence
 ;;; constants need to be dumped carefully.
 (defun producing-fasl-file ()
   (unless *converting-for-interpreter*
 ;;; constants need to be dumped carefully.
 (defun producing-fasl-file ()
   (unless *converting-for-interpreter*
-    (fasl-file-p *compile-object*)))
+    (fasl-output-p *compile-object*)))
 
 ;;; Compile FORM and arrange for it to be called at load-time. Return
 ;;; the dumper handle and our best guess at the type of the object.
 
 ;;; Compile FORM and arrange for it to be called at load-time. Return
 ;;; the dumper handle and our best guess at the type of the object.
       (setf (component-name component) (leaf-name lambda))
       (compile-component component)
       (clear-ir1-info component))))
       (setf (component-name component) (leaf-name lambda))
       (compile-component component)
       (clear-ir1-info component))))
-
-;;; The entry point for MAKE-LOAD-FORM support. When IR1 conversion
-;;; finds a constant structure, it invokes this to arrange for proper
-;;; dumping. If it turns out that the constant has already been
-;;; dumped, then we don't need to do anything.
-;;;
-;;; If the constant hasn't been dumped, then we check to see whether
-;;; we are in the process of creating it. We detect this by
-;;; maintaining the special *CONSTANTS-BEING-CREATED* as a list of all
-;;; the constants we are in the process of creating. Actually, each
-;;; entry is a list of the constant and any init forms that need to be
-;;; processed on behalf of that constant.
-;;;
-;;; It's not necessarily an error for this to happen. If we are
-;;; processing the init form for some object that showed up *after*
-;;; the original reference to this constant, then we just need to
-;;; defer the processing of that init form. To detect this, we
-;;; maintain *CONSTANTS-CREATED-SINCE-LAST-INIT* as a list of the
-;;; constants created since the last time we started processing an
-;;; init form. If the constant passed to emit-make-load-form shows up
-;;; in this list, then there is a circular chain through creation
-;;; forms, which is an error.
-;;;
-;;; If there is some intervening init form, then we blow out of
-;;; processing it by throwing to the tag PENDING-INIT. The value we
-;;; throw is the entry from *CONSTANTS-BEING-CREATED*. This is so the
-;;; offending init form can be tacked onto the init forms for the
-;;; circular object.
-;;;
-;;; 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
-;;; dumper will eventually get its hands on the object and use the
-;;; normal structure dumping noise on it.
-;;;
-;;; Otherwise, we bind *CONSTANTS-BEING-CREATED* and
-;;; *CONSTANTS-CREATED-SINCE- LAST-INIT* and compile the creation form
-;;; much the way LOAD-TIME-VALUE does. When this finishes, we tell the
-;;; dumper to use that result instead whenever it sees this constant.
-;;;
-;;; Now we try to compile the init form. We bind
-;;; *CONSTANTS-CREATED-SINCE- LAST-INIT* to NIL and compile the init
-;;; form (and any init forms that were added because of circularity
-;;; detection). If this works, great. If not, we add the init forms to
-;;; the init forms for the object that caused the problems and let it
-;;; deal with it.
-(defvar *constants-being-created* nil)
-(defvar *constants-created-since-last-init* nil)
-;;; FIXME: Shouldn't these^ variables be bound in LET forms?
-(defun emit-make-load-form (constant)
-  (aver (fasl-file-p *compile-object*))
-  (unless (or (fasl-constant-already-dumped constant *compile-object*)
-             ;; KLUDGE: This special hack is because I was too lazy
-             ;; to rework DEF!STRUCT so that the MAKE-LOAD-FORM
-             ;; function of LAYOUT returns nontrivial forms when
-             ;; building the cross-compiler but :IGNORE-IT when
-             ;; cross-compiling or running under the target Lisp. --
-             ;; WHN 19990914
-             #+sb-xc-host (typep constant 'layout))
-    (let ((circular-ref (assoc constant *constants-being-created* :test #'eq)))
-      (when circular-ref
-       (when (find constant *constants-created-since-last-init* :test #'eq)
-         (throw constant t))
-       (throw 'pending-init circular-ref)))
-    (multiple-value-bind (creation-form init-form)
-       (handler-case
-           (sb!xc:make-load-form constant (make-null-lexenv))
-         (error (condition)
-                (compiler-error "(while making load form for ~S)~%~A"
-                                constant
-                                condition)))
-      (case creation-form
-       (:just-dump-it-normally
-        (fasl-validate-structure constant *compile-object*)
-        t)
-       (:ignore-it
-        nil)
-       (t
-        (compile-top-level-lambdas () t)
-        (when (fasl-constant-already-dumped constant *compile-object*)
-          (return-from emit-make-load-form nil))
-        (let* ((name (let ((*print-level* 1) (*print-length* 2))
-                       (with-output-to-string (stream)
-                         (write constant :stream stream))))
-               (info (if init-form
-                         (list constant name init-form)
-                         (list constant))))
-          (let ((*constants-being-created*
-                 (cons info *constants-being-created*))
-                (*constants-created-since-last-init*
-                 (cons constant *constants-created-since-last-init*)))
-            (when
-                (catch constant
-                  (fasl-note-handle-for-constant
-                   constant
-                   (compile-load-time-value
-                    creation-form
-                    (format nil "creation form for ~A" name))
-                   *compile-object*)
-                  nil)
-              (compiler-error "circular references in creation form for ~S"
-                              constant)))
-          (when (cdr info)
-            (let* ((*constants-created-since-last-init* nil)
-                   (circular-ref
-                    (catch 'pending-init
-                      (loop for (name form) on (cdr info) by #'cddr
-                        collect name into names
-                        collect form into forms
-                        finally
-                        (compile-make-load-form-init-forms
-                         forms
-                         (format nil "init form~:[~;s~] for ~{~A~^, ~}"
-                                 (cdr forms) names)))
-                      nil)))
-              (when circular-ref
-                (setf (cdr circular-ref)
-                      (append (cdr circular-ref) (cdr info))))))))))))
 \f
 ;;;; COMPILE-FILE
 
 \f
 ;;;; COMPILE-FILE
 
   (declare (type functional tll))
   (let ((object *compile-object*))
     (etypecase object
   (declare (type functional tll))
   (let ((object *compile-object*))
     (etypecase object
-      (fasl-file
+      (fasl-output
        (fasl-dump-top-level-lambda-call tll object))
       (core-object
        (core-call-top-level-lambda tll object))
        (fasl-dump-top-level-lambda-call tll object))
       (core-object
        (core-call-top-level-lambda tll object))
        (compile-top-level-lambdas () t)
        (let ((object *compile-object*))
          (etypecase object
        (compile-top-level-lambdas () t)
        (let ((object *compile-object*))
          (etypecase object
-           (fasl-file (fasl-dump-source-info info object))
+           (fasl-output (fasl-dump-source-info info object))
            (core-object (fix-core-source-info info object d-s-info))
            (null)))
        nil))))
            (core-object (fix-core-source-info info object d-s-info))
            (null)))
        nil))))
 
   (unless (eq external-format :default)
     (error "Non-:DEFAULT EXTERNAL-FORMAT values are not supported."))
 
   (unless (eq external-format :default)
     (error "Non-:DEFAULT EXTERNAL-FORMAT values are not supported."))
-  (let* ((fasl-file nil)
+  (let* ((fasl-output nil)
         (output-file-name nil)
         (compile-won nil)
         (warnings-p nil)
         (output-file-name nil)
         (compile-won nil)
         (warnings-p nil)
            (setq output-file-name
                  (sb!xc:compile-file-pathname input-file
                                               :output-file output-file))
            (setq output-file-name
                  (sb!xc:compile-file-pathname input-file
                                               :output-file output-file))
-           (setq fasl-file
-                 (open-fasl-file output-file-name
-                                 (namestring input-pathname)
-                                 (eq *byte-compile* t))))
+           (setq fasl-output
+                 (open-fasl-output output-file-name
+                                   (namestring input-pathname)
+                                   (eq *byte-compile* t))))
          (when trace-file
            (let* ((default-trace-file-pathname
                     (make-pathname :type "trace" :defaults input-pathname))
          (when trace-file
            (let* ((default-trace-file-pathname
                     (make-pathname :type "trace" :defaults input-pathname))
 
          (when sb!xc:*compile-verbose*
            (start-error-output source-info))
 
          (when sb!xc:*compile-verbose*
            (start-error-output source-info))
-         (let ((*compile-object* fasl-file)
+         (let ((*compile-object* fasl-output)
                dummy)
            (multiple-value-setq (dummy warnings-p failure-p)
              (sub-compile-file source-info)))
                dummy)
            (multiple-value-setq (dummy warnings-p failure-p)
              (sub-compile-file source-info)))
 
       (close-source-info source-info)
 
 
       (close-source-info source-info)
 
-      (when fasl-file
-       (close-fasl-file fasl-file (not compile-won))
-       (setq output-file-name (pathname (fasl-file-stream fasl-file)))
+      (when fasl-output
+       (close-fasl-output fasl-output (not compile-won))
+       (setq output-file-name
+             (pathname (fasl-output-stream fasl-output)))
        (when (and compile-won sb!xc:*compile-verbose*)
          (compiler-mumble "~2&; ~A written~%" (namestring output-file-name))))
 
        (when (and compile-won sb!xc:*compile-verbose*)
          (compiler-mumble "~2&; ~A written~%" (namestring output-file-name))))
 
 ;;; default to the appropriate implementation-defined default type for
 ;;; compiled files.
 (defun cfp-output-file-default (input-file)
 ;;; default to the appropriate implementation-defined default type for
 ;;; compiled files.
 (defun cfp-output-file-default (input-file)
-  (let* (;; FIXME: I think the PHYSICALIZE-PATHNAME wrapper here
-        ;; shouldn't really be necessary. Unfortunately
-        ;; sbcl-0.6.12.18's MERGE-PATHNAMES doesn't like logical
-        ;; pathnames very much, and doesn't get good results in
-        ;; tests/side-effectful-pathnames.sh for (COMPILE-FILE
-        ;; "TEST:$StudlyCapsStem"), unless I do this. It would be
-        ;; good to straighten out how MERGE-PATHNAMES is really
-        ;; supposed to work for logical pathnames, and add a bunch of
-        ;; test cases to check it, then get rid of this cruft.
-        (defaults (merge-pathnames (physicalize-pathname (pathname
-                                                          input-file))
-                                   *default-pathname-defaults*))
+  (let* ((defaults (merge-pathnames input-file *default-pathname-defaults*))
         (retyped (make-pathname :type *backend-fasl-file-type*
                                 :defaults defaults)))
     retyped))
         (retyped (make-pathname :type *backend-fasl-file-type*
                                 :defaults defaults)))
     retyped))
   "Return a pathname describing what file COMPILE-FILE would write to given
    these arguments."
   (pathname output-file))
   "Return a pathname describing what file COMPILE-FILE would write to given
    these arguments."
   (pathname output-file))
+\f
+;;;; MAKE-LOAD-FORM stuff
+
+;;; The entry point for MAKE-LOAD-FORM support. When IR1 conversion
+;;; finds a constant structure, it invokes this to arrange for proper
+;;; dumping. If it turns out that the constant has already been
+;;; dumped, then we don't need to do anything.
+;;;
+;;; If the constant hasn't been dumped, then we check to see whether
+;;; we are in the process of creating it. We detect this by
+;;; maintaining the special *CONSTANTS-BEING-CREATED* as a list of all
+;;; the constants we are in the process of creating. Actually, each
+;;; entry is a list of the constant and any init forms that need to be
+;;; processed on behalf of that constant.
+;;;
+;;; It's not necessarily an error for this to happen. If we are
+;;; processing the init form for some object that showed up *after*
+;;; the original reference to this constant, then we just need to
+;;; defer the processing of that init form. To detect this, we
+;;; maintain *CONSTANTS-CREATED-SINCE-LAST-INIT* as a list of the
+;;; constants created since the last time we started processing an
+;;; init form. If the constant passed to emit-make-load-form shows up
+;;; in this list, then there is a circular chain through creation
+;;; forms, which is an error.
+;;;
+;;; If there is some intervening init form, then we blow out of
+;;; processing it by throwing to the tag PENDING-INIT. The value we
+;;; throw is the entry from *CONSTANTS-BEING-CREATED*. This is so the
+;;; offending init form can be tacked onto the init forms for the
+;;; circular object.
+;;;
+;;; 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
+;;; dumper will eventually get its hands on the object and use the
+;;; normal structure dumping noise on it.
+;;;
+;;; Otherwise, we bind *CONSTANTS-BEING-CREATED* and
+;;; *CONSTANTS-CREATED-SINCE- LAST-INIT* and compile the creation form
+;;; much the way LOAD-TIME-VALUE does. When this finishes, we tell the
+;;; dumper to use that result instead whenever it sees this constant.
+;;;
+;;; Now we try to compile the init form. We bind
+;;; *CONSTANTS-CREATED-SINCE-LAST-INIT* to NIL and compile the init
+;;; form (and any init forms that were added because of circularity
+;;; detection). If this works, great. If not, we add the init forms to
+;;; the init forms for the object that caused the problems and let it
+;;; deal with it.
+(defvar *constants-being-created* nil)
+(defvar *constants-created-since-last-init* nil)
+;;; FIXME: Shouldn't these^ variables be bound in LET forms?
+(defun emit-make-load-form (constant)
+  (aver (fasl-output-p *compile-object*))
+  (unless (or (fasl-constant-already-dumped-p constant *compile-object*)
+             ;; KLUDGE: This special hack is because I was too lazy
+             ;; to rework DEF!STRUCT so that the MAKE-LOAD-FORM
+             ;; function of LAYOUT returns nontrivial forms when
+             ;; building the cross-compiler but :IGNORE-IT when
+             ;; cross-compiling or running under the target Lisp. --
+             ;; WHN 19990914
+             #+sb-xc-host (typep constant 'layout))
+    (let ((circular-ref (assoc constant *constants-being-created* :test #'eq)))
+      (when circular-ref
+       (when (find constant *constants-created-since-last-init* :test #'eq)
+         (throw constant t))
+       (throw 'pending-init circular-ref)))
+    (multiple-value-bind (creation-form init-form)
+       (handler-case
+           (sb!xc:make-load-form constant (make-null-lexenv))
+         (error (condition)
+                (compiler-error "(while making load form for ~S)~%~A"
+                                constant
+                                condition)))
+      (case creation-form
+       (:just-dump-it-normally
+        (fasl-validate-structure constant *compile-object*)
+        t)
+       (:ignore-it
+        nil)
+       (t
+        (compile-top-level-lambdas () t)
+        (when (fasl-constant-already-dumped-p constant *compile-object*)
+          (return-from emit-make-load-form nil))
+        (let* ((name (let ((*print-level* 1) (*print-length* 2))
+                       (with-output-to-string (stream)
+                         (write constant :stream stream))))
+               (info (if init-form
+                         (list constant name init-form)
+                         (list constant))))
+          (let ((*constants-being-created*
+                 (cons info *constants-being-created*))
+                (*constants-created-since-last-init*
+                 (cons constant *constants-created-since-last-init*)))
+            (when
+                (catch constant
+                  (fasl-note-handle-for-constant
+                   constant
+                   (compile-load-time-value
+                    creation-form
+                    (format nil "creation form for ~A" name))
+                   *compile-object*)
+                  nil)
+              (compiler-error "circular references in creation form for ~S"
+                              constant)))
+          (when (cdr info)
+            (let* ((*constants-created-since-last-init* nil)
+                   (circular-ref
+                    (catch 'pending-init
+                      (loop for (name form) on (cdr info) by #'cddr
+                        collect name into names
+                        collect form into forms
+                        finally
+                        (compile-make-load-form-init-forms
+                         forms
+                         (format nil "init form~:[~;s~] for ~{~A~^, ~}"
+                                 (cdr forms) names)))
+                      nil)))
+              (when circular-ref
+                (setf (cdr circular-ref)
+                      (append (cdr circular-ref) (cdr info))))))))))))
index b227008..8f30618 100644 (file)
   (declare (type address address))
   (when (null *assembler-routines-by-addr*)
     (setf *assembler-routines-by-addr*
   (declare (type address address))
   (when (null *assembler-routines-by-addr*)
     (setf *assembler-routines-by-addr*
-         (invert-address-hash sb!kernel::*assembler-routines*))
+         (invert-address-hash sb!fasl:*assembler-routines*))
     (setf *assembler-routines-by-addr*
     (setf *assembler-routines-by-addr*
-         (invert-address-hash sb!kernel::*static-foreign-symbols*
+         (invert-address-hash sb!fasl:*static-foreign-symbols*
                               *assembler-routines-by-addr*)))
   (gethash address *assembler-routines-by-addr*))
 \f
                               *assembler-routines-by-addr*)))
   (gethash address *assembler-routines-by-addr*))
 \f
index 5f61b34..0c9d4d3 100644 (file)
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB!C")
+(in-package "SB!FASL")
 
 ;;; Dump the first N bytes of VEC out to FILE. VEC is some sort of unboxed
 ;;; vector-like thing that we can BLT from.
 
 ;;; Dump the first N bytes of VEC out to FILE. VEC is some sort of unboxed
 ;;; vector-like thing that we can BLT from.
-(defun dump-raw-bytes (vec n fasl-file)
-  (declare (type index n) (type fasl-file fasl-file))
-  (sb!sys:output-raw-bytes (fasl-file-stream fasl-file) vec 0 n)
+(defun dump-raw-bytes (vec n fasl-output)
+  (declare (type index n) (type fasl-output fasl-output))
+  (sb!sys:output-raw-bytes (fasl-output-stream fasl-output) vec 0 n)
   (values))
 
 ;;; Dump a multi-dimensional array. Note: any displacements are folded out.
 ;;;
 ;;; This isn't needed at cross-compilation time because SBCL doesn't
   (values))
 
 ;;; Dump a multi-dimensional array. Note: any displacements are folded out.
 ;;;
 ;;; This isn't needed at cross-compilation time because SBCL doesn't
-;;; use multi-dimensional arrays internally. It's hard to implement
-;;; at cross-compilation time because it uses WITH-ARRAY-DATA. If it ever
-;;; becomes necessary to implement it at cross-compilation time, it might
-;;; possible to use ROW-MAJOR-AREF stuff to do it portably.
+;;; use multi-dimensional arrays internally. And it's hard to
+;;; implement at cross-compilation time because it uses
+;;; WITH-ARRAY-DATA. If it ever becomes necessary to implement it at
+;;; cross-compilation time, it might possible to use ROW-MAJOR-AREF
+;;; stuff to do it portably.
 (defun dump-multi-dim-array (array file)
   (let ((rank (array-rank array)))
     (dotimes (i rank)
       (dump-integer (array-dimension array i) file))
 (defun dump-multi-dim-array (array file)
   (let ((rank (array-rank array)))
     (dotimes (i rank)
       (dump-integer (array-dimension array i) file))
-    (sb!impl::with-array-data ((vector array) (start) (end))
+    (with-array-data ((vector array) (start) (end))
       (if (and (= start 0) (= end (length vector)))
          (sub-dump-object vector file)
          (sub-dump-object (subseq vector start end) file)))
       (if (and (= start 0) (= end (length vector)))
          (sub-dump-object vector file)
          (sub-dump-object (subseq vector start end) file)))
-    (dump-fop 'sb!impl::fop-array file)
+    (dump-fop 'fop-array file)
     (dump-unsigned-32 rank file)
     (eq-save-object array file)))
 \f
     (dump-unsigned-32 rank file)
     (eq-save-object array file)))
 \f
+;;;; various dump-a-number operations
+
 (defun dump-single-float-vector (vec file)
   (let ((length (length vec)))
 (defun dump-single-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-single-float-vector file)
+    (dump-fop 'fop-single-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes) file)))
 
 (defun dump-double-float-vector (vec file)
   (let ((length (length vec)))
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes) file)))
 
 (defun dump-double-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-double-float-vector file)
+    (dump-fop 'fop-double-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2) file)))
 
 #!+long-float
 (defun dump-long-float-vector (vec file)
   (let ((length (length vec)))
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2) file)))
 
 #!+long-float
 (defun dump-long-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-long-float-vector file)
+    (dump-fop 'fop-long-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4) file)))
 
 (defun dump-complex-single-float-vector (vec file)
   (let ((length (length vec)))
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4) file)))
 
 (defun dump-complex-single-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-complex-single-float-vector file)
+    (dump-fop 'fop-complex-single-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2) file)))
 
 (defun dump-complex-double-float-vector (vec file)
   (let ((length (length vec)))
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2) file)))
 
 (defun dump-complex-double-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-complex-double-float-vector file)
+    (dump-fop 'fop-complex-double-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2 2) file)))
 
 #!+long-float
 (defun dump-complex-long-float-vector (vec file)
   (let ((length (length vec)))
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes 2 2) file)))
 
 #!+long-float
 (defun dump-complex-long-float-vector (vec file)
   (let ((length (length vec)))
-    (dump-fop 'sb!impl::fop-complex-long-float-vector file)
+    (dump-fop 'fop-complex-long-float-vector file)
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4 2) file)))
 
     (dump-unsigned-32 length file)
     (dump-raw-bytes vec (* length sb!vm:word-bytes #!+x86 3 #!+sparc 4 2) file)))
 
     (dump-unsigned-32 high-bits file)
     (dump-integer-as-n-bytes exp-bits 4 file)))
 
     (dump-unsigned-32 high-bits file)
     (dump-integer-as-n-bytes exp-bits 4 file)))
 
-;;; Or a complex...
-
 (defun dump-complex (x file)
   (typecase x
     ((complex single-float)
 (defun dump-complex (x file)
   (typecase x
     ((complex single-float)
-     (dump-fop 'sb!impl::fop-complex-single-float file)
+     (dump-fop 'fop-complex-single-float file)
      (dump-integer-as-n-bytes (single-float-bits (realpart x)) 4 file)
      (dump-integer-as-n-bytes (single-float-bits (imagpart x)) 4 file))
     ((complex double-float)
      (dump-integer-as-n-bytes (single-float-bits (realpart x)) 4 file)
      (dump-integer-as-n-bytes (single-float-bits (imagpart x)) 4 file))
     ((complex double-float)
-     (dump-fop 'sb!impl::fop-complex-double-float file)
+     (dump-fop 'fop-complex-double-float file)
      (let ((re (realpart x)))
        (declare (double-float re))
        (dump-unsigned-32 (double-float-low-bits re) file)
      (let ((re (realpart x)))
        (declare (double-float re))
        (dump-unsigned-32 (double-float-low-bits re) file)
        (dump-integer-as-n-bytes (double-float-high-bits im) 4 file)))
     #!+long-float
     ((complex long-float)
        (dump-integer-as-n-bytes (double-float-high-bits im) 4 file)))
     #!+long-float
     ((complex long-float)
-     (dump-fop 'sb!impl::fop-complex-long-float file)
+     (dump-fop 'fop-complex-long-float file)
      (dump-long-float (realpart x) file)
      (dump-long-float (imagpart x) file))
     (t
      (sub-dump-object (realpart x) file)
      (sub-dump-object (imagpart x) file)
      (dump-long-float (realpart x) file)
      (dump-long-float (imagpart x) file))
     (t
      (sub-dump-object (realpart x) file)
      (sub-dump-object (imagpart x) file)
-     (dump-fop 'sb!impl::fop-complex file))))
+     (dump-fop 'fop-complex file))))
+\f
+;;;; dumping things which don't exist in portable ANSI Common Lisp
 
 
+;;; Dump a BYTE-FUNCTION object. We dump the layout and
+;;; funcallable-instance info, but rely on the loader setting up the
+;;; correct funcallable-instance-function.
+(defun dump-byte-function (xep code-handle file)
+  (let ((nslots (- (get-closure-length xep)
+                  ;; 1- for header
+                  (1- sb!vm:funcallable-instance-info-offset))))
+    (dotimes (i nslots)
+      (if (zerop i)
+         (dump-push code-handle file)
+         (dump-object (%funcallable-instance-info xep i) file)))
+    (dump-object (%funcallable-instance-layout xep) file)
+    (dump-fop 'fop-make-byte-compiled-function file)
+    (dump-byte nslots file))
+  (values))
index 057a09c..be2a8f4 100644 (file)
 ;;;; compiler constants
 
 (setf *backend-fasl-file-type* "x86f")
 ;;;; compiler constants
 
 (setf *backend-fasl-file-type* "x86f")
-(setf *backend-fasl-file-implementation* :x86)
-
-(setf *backend-fasl-file-version* 11)
-;;; 2 = sbcl-0.6.4 uses COMPILE-OR-LOAD-DEFGENERIC.
-;;; 3 = sbcl-0.6.6 uses private symbol, not :EMPTY, for empty HASH-TABLE slot.
-;;; 4 = sbcl-0.6.7 uses HAIRY-DATA-VECTOR-REF and HAIRY-DATA-VECTOR-SET
-;;;     when array headers or data element type uncertainty exist, and
-;;;     uses DATA-VECTOR-REF and DATA-VECTOR-SET only for VOPs. (Thus,
-;;;     full calls to DATA-VECTOR-REF and DATA-VECTOR-SET from older
-;;;     fasl files would fail, because there are no DEFUNs for these
-;;;     operations any more.)
-;;; 5 = sbcl-0.6.8 has rearranged static symbols.
-;;; 6 = sbcl-0.6.9, got rid of non-ANSI %DEFCONSTANT/%%DEFCONSTANT stuff
-;;;     and deleted a slot from DEBUG-SOURCE structure.
-;;; 7 = around sbcl-0.6.9.8, merged SB-CONDITIONS package into SB-KERNEL
-;;; 8 = sbcl-0.6.10.4 revived Gray stream support, changing stream layouts.
-;;; 9 = deleted obsolete CONS-UNIQUE-TAG bytecode in sbcl-0.6.11.8
-;;; (somewhere in here also changes to AND and OR CTYPE layouts) 
-;;; 10 = new layout for CONDITION in sbcl-0.6.11.38
-;;; 11 = (a) new helper functions for MAKE-LOAD-FORM (HASH-TABLE) in
-;;;      sbcl-0.6.12.11
-;;;      (b) new address space constants for OpenBSD in 0.6.12.17,
-;;;          doesn't need separate version from (a) because the OpenBSD
-;;;          port was broken from sometime before 0.6.12.11 until
-;;;          the address space was changed
+(defconstant +backend-fasl-file-implementation+ :x86)
 
 (setf *backend-register-save-penalty* 3)
 
 
 (setf *backend-register-save-penalty* 3)
 
index 66f1d11..b82ca88 100644 (file)
 ;;; something to compile with :SB-NO-PSEUDO-ATOMIC.
 (defvar *enable-pseudo-atomic* t)
 
 ;;; something to compile with :SB-NO-PSEUDO-ATOMIC.
 (defvar *enable-pseudo-atomic* t)
 
-;;; FIXME: *PSEUDO-ATOMIC-ATOMIC* and *PSEUDO-ATOMIC-INTERRUPTED*
-;;; should be in package SB!VM or SB!KERNEL, not SB!IMPL.
-
 ;;; FIXME: *PSEUDO-ATOMIC-FOO* could be made into *PSEUDO-ATOMIC-BITS*,
 ;;; set with a single operation and cleared with SHR *PSEUDO-ATOMIC-BITS*,-2;
 ;;; the ATOMIC bit is bit 0, the INTERRUPTED bit is bit 1, and you check
 ;;; FIXME: *PSEUDO-ATOMIC-FOO* could be made into *PSEUDO-ATOMIC-BITS*,
 ;;; set with a single operation and cleared with SHR *PSEUDO-ATOMIC-BITS*,-2;
 ;;; the ATOMIC bit is bit 0, the INTERRUPTED bit is bit 1, and you check
         ;; something. (perhaps SVLB, for static variable low byte)
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
         ;; something. (perhaps SVLB, for static variable low byte)
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
-                                           'sb!impl::*pseudo-atomic-interrupted*)
+                                           '*pseudo-atomic-interrupted*)
                                           (ash symbol-value-slot word-shift)
                                           ;; FIXME: Use mask, not minus, to
                                           ;; take out type bits.
                                           (ash symbol-value-slot word-shift)
                                           ;; FIXME: Use mask, not minus, to
                                           ;; take out type bits.
               0)
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
               0)
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
-                                           'sb!impl::*pseudo-atomic-atomic*)
+                                           '*pseudo-atomic-atomic*)
                                           (ash symbol-value-slot word-shift)
                                           (- other-pointer-type)))
               (fixnumize 1)))
                                           (ash symbol-value-slot word-shift)
                                           (- other-pointer-type)))
               (fixnumize 1)))
        (when *enable-pseudo-atomic*
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
        (when *enable-pseudo-atomic*
         (inst mov (make-ea :byte :disp (+ nil-value
                                           (static-symbol-offset
-                                           'sb!impl::*pseudo-atomic-atomic*)
+                                           '*pseudo-atomic-atomic*)
                                           (ash symbol-value-slot word-shift)
                                           (- other-pointer-type)))
               0)
                                           (ash symbol-value-slot word-shift)
                                           (- other-pointer-type)))
               0)
         (inst cmp (make-ea :byte
                            :disp (+ nil-value
                                     (static-symbol-offset
         (inst cmp (make-ea :byte
                            :disp (+ nil-value
                                     (static-symbol-offset
-                                     'sb!impl::*pseudo-atomic-interrupted*)
+                                     '*pseudo-atomic-interrupted*)
                                     (ash symbol-value-slot word-shift)
                                     (- other-pointer-type)))
               0)
                                     (ash symbol-value-slot word-shift)
                                     (- other-pointer-type)))
               0)
index b098811..a0030d4 100644 (file)
@@ -49,8 +49,8 @@
            (eval :scs (descriptor-reg))
            (alien-stack :scs (descriptor-reg)))
   (:generator 13
            (eval :scs (descriptor-reg))
            (alien-stack :scs (descriptor-reg)))
   (:generator 13
-    (load-symbol-value catch sb!impl::*current-catch-block*)
-    (load-symbol-value eval sb!impl::*eval-stack-top*)
+    (load-symbol-value catch *current-catch-block*)
+    (load-symbol-value eval *eval-stack-top*)
     (load-symbol-value alien-stack *alien-stack*)))
 
 (define-vop (restore-dynamic-state)
     (load-symbol-value alien-stack *alien-stack*)))
 
 (define-vop (restore-dynamic-state)
@@ -58,8 +58,8 @@
         (eval :scs (descriptor-reg))
         (alien-stack :scs (descriptor-reg)))
   (:generator 10
         (eval :scs (descriptor-reg))
         (alien-stack :scs (descriptor-reg)))
   (:generator 10
-    (store-symbol-value catch sb!impl::*current-catch-block*)
-    (store-symbol-value eval sb!impl::*eval-stack-top*)
+    (store-symbol-value catch *current-catch-block*)
+    (store-symbol-value eval *eval-stack-top*)
     (store-symbol-value alien-stack *alien-stack*)))
 
 (define-vop (current-stack-pointer)
     (store-symbol-value alien-stack *alien-stack*)))
 
 (define-vop (current-stack-pointer)
@@ -83,7 +83,7 @@
   (:results (block :scs (any-reg)))
   (:generator 22
     (inst lea block (catch-block-ea tn))
   (:results (block :scs (any-reg)))
   (:generator 22
     (inst lea block (catch-block-ea tn))
-    (load-symbol-value temp sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value temp *current-unwind-protect-block*)
     (storew temp block unwind-block-current-uwp-slot)
     (storew ebp-tn block unwind-block-current-cont-slot)
     (storew (make-fixup nil :code-object entry-label)
     (storew temp block unwind-block-current-uwp-slot)
     (storew ebp-tn block unwind-block-current-cont-slot)
     (storew (make-fixup nil :code-object entry-label)
   (:temporary (:sc descriptor-reg) temp)
   (:generator 44
     (inst lea block (catch-block-ea tn))
   (:temporary (:sc descriptor-reg) temp)
   (:generator 44
     (inst lea block (catch-block-ea tn))
-    (load-symbol-value temp sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value temp *current-unwind-protect-block*)
     (storew temp block  unwind-block-current-uwp-slot)
     (storew ebp-tn block  unwind-block-current-cont-slot)
     (storew (make-fixup nil :code-object entry-label)
            block catch-block-entry-pc-slot)
     (storew tag block catch-block-tag-slot)
     (storew temp block  unwind-block-current-uwp-slot)
     (storew ebp-tn block  unwind-block-current-cont-slot)
     (storew (make-fixup nil :code-object entry-label)
            block catch-block-entry-pc-slot)
     (storew tag block catch-block-tag-slot)
-    (load-symbol-value temp sb!impl::*current-catch-block*)
+    (load-symbol-value temp *current-catch-block*)
     (storew temp block catch-block-previous-catch-slot)
     (storew temp block catch-block-previous-catch-slot)
-    (store-symbol-value block sb!impl::*current-catch-block*)))
+    (store-symbol-value block *current-catch-block*)))
 
 ;;; Just set the current unwind-protect to TN's address. This instantiates an
 ;;; unwind block as an unwind-protect.
 
 ;;; Just set the current unwind-protect to TN's address. This instantiates an
 ;;; unwind block as an unwind-protect.
   (:temporary (:sc unsigned-reg) new-uwp)
   (:generator 7
     (inst lea new-uwp (catch-block-ea tn))
   (:temporary (:sc unsigned-reg) new-uwp)
   (:generator 7
     (inst lea new-uwp (catch-block-ea tn))
-    (store-symbol-value new-uwp sb!impl::*current-unwind-protect-block*)))
+    (store-symbol-value new-uwp *current-unwind-protect-block*)))
 
 (define-vop (unlink-catch-block)
   (:temporary (:sc unsigned-reg) block)
   (:policy :fast-safe)
   (:translate %catch-breakup)
   (:generator 17
 
 (define-vop (unlink-catch-block)
   (:temporary (:sc unsigned-reg) block)
   (:policy :fast-safe)
   (:translate %catch-breakup)
   (:generator 17
-    (load-symbol-value block sb!impl::*current-catch-block*)
+    (load-symbol-value block *current-catch-block*)
     (loadw block block catch-block-previous-catch-slot)
     (loadw block block catch-block-previous-catch-slot)
-    (store-symbol-value block sb!impl::*current-catch-block*)))
+    (store-symbol-value block *current-catch-block*)))
 
 (define-vop (unlink-unwind-protect)
     (:temporary (:sc unsigned-reg) block)
   (:policy :fast-safe)
   (:translate %unwind-protect-breakup)
   (:generator 17
 
 (define-vop (unlink-unwind-protect)
     (:temporary (:sc unsigned-reg) block)
   (:policy :fast-safe)
   (:translate %unwind-protect-breakup)
   (:generator 17
-    (load-symbol-value block sb!impl::*current-unwind-protect-block*)
+    (load-symbol-value block *current-unwind-protect-block*)
     (loadw block block unwind-block-current-uwp-slot)
     (loadw block block unwind-block-current-uwp-slot)
-    (store-symbol-value block sb!impl::*current-unwind-protect-block*)))
+    (store-symbol-value block *current-unwind-protect-block*)))
 \f
 ;;;; NLX entry VOPs
 (define-vop (nlx-entry)
 \f
 ;;;; NLX entry VOPs
 (define-vop (nlx-entry)
index 8bbe40c..2a5a9b8 100644 (file)
 
     ;; functions that the C code needs to call
     sb!impl::!cold-init
 
     ;; functions that the C code needs to call
     sb!impl::!cold-init
-    sb!impl::maybe-gc
+    maybe-gc
     sb!kernel::internal-error
     sb!di::handle-breakpoint
     sb!kernel::internal-error
     sb!di::handle-breakpoint
-    sb!impl::fdefinition-object
+    fdefinition-object
 
     ;; free pointers
     ;; 
 
     ;; free pointers
     ;; 
     *initial-dynamic-space-free-pointer*
 
     ;; things needed for non-local exit
     *initial-dynamic-space-free-pointer*
 
     ;; things needed for non-local exit
-    sb!impl::*current-catch-block*
-    sb!impl::*current-unwind-protect-block*
-    sb!c::*eval-stack-top*
+    *current-catch-block*
+    *current-unwind-protect-block*
+    *eval-stack-top*
     sb!vm::*alien-stack*
 
     ;; interrupt handling
     sb!vm::*alien-stack*
 
     ;; interrupt handling
-    sb!impl::*pseudo-atomic-atomic*
-    sb!impl::*pseudo-atomic-interrupted*
+    *pseudo-atomic-atomic*
+    *pseudo-atomic-interrupted*
     sb!unix::*interrupts-enabled*
     sb!unix::*interrupt-pending*
     sb!unix::*interrupts-enabled*
     sb!unix::*interrupt-pending*
-    sb!impl::*free-interrupt-context-index*
+    *free-interrupt-context-index*
 
     sb!vm::*allocation-pointer*
     sb!vm::*binding-stack-pointer*
 
     sb!vm::*allocation-pointer*
     sb!vm::*binding-stack-pointer*
index b944ef1..0cb2f37 100644 (file)
@@ -565,15 +565,15 @@ scavenge_interrupt_context(os_context_t *context)
 
 void scavenge_interrupt_contexts(void)
 {
 
 void scavenge_interrupt_contexts(void)
 {
-       int i, index;
-       os_context_t *context;
+    int i, index;
+    os_context_t *context;
 
 
-       index = fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX));
+    index = fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX));
 
 
-       for (i = 0; i < index; i++) {
-               context = lisp_interrupt_contexts[i];
-               scavenge_interrupt_context(context); 
-       }
+    for (i = 0; i < index; i++) {
+       context = lisp_interrupt_contexts[i];
+       scavenge_interrupt_context(context); 
+    }
 }
 
 \f
 }
 
 \f
index c497859..a3a4d21 100644 (file)
@@ -97,7 +97,7 @@
  ("src/code/specializable-array")
 
  ("src/code/early-cl")
  ("src/code/specializable-array")
 
  ("src/code/early-cl")
- ("src/code/early-load")
+ ("src/code/early-fasl")
 
  ;; mostly needed by stuff from comcom, but also used by "x86-vm"
  ("src/code/debug-var-io")
 
  ;; mostly needed by stuff from comcom, but also used by "x86-vm"
  ("src/code/debug-var-io")
 
  ("src/compiler/trace-table") ; needs EMIT-LABEL macro from compiler/assem.lisp
 
 
  ("src/compiler/trace-table") ; needs EMIT-LABEL macro from compiler/assem.lisp
 
- ;; Compiling this file requires fop definitions from code/fop.lisp
- ;; and trace table definitions from compiler/trace-table.lisp.
+ ;; Compiling this requires fop definitions from code/fop.lisp and
+ ;; trace table definitions from compiler/trace-table.lisp.
  ("src/compiler/dump")
 
  ("src/compiler/dump")
 
- ("src/compiler/main") ; needs DEFSTRUCT FASL-FILE from compiler/dump.lisp
+ ("src/compiler/main") ; needs DEFSTRUCT FASL-OUTPUT from dump.lisp
  ("src/compiler/target-main" :not-host)
  ("src/compiler/ir1tran")
  ("src/compiler/ir1util")
  ("src/compiler/target-main" :not-host)
  ("src/compiler/ir1tran")
  ("src/compiler/ir1util")
  #!+sb-dyncount ("src/compiler/dyncount")
  #!+sb-dyncount ("src/code/dyncount")
 
  #!+sb-dyncount ("src/compiler/dyncount")
  #!+sb-dyncount ("src/code/dyncount")
 
- ;; needed by OPEN-FASL-FILE, which is called by COMPILE-FILE
+ ;; needed by OPEN-FASL-OUTPUT, which is called by COMPILE-FILE
  ("src/code/format-time")
 
  ;; needed by various unhappy-path cases in the cross-compiler
  ("src/code/format-time")
 
  ;; needed by various unhappy-path cases in the cross-compiler
index e0672a8..3ef66b6 100644 (file)
@@ -33,3 +33,4 @@
   (when (find-package public-package)
     (check-ext-symbols-arglist public-package)))
 (terpri)
   (when (find-package public-package)
     (check-ext-symbols-arglist public-package)))
 (terpri)
+(print "done with interface.pure.lisp")
index d462c1b..6682f8c 100644 (file)
                             "test0:foo;bar;baz;mum.quux.3"))
                "/library/foo/foo/bar/baz/mum.quux"))
 
                             "test0:foo;bar;baz;mum.quux.3"))
                "/library/foo/foo/bar/baz/mum.quux"))
 
-;;; success
+;;;; MERGE-PATHNAME tests
+;;;;
+;;;; There are some things we don't bother testing, just because they're
+;;;; not meaningful on the underlying filesystem anyway.
+;;;;
+;;;; Mostly that means that we don't do devices, we don't do versions
+;;;; except minimally in LPNs (they get lost in the translation to
+;;;; physical hosts, so it's not much of an issue), and we don't do
+;;;; hosts except for LPN hosts
+;;;;
+;;;; Although these tests could conceivably be useful in principle for
+;;;; other implementations, they depend quite heavily on the rules for
+;;;; namestring parsing, which are implementation-specific. So, success
+;;;; or failure in these tests doesn't tell you anything about
+;;;; ansi-compliance unless your PARSE-NAMESTRING works like ours.
+
+(setf (logical-pathname-translations "scratch")
+      '(("**;*.*.*" "/usr/local/doc/**/*")))
+
+(loop for (expected-result . params) in
+      `(;; trivial merge
+        (#P"/usr/local/doc/foo" #p"foo" #p"/usr/local/doc/")
+        ;; If pathname does not specify a host, device, directory,
+        ;; name, or type, each such component is copied from
+        ;; default-pathname.
+        ;; 1) no name, no type
+        (#p"/supplied-dir/name.type" #p"/supplied-dir/" #p"/dir/name.type")
+        ;; 2) no directory, no type
+        (#p"/dir/supplied-name.type" #p"supplied-name" #p"/dir/name.type")
+        ;; 3) no name, no dir (must use make-pathname as ".foo" is parsed
+        ;; as a name)
+        (#p"/dir/name.supplied-type"
+         ,(make-pathname :type "supplied-type")
+        #p"/dir/name.type")
+        ;; If (pathname-directory pathname) is a list whose car is
+        ;; :relative, and (pathname-directory default-pathname) is a
+        ;; list, then the merged directory is [...]
+        (#p"/aaa/bbb/ccc/ddd/qqq/www" #p"qqq/www" #p"/aaa/bbb/ccc/ddd/eee")
+        ;; except that if the resulting list contains a string or
+        ;; :wild immediately followed by :back, both of them are
+        ;; removed.
+        (#P"/aaa/bbb/ccc/blah/eee"
+         ;; "../" in a namestring is parsed as :up not :back, so make-pathname
+         ,(make-pathname :directory '(:relative :back "blah"))
+        #p"/aaa/bbb/ccc/ddd/eee")
+        ;; If (pathname-directory default-pathname) is not a list or
+        ;; (pathname-directory pathname) is not a list whose car is
+        ;; :relative, the merged directory is (or (pathname-directory
+        ;; pathname) (pathname-directory default-pathname))
+        (#P"/absolute/path/name.type"
+         #p"/absolute/path/name"
+        #p"/dir/default-name.type")
+        ;; === logical pathnames ===
+        ;; recognizes a logical pathname namestring when
+        ;; default-pathname is a logical pathname
+       ;; FIXME: 0.6.12.20 fails this one.
+        #+nil (#P"scratch:foo;name1" #p"name1" #p"scratch:foo;")
+        ;; or when the namestring begins with the name of a defined
+        ;; logical host followed by a colon [I assume that refers to pathname
+        ;; rather than default-pathname]
+        (#p"SCRATCH:FOO;NAME2" #p"scratch:;name2" #p"scratch:foo;")
+        ;; conduct the previous set of tests again, with a lpn first argument
+        (#P"SCRATCH:USR;LOCAL;DOC;FOO" #p"scratch:;foo" #p"/usr/local/doc/")
+        (#p"SCRATCH:SUPPLIED-DIR;NAME.TYPE"
+        #p"scratch:supplied-dir;"
+        #p"/dir/name.type")
+        (#p"SCRATCH:DIR;SUPPLIED-NAME.TYPE"
+        #p"scratch:;supplied-name"
+        #p"/dir/name.type")
+        (#p"SCRATCH:DIR;NAME.SUPPLIED-TYPE"
+         ,(make-pathname :host "scratch" :type "supplied-type")
+        #p"/dir/name.type")
+        (#p"SCRATCH:AAA;BBB;CCC;DDD;FOO;BAR"
+         ,(make-pathname :host "scratch"
+                        :directory '(:relative "foo")
+                        :name "bar")
+         #p"/aaa/bbb/ccc/ddd/eee")
+        (#p"SCRATCH:AAA;BBB;CCC;FOO;BAR"
+         ,(make-pathname :host "scratch"
+                        :directory '(:relative :back "foo")
+                        :name "bar")
+         #p"/aaa/bbb/ccc/ddd/eee")
+        (#p"SCRATCH:ABSOLUTE;PATH;NAME.TYPE"
+         #p"scratch:absolute;path;name" #p"/dir/default-name.type")
+
+        ;; TODO: test version handling in LPNs
+        )
+      do (assert (string= (namestring (apply #'merge-pathnames params))
+                          (namestring expected-result))))
+\f
+;;;; success
 (quit :unix-status 104)
 (quit :unix-status 104)
index 2e6b066..bce2327 100644 (file)
@@ -15,4 +15,4 @@
 ;;; versions, and a string like "0.6.5.12" is used for versions which
 ;;; aren't released but correspond only to CVS tags or snapshots.
 
 ;;; versions, and a string like "0.6.5.12" is used for versions which
 ;;; aren't released but correspond only to CVS tags or snapshots.
 
-"0.6.12.21"
+"0.6.12.22"