X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fdump.lisp;h=6bfc35c6b9bbc9da3fd0bb93aa6ceaaf4096c351;hb=5563d2712045491695f68c018dbdd1233faca4e5;hp=d0b85bc25bd266b77ac3a216d09ecb37c5660663;hpb=d90c11f2192a9cff9bae7b74cb749a208623938c;p=sbcl.git diff --git a/src/compiler/dump.lisp b/src/compiler/dump.lisp index d0b85bc..6bfc35c 100644 --- a/src/compiler/dump.lisp +++ b/src/compiler/dump.lisp @@ -682,7 +682,7 @@ (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))) + (t (do ((nn n (- nn 255))) ((< nn 256) (dump-fop 'fop-list* file) (dump-byte nn file)) @@ -704,7 +704,7 @@ (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 'fop-list file) (dump-byte n file)) (t (dump-fop 'fop-list file) @@ -1315,14 +1315,20 @@ (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-output-circularity-table file))) - ((= index length) + (aver (%instance-ref struct 0)) + (do* ((length (%instance-length struct)) + (ntagged (- length (layout-n-untagged-slots (%instance-ref struct 0)))) + (circ (fasl-output-circularity-table file)) + ;; last slot first on the stack, so that the layout is on top: + (index (1- length) (1- index))) + ((minusp index) (dump-fop* length fop-small-struct fop-struct file)) - (let* ((obj (%instance-ref struct index)) + (let* ((obj (if (>= index ntagged) + (%raw-instance-ref/word struct (- length index 1)) + (%instance-ref struct index))) (ref (gethash obj circ))) (cond (ref + (aver (not (zerop index))) (push (make-circularity :type :struct-set :object struct :index index @@ -1347,4 +1353,5 @@ (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-n-untagged-slots obj) file) (dump-fop 'fop-layout file))