1.0.17.23: respect displacement indices when trimming strings (regression 1.0.12.23)
authorNikodemus Siivola <nikodemus@random-state.net>
Tue, 3 Jun 2008 16:00:15 +0000 (16:00 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Tue, 3 Jun 2008 16:00:15 +0000 (16:00 +0000)
 * Revealed by ansi-tests.

NEWS
src/code/string.lisp
tests/string.pure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 36c8581..348f800 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,8 +19,10 @@ changes in sbcl-1.0.18 relative to 1.0.17:
   * fixed some bugs revealed by Paul Dietz' test suite:
     ** NIL is a valid function name (regression at 1.0.13.38)
     ** FILL on lists was missing its return value (regression at 1.0.12.27)
-    ** STRING-TRIM, STRING-LEFT-TRIM, and STRING-RIGHT-TRIMP did not respect
+    ** STRING-TRIM, STRING-LEFT-TRIM, and STRING-RIGHT-TRIM did not respect
        fill pointers properly (regression at 1.0.12.23)
+    ** STRING-TRIM, STRING-LEFT-TRIM, and STRING-RIGHT-TRIM did not respect
+       displacement indices properly (regression at 1.0.12.23)   
 
 changes in sbcl-1.0.17 relative to 1.0.16:
   * temporary regression: user code can no longer allocate closure
index 439371b..de97aa9 100644 (file)
@@ -414,7 +414,7 @@ new string COUNT long filled with the fill character."
                                              :test #'char=)))
                               index)
                            (declare (fixnum index)))
-                         0))
+                         start))
            (right-end (if right-p
                           (do ((index (1- (the fixnum end)) (1- index)))
                               ((or (< index left-end)
@@ -424,7 +424,7 @@ new string COUNT long filled with the fill character."
                                (1+ index))
                             (declare (fixnum index)))
                           end)))
-      (if (and (eql left-end 0)
+      (if (and (eql left-end start)
                (eql right-end end))
           string
           (subseq (the simple-string string) left-end right-end)))))
index cd96fb1..13da95d 100644 (file)
   (assert (equal "abcdaba" s))
   (assert (equal "cdaba" s2))
   (assert (equal "abcd" s3)))
+
+;;; Trimming should replace displacement offsets
+(let* ((etype 'base-char)
+             (s0
+              (make-array '(6) :initial-contents "abcaeb" :element-type etype))
+             (s
+              (make-array '(3) :element-type etype :displaced-to s0 :displaced-index-offset 1)))
+  (assert (equal "bc" (string-right-trim "ab" s)))
+  (assert (equal "bca" s))
+  (assert (equal "abcaeb" s0)))
index 3ac39ea..5d8d32d 100644 (file)
@@ -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.17.22"
+"1.0.17.23"