changeset 8292:6857db0f3c82

(byte-decompile-bytecode-1): Put a pc value before each insn in the list we return.
author Richard M. Stallman <rms@gnu.org>
date Wed, 20 Jul 1994 05:31:29 +0000
parents 9c6ddd14996b
children 74218ea236fe
files lisp/emacs-lisp/byte-opt.el
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/byte-opt.el	Tue Jul 19 23:54:02 1994 +0000
+++ b/lisp/emacs-lisp/byte-opt.el	Wed Jul 20 05:31:29 1994 +0000
@@ -1083,6 +1083,8 @@
 ;;; This de-compiler is used for inline expansion of compiled functions,
 ;;; and by the disassembler.
 ;;;
+;;; This list contains numbers, which are pc values,
+;;; before each instruction.
 (defun byte-decompile-bytecode (bytes constvec)
   "Turns BYTECODE into lapcode, referring to CONSTVEC."
   (let ((byte-compile-constants nil)
@@ -1101,6 +1103,7 @@
 	endtag
 	(retcount 0))
     (while (not (= ptr length))
+      (setq lap (cons ptr lap))
       (setq op (aref bytes ptr)
 	    optr ptr
 	    offset (disassemble-offset)) ; this does dynamic-scope magic
@@ -1135,7 +1138,8 @@
     ;; take off the dummy nil op that we replaced a trailing "return" with.
     (let ((rest lap))
       (while rest
-	(cond ((setq tmp (assq (car (car rest)) tags))
+	(cond ((numberp (car rest)))
+	      ((setq tmp (assq (car (car rest)) tags))
 	       ;; this addr is jumped to
 	       (setcdr rest (cons (cons nil (cdr tmp))
 				  (cdr rest)))
@@ -1148,7 +1152,11 @@
     (if endtag
 	(setq lap (cons (cons nil endtag) lap)))
     ;; remove addrs, lap = ( [ (op . arg) | (TAG tagno) ]* )
-    (mapcar 'cdr (nreverse lap))))
+    (mapcar (function (lambda (elt)
+			(if (numberp elt)
+			    elt
+			  (cdr elt))))
+	    (nreverse lap))))
 
 
 ;;; peephole optimizer