mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-07 08:00:48 -08:00
Use the nthcdr byte-op for drop, and raise open-code limit
* lisp/emacs-lisp/byte-opt.el (byte-optimize-nthcdr): Open-code for any integral N<5. Always use the byte-op otherwise.
This commit is contained in:
parent
97a2710554
commit
3000edc617
1 changed files with 9 additions and 7 deletions
|
|
@ -1512,13 +1512,15 @@ See Info node `(elisp) Integer Basics'."
|
|||
(put 'nthcdr 'byte-optimizer #'byte-optimize-nthcdr)
|
||||
(defun byte-optimize-nthcdr (form)
|
||||
(if (= (safe-length form) 3)
|
||||
(if (memq (nth 1 form) '(0 1 2))
|
||||
(let ((count (nth 1 form)))
|
||||
(setq form (nth 2 form))
|
||||
(while (>= (setq count (1- count)) 0)
|
||||
(setq form (list 'cdr form)))
|
||||
form)
|
||||
form)
|
||||
(let ((count (nth 1 form)))
|
||||
(cond ((and (integerp count) (<= count 3))
|
||||
(setq form (nth 2 form))
|
||||
(while (>= (setq count (1- count)) 0)
|
||||
(setq form (list 'cdr form)))
|
||||
form)
|
||||
((not (eq (car form) 'nthcdr))
|
||||
(cons 'nthcdr (cdr form))) ; use the nthcdr byte-op
|
||||
(t form)))
|
||||
form))
|
||||
|
||||
(put 'cons 'byte-optimizer #'byte-optimize-cons)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue