Re: [Chicken-hackers] [Chicken-announce] CHICKEN 4.10.0 release candidate 1 available

2015-06-17 Thread Moritz Heidkamp
On 10 June 2015 20:39 CEST, Mario Domenech Goulart wrote:

> I've found a small regression related to substring-index[-ci].  I hope
> the attached patch fixes it.

For posterity: Mario and I poked away at this one a bit more via IRC and
found a few more issues. Eventually, a modified version of this patch
(along with a handful of additional tests) was applied to prerelease
(dde858e), master (e6723de) and chicken-5 (5de5c6e).

We'll prepare a new RC soon. Thanks for all the test results so far!

Moritz


signature.asc
Description: PGP signature
___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers


Re: [Chicken-hackers] [Chicken-announce] CHICKEN 4.10.0 release candidate 1 available

2015-06-10 Thread Mario Domenech Goulart
Hi,

On Sun, 07 Jun 2015 17:16:07 +0200 Moritz Heidkamp  
wrote:

> we are happy to announce the first release candidate of the upcoming
> CHICKEN 4.10.0. It is now available at this location:
>
> http://code.call-cc.org/dev-snapshots/2015/06/07/chicken-4.10.0rc1.tar.gz

Many thanks for the rc release, Moritz.

I've found a small regression related to substring-index[-ci].  I hope
the attached patch fixes it.

Best wishes.
Mario
-- 
http://parenteses.org/mario
>From 2d0a23e8c84bc8b1c5f5dbc9f464866c0677c5ad Mon Sep 17 00:00:00 2001
From: Mario Domenech Goulart 
Date: Wed, 10 Jun 2015 15:03:38 -0300
Subject: [PATCH] data-structures: fix substring-index[-ci] corner case ("" as
 2nd arg)

Fix regression introduced by 25db851b90260:

$ ~/local/chicken-4.9.0.1/bin/csi -p '(substring-index "foo" "")'

$ ~/local/chicken-4.10.0rc1/bin/csi -p '(substring-index "foo" "")'

Error: (substring-index) out of range
0
0

Call history:

  (substring-index "foo" "")
(substring-index "foo" "")<--
---
 data-structures.scm |   22 --
 tests/data-structures-tests.scm |2 ++
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/data-structures.scm b/data-structures.scm
index b67065e..0a457eb 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -311,16 +311,18 @@
 	   (whichlen (##sys#size which))
 	   (end (fx- wherelen whichlen)))
   (##sys#check-exact start loc)
-  (if (and (fx>= start 0)
-	   (fx> wherelen start))
-	  (let loop ((istart start))
-	(cond ((fx> istart end) #f)
-		  ((test istart whichlen) istart)
-		  (else (loop (fx+ istart 1)
-	  (##sys#error-hook (foreign-value "C_OUT_OF_RANGE_ERROR" int)
-			loc
-			start
-			wherelen
+  (if (fx= wherelen 0)
+  (and (fx= whichlen 0) 0)
+  (if (and (fx>= start 0)
+   (fx> wherelen start))
+  (let loop ((istart start))
+(cond ((fx> istart end) #f)
+  ((test istart whichlen) istart)
+  (else (loop (fx+ istart 1)
+  (##sys#error-hook (foreign-value "C_OUT_OF_RANGE_ERROR" int)
+loc
+start
+wherelen)
 
   (set! ##sys#substring-index 
 (lambda (which where start)
diff --git a/tests/data-structures-tests.scm b/tests/data-structures-tests.scm
index 51c25a9..d5e1d7f 100644
--- a/tests/data-structures-tests.scm
+++ b/tests/data-structures-tests.scm
@@ -47,6 +47,8 @@
 (assert (not (substring-ci=? "foo\x00a" "foo\x00b" 1 1)))
 (assert (not (substring-index "o\x00bar" "foo\x00baz")))
 (assert (not (substring-index-ci "o\x00bar" "foo\x00baz")))
+(assert (= 0 (substring-index "" "")))
+(assert (not (substring-index "foo" "")))
 (assert (= 0 (string-compare3 "foo\x00a" "foo\x00a")))
 (assert (> 0 (string-compare3 "foo\x00a" "foo\x00b")))
 (assert (< 0 (string-compare3 "foo\x00b" "foo\x00a")))
-- 
1.7.10.4

___
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers