0.pre8.85
[sbcl.git] / src / code / ntrace.lisp
index a5a4e44..609be52 100644 (file)
@@ -29,7 +29,7 @@
   "If the trace indentation exceeds this value, then indentation restarts at
    0.")
 
-(defvar *trace-encapsulate-default* :default
+(defvar *trace-encapsulate-default* t
   #+sb-doc
   "the default value for the :ENCAPSULATE option to TRACE")
 \f
     (let ((exp (car form)))
       (if (sb-di:code-location-p loc)
          (let ((fun (sb-di:preprocess-for-eval exp loc)))
+            (declare (type function fun))
            (cons exp
                  (lambda (frame)
                    (let ((*current-frame* frame))
     (dolist (entry *traced-entries*)
       (when (cdr entry) (incf depth)))
     (format t
-           "~@V,0T~W: "
+           "~V,0@T~W: "
            (+ (mod (* depth *trace-indentation-step*)
                    (- *max-trace-indentation* *trace-indentation-step*))
               *trace-indentation-step*)
                        (trace-wherein-p frame wherein)))))
        (when conditionp
         (let ((sb-kernel:*current-level-in-print* 0)
-              (*standard-output* *trace-output*)
+              (*standard-output* (make-string-output-stream))
               (*in-trace* t))
           (fresh-line)
           (print-trace-indentation)
                 (prin1 `(,(trace-info-what info) ,@arg-list)))
               (print-frame-call frame))
           (terpri)
-          (trace-print frame (trace-info-print info)))
+          (trace-print frame (trace-info-print info))
+          (write-sequence (get-output-stream-string *standard-output*)
+                          *trace-output*))
         (trace-maybe-break info (trace-info-break info) "before" frame)))
 
      (lambda (frame cookie)
 ;;; to determine the correct indentation for output. We then check to
 ;;; see whether the function is still traced and that the condition
 ;;; succeeded before printing anything.
+(declaim (ftype (function (trace-info) function) trace-end-breakpoint-fun))
 (defun trace-end-breakpoint-fun (info)
   (lambda (frame bpt *trace-values* cookie)
     (declare (ignore bpt))
                     (let ((cond (trace-info-condition-after info)))
                       (and cond (funcall (cdr cond) frame)))))
        (let ((sb-kernel:*current-level-in-print* 0)
-             (*standard-output* *trace-output*)
+             (*standard-output* (make-string-output-stream))
              (*in-trace* t))
          (fresh-line)
          (pprint-logical-block (*standard-output* nil)
              (pprint-newline :linear)
              (prin1 v)))
          (terpri)
-         (trace-print frame (trace-info-print-after info)))
+         (trace-print frame (trace-info-print-after info))
+         (write-sequence (get-output-stream-string *standard-output*)
+                         *trace-output*))
        (trace-maybe-break info
                           (trace-info-break-after info)
                           "after"
 ;;; which we have cleverly contrived to work for our hook functions.
 (defun trace-call (info)
   (multiple-value-bind (start cookie) (trace-start-breakpoint-fun info)
+    (declare (type function start cookie))
     (let ((frame (sb-di:frame-down (sb-di:top-frame))))
       (funcall start frame nil)
       (let ((*traced-entries* *traced-entries*))