changeset 23394:25eb153a9d4c

(profile-fix-fun): If already profiled, return DEF unchanged, not nil. Simplify.
author Karl Heuer <kwzh@gnu.org>
date Wed, 07 Oct 1998 18:32:55 +0000
parents bcac7111042a
children 93d7c8a30147
files lisp/emacs-lisp/profile.el
diffstat 1 files changed, 22 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/profile.el	Wed Oct 07 02:29:06 1998 +0000
+++ b/lisp/emacs-lisp/profile.el	Wed Oct 07 18:32:55 1998 +0000
@@ -269,45 +269,35 @@
 (defun profile-fix-fun (fun def)
   "Take function FUN and return it fixed for profiling.
 DEF is (symbol-function FUN)."
-  (let (prefix first second third (count 2) inter suffix)
-    (if (< (length def) 3)
-	nil		; nothing to see
-      (setq first (car def) second (car (cdr def))
-	    third (car (nthcdr 2 def)))
-      (setq prefix (list first second))
+  (if (< (length def) 3)
+      def		; nothing to see
+    (let ((prefix (list (car def) (car (cdr def))))
+	  (suffix (cdr (cdr def))))
       ;; Skip the doc string, if there is a string
       ;; which serves only as a doc string,
       ;; and put it in PREFIX.
-      (if (or (not (stringp third)) (not (nthcdr 3 def)))
-	  ;; Either no doc string, or it is also the function value.
-	  (setq inter third) 
-	;; Skip the doc string,
-	(setq count 3
-	      prefix (nconc prefix (list third))
-	      inter (car (nthcdr 3 def))))
+      (if (and (stringp (car suffix)) (cdr suffix))
+	  (setq prefix (nconc prefix (list (car suffix)))
+		suffix (cdr suffix)))
       ;; Check for an interactive spec.
-      ;; If found, put it inu  PREFIX and skip it.
-      (if (not (and (listp inter) 
-		    (eq (car inter) 'interactive)))
-	  nil
-	(setq prefix (nconc prefix (list inter)))
-	(setq count (1+ count)))	; skip this sexp for suffix
-      ;; Set SUFFIX to the function body forms.
-      (setq suffix (nthcdr count def))
+      ;; If found, put it into PREFIX and skip it.
+      (if (and (listp (car suffix)) 
+	       (eq (car (car suffix)) 'interactive))
+	  (setq prefix (nconc prefix (list (car suffix)))
+		suffix (cdr suffix)))
       (if (equal (car suffix) '(profile-get-time))
-	  nil
+	  def				; already profiled
 	;; Prepare new function definition.
 	(nconc prefix
-	       (list '(profile-get-time)) ; read time
-	       (list (list 'profile-start-function 
-			   (list 'quote fun)))
-	       (list (list 'setq 'profile-temp-result- 
-			   (nconc (list 'progn) suffix)))
-	       (list '(profile-get-time)) ; read time
-	       (list (list 'profile-update-function 
-			   (list 'quote fun)))
-	       (list 'profile-temp-result-)
-	       )))))
+	       (list '(profile-get-time) ; read time
+		     (list 'profile-start-function 
+			   (list 'quote fun))
+		     (list 'setq 'profile-temp-result- 
+			   (cons 'progn suffix))
+		     '(profile-get-time) ; read time
+		     (list 'profile-update-function 
+			   (list 'quote fun))
+		     'profile-temp-result-))))))
 
 (defun profile-restore-fun (fun)
   "Restore profiled function FUN to its original state."