changeset 60316:c2f592ab6807

(debug-on-entry-1): Reimplement to make sure that debug-entry-code can be safely removed from a function while this code is being evaluated. Revert the 2005-02-27 change as the new implementation no longer requires it. Make sure that a function body containing just a string is not mistaken for a docstring.
author Lute Kamstra <lute@gnu.org>
date Tue, 01 Mar 2005 09:08:47 +0000
parents c185b3fd86dc
children dbdab00b8f09
files lisp/emacs-lisp/debug.el
diffstat 1 files changed, 10 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/debug.el	Tue Mar 01 08:41:52 2005 +0000
+++ b/lisp/emacs-lisp/debug.el	Tue Mar 01 09:08:47 2005 +0000
@@ -25,7 +25,7 @@
 
 ;;; Commentary:
 
-;; This is a major mode documented in the Emacs manual.
+;; This is a major mode documented in the Emacs Lisp manual.
 
 ;;; Code:
 
@@ -479,8 +479,6 @@
 	(insert ? )))
   (beginning-of-line))
 
-
-
 (put 'debugger-env-macro 'lisp-indent-function 0)
 (defmacro debugger-env-macro (&rest body)
   "Run BODY in original environment."
@@ -694,7 +692,6 @@
 	      (setq body (cons (documentation function) body)))
 	  (fset function (cons 'lambda (cons (car contents) body)))))))
 
-
 (defconst debug-entry-code '(if inhibit-debug-on-entry nil (debug 'debug))
   "Code added to a function to cause it to call the debugger upon entry.")
 
@@ -705,22 +702,18 @@
 	(debug-on-entry-1 function (cdr defn) flag)
       (or (eq (car defn) 'lambda)
 	  (error "%s not user-defined Lisp function" function))
-      (let ((tail (cddr defn)))
+      (let ((tail (cdr defn)))
 	;; Skip the docstring.
-	(if (stringp (car tail)) (setq tail (cdr tail)))
+	(when (and (stringp (cadr tail)) (cddr tail))
+	  (setq tail (cdr tail)))
 	;; Skip the interactive form.
-	(if (eq 'interactive (car-safe (car tail))) (setq tail (cdr tail)))
-	(unless (eq flag (equal (car tail) debug-entry-code))
-	  ;; If the function has no body, add nil as a body element.
-	  (when (null tail)
-	    (setq tail (list nil))
-	    (nconc defn tail))
+	(when (eq 'interactive (car-safe (cadr tail))) 
+	  (setq tail (cdr tail)))
+	(unless (eq flag (equal (cadr tail) debug-entry-code))
 	  ;; Add/remove debug statement as needed.
-	  (if (not flag)
-	      (progn (setcar tail (cadr tail))
-		     (setcdr tail (cddr tail)))
-	    (setcdr tail (cons (car tail) (cdr tail)))
-	    (setcar tail debug-entry-code)))
+	  (if flag
+	      (setcdr tail (cons debug-entry-code (cdr tail)))
+	    (setcdr tail (cddr tail))))
 	defn))))
 
 (defun debugger-list-functions ()