0.9.2.9: thread objects
[sbcl.git] / src / compiler / debug-dump.lisp
index 43a1a1e..0dc56c3 100644 (file)
        (when (eq (block-info block) 2block)
          (unless (eql (source-path-tlf-number
                        (node-source-path
-                        (continuation-next
-                         (block-start block))))
+                        (block-start-node block)))
                       res)
            (setq res nil)))
-       
+
        (dolist (loc (ir2-block-locations 2block))
          (unless (eql (source-path-tlf-number
                        (node-source-path
       (write-var-integer (length locations) *byte-buffer*)
       (let ((2block (block-info block)))
        (write-var-integer (+ (length locations) 1) *byte-buffer*)
-       (dump-1-location (continuation-next (block-start block))
+       (dump-1-location (block-start-node block)
                         2block :block-start tlf-num
                         (ir2-block-%label 2block)
                         (ir2-block-live-out 2block)
 
     (values (copy-seq *byte-buffer*) tlf-num)))
 \f
-;;; Return a list of DEBUG-SOURCE structures containing information
-;;; derived from INFO. Unless :BYTE-COMPILE T was specified, we always
-;;; dump the START-POSITIONS, since it is too hard figure out whether
-;;; we need them or not.
+;;; Return DEBUG-SOURCE structure containing information derived from
+;;; INFO. 
 (defun debug-source-for-info (info)
   (declare (type source-info info))
   (let* ((file-info (source-info-file-info info))
         (name (file-info-name file-info)))
     (etypecase name
       ((member :lisp)
-       (setf (debug-source-from res) name)
-       (setf (debug-source-name res)
-            (coerce (file-info-forms file-info) 'simple-vector)))
+       (setf (debug-source-from res) name
+            (debug-source-name res) (file-info-forms file-info)))
       (pathname
        (let* ((untruename (file-info-untruename file-info))
              (dir (pathname-directory untruename)))
         (setf (debug-source-name res)
+              #+sb-xc-host
+              (let ((src (position "src" dir :test #'string= :from-end t)))
+                (if src
+                    (format nil "SYS:~{~:@(~A~);~}~:@(~A~).LISP"
+                            (subseq dir src) (pathname-name untruename))
+                    ;; FIXME: just output/stuff-groveled-from-headers.lisp
+                    (namestring untruename)))
+              #-sb-xc-host
               (namestring
                (if (and dir (eq (first dir) :absolute))
                    untruename
                    name))))))
-    (list res)))
-
+    res))
 
 ;;; Given an arbitrary sequence, coerce it to an unsigned vector if
 ;;; possible. Ordinarily we coerce it to the smallest specialized
           (setf (compiled-debug-fun-arguments dfun)
                 (compute-args fun var-locs))))
 
-    (when (>= level 2)
-      (multiple-value-bind (blocks tlf-num) (compute-debug-blocks fun var-locs)
-       (setf (compiled-debug-fun-tlf-number dfun) tlf-num)
-       (setf (compiled-debug-fun-blocks dfun) blocks)))
+    (if (>= level 2)
+       (multiple-value-bind (blocks tlf-num)
+           (compute-debug-blocks fun var-locs)
+         (setf (compiled-debug-fun-tlf-number dfun) tlf-num)
+         (setf (compiled-debug-fun-blocks dfun) blocks))
+       (setf (compiled-debug-fun-tlf-number dfun) (find-tlf-number fun)))
 
     (if (xep-p fun)
        (setf (compiled-debug-fun-returns dfun) :standard)