Fix for-each bug detecting not-a-list
authorAndy Wingo <wingo@pobox.com>
Sun, 2 Mar 2014 11:04:18 +0000 (12:04 +0100)
committerAndy Wingo <wingo@pobox.com>
Sun, 2 Mar 2014 11:04:18 +0000 (12:04 +0100)
* module/ice-9/boot-9.scm (for-each): Fix detection of not-a-list in the
  unrolled one-argument case.

* test-suite/tests/eval.test ("for-each"): Add a test.

module/ice-9/boot-9.scm
test-suite/tests/eval.test

index fd92445..f9a7c1f 100644 (file)
@@ -923,7 +923,8 @@ for key @var{k}, then invoke @var{thunk}."
                        (scm-error 'wrong-type-arg "for-each" "Circular list: ~S"
                                   (list l) #f))
                      (f (car hare))
-                     (for-each1 (cdr hare) (cdr tortoise))))))
+                     (for-each1 (cdr hare) (cdr tortoise)))
+                   (for-each1 hare tortoise))))
            (if (not (null? hare))
                (scm-error 'wrong-type-arg "for-each" "Not a list: ~S"
                           (list l) #f)))))
index 2e0a767..3fc1d94 100644 (file)
@@ -1,5 +1,5 @@
 ;;;; eval.test --- tests guile's evaluator     -*- scheme -*-
-;;;; Copyright (C) 2000, 2001, 2006, 2007, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+;;;; Copyright (C) 2000, 2001, 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
 ;;;;
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
        (map + '(1 2) '(3)))
     )))
 
+(with-test-prefix "for-each"
+
+  (pass-if-exception "1 arg, non-list, even number of elements"
+      exception:not-a-list
+    (for-each values '(1 2 3 4 . 5)))
+
+  (pass-if-exception "1 arg, non-list, odd number of elements"
+      exception:not-a-list
+    (for-each values '(1 2 3 . 4))))
+
 ;;;
 ;;; define with procedure-name
 ;;;