From: Richard M. Stallman Date: Fri, 8 Mar 1996 17:44:00 +0000 (+0000) Subject: (profile-convert-byte-code): New function. X-Git-Tag: emacs-19.34~1069 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=619393960473088d5339b47e0b2775ce6a0c46b4;p=emacs.git (profile-convert-byte-code): New function. (profile-a-function): Use profile-convert-byte-code. --- diff --git a/lisp/emacs-lisp/profile.el b/lisp/emacs-lisp/profile.el index b6333fc2740..272833dbd2c 100644 --- a/lisp/emacs-lisp/profile.el +++ b/lisp/emacs-lisp/profile.el @@ -218,9 +218,27 @@ With argument FLIST, use the list FLIST instead." (setcdr accum (- (cdr accum) profile-million))) ))) +(defun profile-convert-byte-code (function) + (let ((defn (symbol-function function))) + (if (byte-code-function-p defn) + ;; It is a compiled code object. + (let* ((contents (append defn nil)) + (body + (list (list 'byte-code (nth 1 contents) + (nth 2 contents) (nth 3 contents))))) + (if (nthcdr 5 contents) + (setq body (cons (list 'interactive (nth 5 contents)) body))) + (if (nth 4 contents) + ;; Use `documentation' here, to get the actual string, + ;; in case the compiled function has a reference + ;; to the .elc file. + (setq body (cons (documentation function) body))) + (fset function (cons 'lambda (cons (car contents) body))))))) + (defun profile-a-function (fun) "Profile the function FUN." (interactive "aFunction to profile: ") + (profile-convert-byte-code fun) (let ((def (symbol-function fun)) (funlen (length (symbol-name fun)))) (if (eq (car def) 'lambda) nil (error "To profile: %s must be a user-defined function" fun))