From ba871531b6b394da295c9a4527346e1e6327ccca Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Wed, 12 Dec 2007 11:22:37 +0000 Subject: [PATCH] 1.0.12.27: FILL on lists was broken by 1.0.12.16, oops! * Fix it, write some tests as penance. --- src/code/seq.lisp | 22 +++++++++++----------- tests/seq.impure.lisp | 16 ++++++++++++++++ version.lisp-expr | 2 +- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/code/seq.lisp b/src/code/seq.lisp index 8fe9d9f1a..a51435d55 100644 --- a/src/code/seq.lisp +++ b/src/code/seq.lisp @@ -487,17 +487,17 @@ (setf pointer (nthcdr (1- start) pointer))) (if pointer (pop pointer) - (oops)) - (if end - (let ((n (- end start))) - (declare (integer n)) - (when (minusp n) - (oops)) - (when (plusp n) - (loop repeat n - do (rplaca pointer item)))) - (loop while pointer - do (setf pointer (cdr (rplaca pointer item))))))))) + (oops))) + (if end + (let ((n (- end start))) + (declare (integer n)) + (when (minusp n) + (oops)) + (when (plusp n) + (loop repeat n + do (setf pointer (cdr (rplaca pointer item)))))) + (loop while pointer + do (setf pointer (cdr (rplaca pointer item)))))))) (defun vector-fill* (sequence item start end) (with-array-data ((data sequence) diff --git a/tests/seq.impure.lisp b/tests/seq.impure.lisp index a659be1d3..f6e79d325 100644 --- a/tests/seq.impure.lisp +++ b/tests/seq.impure.lisp @@ -1083,5 +1083,21 @@ (delete-duplicates (vector #\a #\b #\c #\a) :test-not (lambda (a b) (not (char-equal a b)))) + +;;; FILL on lists +(let ((l (list 1 2 3))) + (fill l 0 :start 1 :end 2) + (assert (equal l '(1 0 3))) + (fill l 'x :start 2 :end 3) + (assert (equal l '(1 0 x))) + (fill l 'y :start 1) + (assert (equal l '(1 y y))) + (fill l 'z :end 2) + (assert (equal l '(z z y))) + (fill l 1) + (assert (equal l '(1 1 1))) + (assert (raises-error? (fill l 0 :start 4))) + (assert (raises-error? (fill l 0 :end 4))) + (assert (raises-error? (fill l 0 :start 2 :end 1)))) ;;; success diff --git a/version.lisp-expr b/version.lisp-expr index 9e3bcb102..66bd55e2c 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.12.26" +"1.0.12.27" -- 2.11.4.GIT