0.8.6.40:
authorWilliam Harold Newman <william.newman@airmail.net>
Thu, 18 Dec 2003 01:05:19 +0000 (01:05 +0000)
committerWilliam Harold Newman <william.newman@airmail.net>
Thu, 18 Dec 2003 01:05:19 +0000 (01:05 +0000)
merged patch from Marco Baringer (sbcl-devel 2003-12-02) to
allow (TRACE "MY-PACKAGE-NAME")
collapsed IF clause at the end of EXPAND-TRACE, since SBCL now
always has a compiler and shouldn't need to worry about
supporting interpreter-only environments

contrib/stale-symbols.lisp
src/code/ntrace.lisp
version.lisp-expr

index 7d77e44..1e84555 100644 (file)
@@ -71,7 +71,8 @@
                             (length static-space-refs)
                             (length dynamic-space-refs)))
                (format t "Symbol ~a::~a~%"
-                       (and (symbol-package obj) (package-name (symbol-package obj)))
+                       (and (symbol-package obj)
+                           (package-name (symbol-package obj)))
                        (symbol-name obj))
                (unless (null read-only-space-refs)
                  (princ "   Reference in read-only space: ")
index 03eac59..4435735 100644 (file)
     current))
 
 ;;; Compute the expansion of TRACE in the non-trivial case (arguments
-;;; specified.) If there are no :FUNCTION specs, then don't use a LET.
-;;; This allows TRACE to be used without the full interpreter.
+;;; specified.) 
 (defun expand-trace (specs)
   (collect ((binds)
            (forms))
           ((and (keywordp name)
                 (not (or (fboundp name) (macro-function name))))
            (error "unknown TRACE option: ~S" name))
+          ((stringp name)
+           (let ((package (find-undeleted-package-or-lose name)))
+             (do-all-symbols (symbol (find-package name))
+               (when (and (eql package (symbol-package symbol))
+                          (fboundp symbol)
+                          (not (macro-function symbol))
+                          (not (special-operator-p symbol)))
+                 (forms `(trace-1 ',symbol ',options))))))
           (t
            (forms `(trace-1 ',name ',options))))
          (setq current (parse-trace-options current options)))))
-
-    (if (binds)
-       `(let ,(binds) (list ,@(forms)))
-       `(list ,@(forms)))))
+    
+    `(let ,(binds)
+      (list ,@(forms)))))
 
 (defun %list-traced-funs ()
   (loop for x being each hash-value in *traced-funs*
    TRACE is a debugging tool that provides information when specified functions
    are called. In its simplest form:
        (TRACE NAME-1 NAME-2 ...)
-   (The NAMEs are not evaluated.)
+   The NAMEs are not evaluated. Each may be a symbol, denoting an
+   individual function, or a string, denoting all functions fbound
+   to symbols whose home package is the package with the given name.
 
    Options allow modification of the default behavior. Each option is a pair
    of an option keyword and a value form. Global options are specified before
   #+sb-doc
   "Remove tracing from the specified functions. With no args, untrace all
    functions."
+  ;; KLUDGE: Since we now allow (TRACE FOO BAR "SB-EXT") to trace not
+  ;; only #'FOO and #'BAR but also all the functions in #<PACKAGE "SB-EXT">,
+  ;; it would be probably be best for consistency to do something similar
+  ;; with UNTRACE. (But I leave it to someone who uses and cares about
+  ;; UNTRACE-with-args more often than I do.) -- WHN 2003-12-17
   (if specs
       (collect ((res))
        (let ((current specs))
index f405237..3108d43 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.6.39"
+"0.8.6.40"