X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3c7e6b9d2a427acdcb03d63b3c19939180687b9e..b08b261e8b7aabbc3a7647e620728a6dbe973652:/lisp/emacs-lisp/disass.el diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el index 8a980db06a..47a5a0c342 100644 --- a/lisp/emacs-lisp/disass.el +++ b/lisp/emacs-lisp/disass.el @@ -1,6 +1,6 @@ ;;; disass.el --- disassembler for compiled Emacs Lisp code -;;; Copyright (C) 1986, 1991 Free Software Foundation, Inc. +;; Copyright (C) 1986, 1991 Free Software Foundation, Inc. ;; Author: Doug Cutting ;; Jamie Zawinski @@ -20,8 +20,9 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. ;;; Commentary: @@ -87,7 +88,7 @@ redefine OBJECT if it is a symbol." (setq macro t obj (cdr obj))) (if (and (listp obj) (eq (car obj) 'byte-code)) - (setq obj (list 'lambda nil obj))) + (setq obj (list 'lambda nil obj))) (if (and (listp obj) (not (eq (car obj) 'lambda))) (error "not a function")) (if (consp obj) @@ -103,8 +104,9 @@ redefine OBJECT if it is a symbol." (setq obj (cdr obj)) ;throw lambda away (setq args (car obj)) ;save arg list (setq obj (cdr obj))) - (t - (setq args (aref obj 0)))) + ((byte-code-function-p obj) + (setq args (aref obj 0))) + (t (error "Compilation failed"))) (if (zerop indent) ; not a nested function (progn (indent-to indent) @@ -114,7 +116,8 @@ redefine OBJECT if it is a symbol." (if name (format " %s" name) ""))))) (let ((doc (if (consp obj) (and (stringp (car obj)) (car obj)) - (and (> (length obj) 4) (aref obj 4))))) + ;; Use documentation to get lazy-loaded doc string + (documentation obj t)))) (if (and doc (stringp doc)) (progn (and (consp obj) (setq obj (cdr obj))) (indent-to indent) @@ -166,9 +169,11 @@ OBJ should be a call to BYTE-CODE generated by the byte compiler." (if (consp obj) (setq bytes (car (cdr obj)) ;the byte code constvec (car (cdr (cdr obj)))) ;constant vector + ;; If it is lazy-loaded, load it now + (fetch-bytecode obj) (setq bytes (aref obj 1) constvec (aref obj 2))) - (let ((lap (byte-decompile-bytecode bytes constvec)) + (let ((lap (byte-decompile-bytecode (string-as-unibyte bytes) constvec)) op arg opname pc-value) (let ((tagno 0) tmp @@ -258,4 +263,6 @@ OBJ should be a call to BYTE-CODE generated by the byte compiler." (insert "\n"))))) nil) +(provide 'disass) + ;;; disass.el ends here