aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/emacs-lisp/trace.el
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2005-02-27 02:30:58 +0000
committerStefan Monnier <[email protected]>2005-02-27 02:30:58 +0000
commit5f8a82e1ac7e32ae842aed52e0f81c4334625f46 (patch)
treee8560edc212d0cc3c5858eccf6d8a1b7751497b9 /lisp/emacs-lisp/trace.el
parent3f4468ab4e79050bb1e40b675e1c6f1564cbe6f4 (diff)
(inhibit-trace): New var.
(trace-make-advice): Use it.
Diffstat (limited to 'lisp/emacs-lisp/trace.el')
-rw-r--r--lisp/emacs-lisp/trace.el86
1 files changed, 36 insertions, 50 deletions
diff --git a/lisp/emacs-lisp/trace.el b/lisp/emacs-lisp/trace.el
index a6ff9b1528..e3d3e9e645 100644
--- a/lisp/emacs-lisp/trace.el
+++ b/lisp/emacs-lisp/trace.el
@@ -1,6 +1,6 @@
;;; trace.el --- tracing facility for Emacs Lisp functions
-;; Copyright (C) 1993 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1998, 2000, 2005 Free Software Foundation, Inc.
;; Author: Hans Chalupsky <[email protected]>
;; Maintainer: FSF
@@ -175,6 +175,9 @@
;; Used to separate new trace output from previous traced runs:
(defvar trace-separator (format "%s\n" (make-string 70 ?=)))
+(defvar inhibit-trace nil
+ "If non-nil, all tracing is temporarily inhibited.")
+
(defun trace-entry-message (function level argument-bindings)
;; Generates a string that describes that FUNCTION has been entered at
;; trace LEVEL with ARGUMENT-BINDINGS.
@@ -183,14 +186,13 @@
(if (> level 1) " " "")
level
function
- (mapconcat (function
- (lambda (binding)
- (concat
- (symbol-name (ad-arg-binding-field binding 'name))
- "="
- ;; do this so we'll see strings:
- (prin1-to-string
- (ad-arg-binding-field binding 'value)))))
+ (mapconcat (lambda (binding)
+ (concat
+ (symbol-name (ad-arg-binding-field binding 'name))
+ "="
+ ;; do this so we'll see strings:
+ (prin1-to-string
+ (ad-arg-binding-field binding 'value))))
argument-bindings
" ")))
@@ -211,43 +213,27 @@
;; (quietly if BACKGROUND is t).
(ad-make-advice
trace-advice-name nil t
- (cond (background
- `(advice
- lambda ()
- (let ((trace-level (1+ trace-level))
- (trace-buffer (get-buffer-create ,buffer)))
- (save-excursion
- (set-buffer trace-buffer)
- (goto-char (point-max))
- ;; Insert a separator from previous trace output:
- (if (= trace-level 1) (insert trace-separator))
- (insert
- (trace-entry-message
- ',function trace-level ad-arg-bindings)))
- ad-do-it
- (save-excursion
- (set-buffer trace-buffer)
- (goto-char (point-max))
- (insert
- (trace-exit-message
- ',function trace-level ad-return-value))))))
- (t `(advice
- lambda ()
- (let ((trace-level (1+ trace-level))
- (trace-buffer (get-buffer-create ,buffer)))
- (pop-to-buffer trace-buffer)
- (goto-char (point-max))
- ;; Insert a separator from previous trace output:
- (if (= trace-level 1) (insert trace-separator))
- (insert
- (trace-entry-message
- ',function trace-level ad-arg-bindings))
- ad-do-it
- (pop-to-buffer trace-buffer)
- (goto-char (point-max))
- (insert
- (trace-exit-message
- ',function trace-level ad-return-value))))))))
+ `(advice
+ lambda ()
+ (let ((trace-level (1+ trace-level))
+ (trace-buffer (get-buffer-create ,buffer)))
+ (unless inhibit-trace
+ (with-current-buffer trace-buffer
+ ,(unless background '(pop-to-buffer trace-buffer))
+ (goto-char (point-max))
+ ;; Insert a separator from previous trace output:
+ (if (= trace-level 1) (insert trace-separator))
+ (insert
+ (trace-entry-message
+ ',function trace-level ad-arg-bindings))))
+ ad-do-it
+ (unless inhibit-trace
+ (with-current-buffer trace-buffer
+ ,(unless background '(pop-to-buffer trace-buffer))
+ (goto-char (point-max))
+ (insert
+ (trace-exit-message
+ ',function trace-level ad-return-value))))))))
(defun trace-function-internal (function buffer background)
;; Adds trace advice for FUNCTION and activates it.
@@ -297,9 +283,9 @@ activated only if the advice of FUNCTION is currently active. If FUNCTION
was not traced this is a noop."
(interactive
(list (ad-read-advised-function "Untrace function: " 'trace-is-traced)))
- (cond ((trace-is-traced function)
- (ad-remove-advice function 'around trace-advice-name)
- (ad-update function))))
+ (when (trace-is-traced function)
+ (ad-remove-advice function 'around trace-advice-name)
+ (ad-update function)))
(defun untrace-all ()
"Untraces all currently traced functions."
@@ -309,5 +295,5 @@ was not traced this is a noop."
(provide 'trace)
-;;; arch-tag: cfd170a7-4932-4331-8c8b-b7151942e5a1
+;; arch-tag: cfd170a7-4932-4331-8c8b-b7151942e5a1
;;; trace.el ends here