(byte-optimize-nth)

(byte-optimize-nthcdr): Fix for case of wrong-length forms.
This commit is contained in:
Dave Love 2003-01-05 00:28:18 +00:00
parent 98e99f6e64
commit 56cfa2440e

View file

@ -1097,21 +1097,25 @@
(put 'nth 'byte-optimizer 'byte-optimize-nth)
(defun byte-optimize-nth (form)
(if (and (= (safe-length form) 3) (memq (nth 1 form) '(0 1)))
(list 'car (if (zerop (nth 1 form))
(nth 2 form)
(list 'cdr (nth 2 form))))
(byte-optimize-predicate form)))
(if (= (safe-length form) 3)
(if (memq (nth 1 form) '(0 1))
(list 'car (if (zerop (nth 1 form))
(nth 2 form)
(list 'cdr (nth 2 form))))
(byte-optimize-predicate form))
form))
(put 'nthcdr 'byte-optimizer 'byte-optimize-nthcdr)
(defun byte-optimize-nthcdr (form)
(if (and (= (safe-length form) 3) (not (memq (nth 1 form) '(0 1 2))))
(byte-optimize-predicate form)
(let ((count (nth 1 form)))
(setq form (nth 2 form))
(while (>= (setq count (1- count)) 0)
(setq form (list 'cdr form)))
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)
(byte-optimize-predicate form))
form))
(put 'concat 'byte-optimizer 'byte-optimize-concat)
(defun byte-optimize-concat (form)