From b266b81884ae6e0a354774d0d722deda90f3521a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Mon, 29 Apr 2024 20:24:07 +0200 Subject: [PATCH] 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. (cherry picked from commit 3000edc6179dfe0b5f24ae2e472826530809dfd1) --- lisp/emacs-lisp/byte-opt.el | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index 3d6b35422b8..4095726d276 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -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) -- 2.39.5