changeset 37785:908fb90452ba

(elp-instrument-function): Handle advised functions.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 17 May 2001 13:55:33 +0000
parents b2509ef38ea1
children b93b6e5c76bf
files lisp/emacs-lisp/elp.el
diffstat 1 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/elp.el	Thu May 17 13:44:50 2001 +0000
+++ b/lisp/emacs-lisp/elp.el	Thu May 17 13:55:33 2001 +0000
@@ -1,6 +1,6 @@
 ;;; elp.el --- Emacs Lisp Profiler
 
-;; Copyright (C) 1994,1995,1997,1998 Free Software Foundation, Inc.
+;; Copyright (C) 1994,1995,1997,1998, 2001 Free Software Foundation, Inc.
 
 ;; Author:        1994-1998 Barry A. Warsaw
 ;; Maintainer:    FSF
@@ -266,15 +266,22 @@
     ;; put the info vector on the property list
     (put funsym elp-timer-info-property infovec)
 
-    ;; set the symbol's new profiling function definition to run
-    ;; elp-wrapper
-    (fset funsym newguts)
+    ;; Set the symbol's new profiling function definition to run
+    ;; elp-wrapper.
+    (let ((advice-info (get funsym 'ad-advice-info)))
+      (if advice-info
+	  (progn
+	    ;; If function is advised, don't let Advice change
+	    ;; its definition from under us during the `fset'.
+	    (put funsym 'ad-advice-info nil)
+	    (fset funsym newguts)
+	    (put funsym 'ad-advice-info advice-info))
+	(fset funsym newguts)))
 
     ;; add this function to the instrumentation list
     (or (memq funsym elp-all-instrumented-list)
 	(setq elp-all-instrumented-list
-	      (cons funsym elp-all-instrumented-list)))
-    ))
+	      (cons funsym elp-all-instrumented-list)))))
 
 (defun elp-restore-function (funsym)
   "Restore an instrumented function to its original definition.