More robust optimisation of ignore
Treat `ignore` as any other function during source-level optimisation, to avoid having its warning-suppression effects cancelled by repeated passes. Instead, define a custom code generation function. * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't treat `ignore' specially here. (side-effect-free-fns): Don't mark `ignore` as side-effect-free or error-free (although it is), since that would allow the optimiser to elide calls. * lisp/emacs-lisp/bytecomp.el (ignore, byte-compile-ignore): Define and register a code-gen function.
This commit is contained in:
parent
fab1e220db
commit
bba48d6ee5
2 changed files with 9 additions and 8 deletions
|
@ -4207,6 +4207,7 @@ discarding."
|
|||
(byte-defop-compiler-1 funcall)
|
||||
(byte-defop-compiler-1 let)
|
||||
(byte-defop-compiler-1 let* byte-compile-let)
|
||||
(byte-defop-compiler-1 ignore)
|
||||
|
||||
(defun byte-compile-progn (form)
|
||||
(byte-compile-body-do-effect (cdr form)))
|
||||
|
@ -4222,6 +4223,11 @@ discarding."
|
|||
(if ,discard 'byte-goto-if-nil 'byte-goto-if-nil-else-pop))
|
||||
,tag))
|
||||
|
||||
(defun byte-compile-ignore (form)
|
||||
(dolist (arg (cdr form))
|
||||
(byte-compile-form arg t))
|
||||
(byte-compile-form nil))
|
||||
|
||||
;; Return the list of items in CONDITION-PARAM that match PRED-LIST.
|
||||
;; Only return items that are not in ONLY-IF-NOT-PRESENT.
|
||||
(defun byte-compile-find-bound-condition (condition-param
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue