From f9aaac53a4a43ebae198f53079857acb2d628eb0 Mon Sep 17 00:00:00 2001 From: William Harold Newman Date: Thu, 18 Dec 2003 01:05:19 +0000 Subject: [PATCH] 0.8.6.40: 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 | 3 ++- src/code/ntrace.lisp | 27 ++++++++++++++++++++------- version.lisp-expr | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/contrib/stale-symbols.lisp b/contrib/stale-symbols.lisp index 7d77e44..1e84555 100644 --- a/contrib/stale-symbols.lisp +++ b/contrib/stale-symbols.lisp @@ -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: ") diff --git a/src/code/ntrace.lisp b/src/code/ntrace.lisp index 03eac59..4435735 100644 --- a/src/code/ntrace.lisp +++ b/src/code/ntrace.lisp @@ -461,8 +461,7 @@ 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)) @@ -480,13 +479,20 @@ ((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* @@ -498,7 +504,9 @@ 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 @@ -605,6 +613,11 @@ #+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 #, + ;; 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)) diff --git a/version.lisp-expr b/version.lisp-expr index f405237..3108d43 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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" -- 1.7.10.4