1.0.37.27: Add new named-package FOPs for simpler package fasdumping.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 3 Apr 2010 00:41:04 +0000 (00:41 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 3 Apr 2010 00:41:04 +0000 (00:41 +0000)
 * A new cloned-fop pair, fop-named-package-save and
fop-small-named-package-save, taking an inlined string and doing the
package lookup, save to fasl-table, etc.

 * Defined in genesis as new clone-cold-fop pair, as genesis needs host
package objects in its fasl table.

 * Package references now dumped using the new fop pair, instead of
faffing about with switching between cold and normal loads, dumping the
package name, dumping a fop-package and dumping fop-pop.

 * Old fop-package retained for use by the fopcompiler.

src/code/fop.lisp
src/compiler/dump.lisp
src/compiler/generic/genesis.lisp
version.lisp-expr

index 6b2809d..a4d9331 100644 (file)
 
 (define-fop (fop-package 14)
   (find-undeleted-package-or-lose (pop-stack)))
+
+(define-cloned-fops (fop-named-package-save 156 :stackp nil)
+                    (fop-small-named-package-save 157)
+  (let* ((arg (clone-arg))
+         (package-name (make-string arg)))
+    #+sb-xc-host
+    (read-string-as-bytes *fasl-input-stream* package-name)
+    #-sb-xc-host
+    (#!-sb-unicode read-string-as-bytes
+     #!+sb-unicode read-string-as-unsigned-byte-32
+     *fasl-input-stream* package-name)
+    (push-fop-table (find-undeleted-package-or-lose package-name))))
 \f
 ;;;; fops for loading numbers
 
index 52bddb4..0db369e 100644 (file)
   (declare (inline assoc))
   (cond ((cdr (assoc pkg (fasl-output-packages file) :test #'eq)))
         (t
-         (unless *cold-load-dump*
-           (dump-fop 'fop-normal-load file))
-         #+sb-xc-host
-         (dump-simple-base-string
-          (coerce (package-name pkg) 'simple-base-string)
-          file)
-         #-sb-xc-host
-         (#!+sb-unicode dump-simple-character-string
-          #!-sb-unicode dump-simple-base-string
-          (coerce (package-name pkg) '(simple-array character (*)))
-          file)
-         (dump-fop 'fop-package file)
-         (unless *cold-load-dump*
-           (dump-fop 'fop-maybe-cold-load file))
-         (let ((entry (dump-pop file)))
+         (let ((s (package-name pkg)))
+           (dump-fop* (length s) fop-small-named-package-save fop-named-package-save file)
+           #+sb-xc-host
+           (dump-base-chars-of-string (coerce s 'simple-base-string) file)
+           #-sb-xc-host
+           (#!+sb-unicode dump-characters-of-string
+            #!-sb-unicode dump-base-chars-of-string
+            (coerce s '(simple-array character (*))) file))
+         (let ((entry (fasl-output-table-free file)))
+           (incf (fasl-output-table-free file))
            (push (cons pkg entry) (fasl-output-packages file))
            entry))))
 \f
index b148cee..de143e5 100644 (file)
@@ -2131,6 +2131,15 @@ core and return a descriptor to it."
     (let ((symbol-des (allocate-symbol name)))
       (push-fop-table symbol-des))))
 \f
+;;;; cold fops for loading packages
+
+(clone-cold-fop (fop-named-package-save :stackp nil)
+                (fop-small-named-package-save)
+  (let* ((size (clone-arg))
+         (name (make-string size)))
+    (read-string-as-bytes *fasl-input-stream* name)
+    (push-fop-table (find-package name))))
+\f
 ;;;; cold fops for loading lists
 
 ;;; Make a list of the top LENGTH things on the fop stack. The last
index 20cd3fd..9f5533b 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.37.26"
+"1.0.37.27"