Commit c0f43df5 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(byte-compile-associative): Do operations left to right.

(byte-force-recompile): Improve the prompt.
parent d09d7ba9
...@@ -1125,7 +1125,7 @@ otherwise pop it") ...@@ -1125,7 +1125,7 @@ otherwise pop it")
(defun byte-force-recompile (directory) (defun byte-force-recompile (directory)
"Recompile every `.el' file in DIRECTORY that already has a `.elc' file. "Recompile every `.el' file in DIRECTORY that already has a `.elc' file.
Files in subdirectories of DIRECTORY are processed also." Files in subdirectories of DIRECTORY are processed also."
(interactive "DByte recompile directory: ") (interactive "DByte force recompile (directory): ")
(byte-recompile-directory directory nil t)) (byte-recompile-directory directory nil t))
;;;###autoload ;;;###autoload
...@@ -1905,9 +1905,16 @@ If FORM is a lambda or a macro, byte-compile it as a function." ...@@ -1905,9 +1905,16 @@ If FORM is a lambda or a macro, byte-compile it as a function."
;; If the interactive spec is a call to `list', ;; If the interactive spec is a call to `list',
;; don't compile it, because `call-interactively' ;; don't compile it, because `call-interactively'
;; looks at the args of `list'. ;; looks at the args of `list'.
(or (eq (car-safe (nth 1 int)) 'list) (let ((form (nth 1 int)))
(setq int (list 'interactive (while (or (eq (car-safe form) 'let)
(byte-compile-top-level (nth 1 int)))))) (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) ((cdr int)
(byte-compile-warn "malformed interactive spec: %s" (byte-compile-warn "malformed interactive spec: %s"
(prin1-to-string int)))))) (prin1-to-string int))))))
...@@ -2418,13 +2425,18 @@ If FORM is a lambda or a macro, byte-compile it as a function." ...@@ -2418,13 +2425,18 @@ If FORM is a lambda or a macro, byte-compile it as a function."
;; Compile a function that accepts one or more args and is right-associative. ;; 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) (defun byte-compile-associative (form)
(if (cdr form) (if (cdr form)
(let ((opcode (get (car form) 'byte-opcode))) (let ((opcode (get (car form) 'byte-opcode))
;; To compile all the args first may enable some optimizations. (args (copy-sequence (cdr form))))
(mapcar 'byte-compile-form (setq form (cdr form))) (byte-compile-form (car args))
(while (setq form (cdr form)) (setq args (cdr args))
(byte-compile-out opcode 0))) (while args
(byte-compile-form (car args))
(byte-compile-out opcode 0)
(setq args (cdr args))))
(byte-compile-constant (eval form)))) (byte-compile-constant (eval form))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment