Fix transform for SEARCH on vectors with :form-end t.
authorStas Boukarev <stassats@gmail.com>
Thu, 8 Dec 2011 15:22:12 +0000 (19:22 +0400)
committerStas Boukarev <stassats@gmail.com>
Thu, 8 Dec 2011 15:22:12 +0000 (19:22 +0400)
When from-end is specified, start2 becomes end2 and the other way
around, so return star2 or end2 accordingly when testing for an empty
subsequence.

src/compiler/seqtran.lisp
tests/seq.pure.lisp

index f87bd78..5181c06 100644 (file)
                   (unless (<= start2 end2 len2)
                     (oops pattern start2 end2))))
             (when (= end1 start1)
-              (return-from search start2))
+              (return-from search (if from-end
+                                      end2
+                                      start2)))
             (do (,(if from-end
                       '(index2 (- end2 (- end1 start1)) (1- index2))
                       '(index2 start2 (1+ index2))))
index d6aa497..ded374f 100644 (file)
   (assert (eql 2
                (funcall (lambda ()
                           (declare (optimize speed))
-                          (search #(1) #(1 1) :start1 1 :start2 2))))))
+                          (search #(1) #(1 1) :start1 1 :start2 2)))))
+  (assert (eql 2
+               (funcall (lambda ()
+                          (declare (optimize speed))
+                          (search #() #(1 1) :from-end t))))))