(byte-optimize-nth)
(byte-optimize-nthcdr): Fix for case of wrong-length forms.
This commit is contained in:
parent
98e99f6e64
commit
56cfa2440e
1 changed files with 16 additions and 12 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue