X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fload.lisp;h=8b3067df27ca8639abed6154e0fd6fb4ab4a3e90;hb=d10b036b1d20e6cff820f72b69af2a06dc362327;hp=eafe8a05b0c750effec89f5db996c806e8776616;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/load.lisp b/src/code/load.lisp index eafe8a0..8b3067d 100644 --- a/src/code/load.lisp +++ b/src/code/load.lisp @@ -114,6 +114,10 @@ (declare (optimize (speed 0))) (read-arg #.sb!vm:n-word-bytes)) +(defun read-unsigned-byte-32-arg () + (declare (optimize (speed 0))) + (read-arg 4)) + ;;;; the fop table @@ -170,9 +174,12 @@ (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 @@ -305,7 +312,7 @@ ;; 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))) @@ -361,10 +368,11 @@ (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*