diff options
author | Richard M. Stallman <rms@gnu.org> | 1996-03-08 17:44:00 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1996-03-08 17:44:00 +0000 |
commit | b56c87bccf542d2959ab26cce03c5766c002ae96 (patch) | |
tree | 944d78e609620c06a20b1fa7e2e5d384c5669e5b /lisp | |
parent | 1eb46b45fbe7f6c58adde08464f84f65dd67ba41 (diff) | |
download | emacs-b56c87bccf542d2959ab26cce03c5766c002ae96.tar.gz |
(profile-convert-byte-code): New function.
(profile-a-function): Use profile-convert-byte-code.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/emacs-lisp/profile.el | 18 |
1 files changed, 18 insertions, 0 deletions
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)) |