1.0.4.56: Make case-insensitive string and character comparisons non-consing
[sbcl.git] / src / code / load.lisp
index eafe8a0..8b3067d 100644 (file)
   (declare (optimize (speed 0)))
   (read-arg #.sb!vm:n-word-bytes))
 
+(defun read-unsigned-byte-32-arg ()
+  (declare (optimize (speed 0)))
+  (read-arg 4))
+
 \f
 ;;;; the fop table
 
   (aver (member pushp '(nil t :nope)))
   (with-unique-names (fop-stack)
     `(let ((,fop-stack *fop-stack*))
-       (declare (type (vector t) ,fop-stack))
+       (declare (type (vector t) ,fop-stack)
+                (ignorable ,fop-stack))
        (macrolet ((pop-stack ()
                     `(vector-pop ,',fop-stack))
+                  (push-stack (value)
+                    `(vector-push-extend ,value ,',fop-stack))
                   (call-with-popped-args (fun n)
                     `(%call-with-popped-args ,fun ,n ,',fop-stack)))
          ,(if pushp
 
       ;; Read and validate version-specific compatibility stuff.
       (flet ((string-from-stream ()
-               (let* ((length (read-word-arg))
+               (let* ((length (read-unsigned-byte-32-arg))
                       (result (make-string length)))
                  (read-string-as-bytes stream result)
                  result)))
 (defun load-fasl-group (stream)
   (when (check-fasl-header stream)
     (catch 'fasl-group-end
-      (let ((*current-fop-table-index* 0))
+      (let ((*current-fop-table-index* 0)
+            (*skip-until* nil))
+        (declare (special *skip-until*))
         (loop
           (let ((byte (read-byte stream)))
-
             ;; Do some debugging output.
             #!+sb-show
             (when *show-fops-p*