changeset 13474:3e7f6fdc234d

(byte-compile-associative): Do operations left to right. (byte-force-recompile): Improve the prompt.
author Richard M. Stallman <rms@gnu.org>
date Fri, 10 Nov 1995 17:16:57 +0000
parents 4492ba9a0757
children ddf1e34018d2
files lisp/emacs-lisp/bytecomp.el
diffstat 1 files changed, 21 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el	Fri Nov 10 17:13:56 1995 +0000
+++ b/lisp/emacs-lisp/bytecomp.el	Fri Nov 10 17:16:57 1995 +0000
@@ -1125,7 +1125,7 @@
 (defun byte-force-recompile (directory)
   "Recompile every `.el' file in DIRECTORY that already has a `.elc' file.
 Files in subdirectories of DIRECTORY are processed also."
-  (interactive "DByte recompile directory: ")
+  (interactive "DByte force recompile (directory): ")
   (byte-recompile-directory directory nil t))
 
 ;;;###autoload
@@ -1905,9 +1905,16 @@
 		  ;; If the interactive spec is a call to `list',
 		  ;; don't compile it, because `call-interactively'
 		  ;; looks at the args of `list'.
-		  (or (eq (car-safe (nth 1 int)) 'list)
-		      (setq int (list 'interactive
-				      (byte-compile-top-level (nth 1 int))))))
+		  (let ((form (nth 1 int)))
+		    (while (or (eq (car-safe form) 'let)
+			       (eq (car-safe form) 'let*)
+			       (eq (car-safe form) 'save-excursion))
+		      (while (consp (cdr form))
+			(setq form (cdr form)))
+		      (setq form (car form)))
+		    (or (eq (car-safe form) 'list)
+			(setq int (list 'interactive
+					(byte-compile-top-level (nth 1 int)))))))
 		 ((cdr int)
 		  (byte-compile-warn "malformed interactive spec: %s"
 				     (prin1-to-string int))))))
@@ -2418,13 +2425,18 @@
 
 
 ;; Compile a function that accepts one or more args and is right-associative.
+;; We do it by left-associativity so that the operations
+;; are done in the same order as in interpreted code.
 (defun byte-compile-associative (form)
   (if (cdr form)
-      (let ((opcode (get (car form) 'byte-opcode)))
-	;; To compile all the args first may enable some optimizations.
-	(mapcar 'byte-compile-form (setq form (cdr form)))
-	(while (setq form (cdr form))
-	  (byte-compile-out opcode 0)))
+      (let ((opcode (get (car form) 'byte-opcode))
+	    (args (copy-sequence (cdr form))))
+	(byte-compile-form (car args))
+	(setq args (cdr args))
+	(while args
+	  (byte-compile-form (car args))
+	  (byte-compile-out opcode 0)
+	  (setq args (cdr args))))
     (byte-compile-constant (eval form))))