core: reverse!: Handle empty list.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:14:01 +0000 (18:14 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:14:01 +0000 (18:14 +0200)
* src/mes.c (reverse_x_): Handle empty list.
* tests/scm.test ("reverse! ()"): Test it.

src/mes.c
tests/scm.test

index 6f3c4a5115244ed5bfc64180fdf65c526a9777e7..e66f6b007e7e2b36b366c063b466a32403cb9462 100644 (file)
--- a/src/mes.c
+++ b/src/mes.c
@@ -661,7 +661,7 @@ append_reverse (SCM x, SCM y)
 SCM
 reverse_x_ (SCM x, SCM t)
 {
-  if (TYPE (x) != TPAIR)
+  if (x != cell_nil && TYPE (x) != TPAIR)
     error (cell_symbol_not_a_pair, cons (x, cell_reverse_x_));
   SCM r = t;
   while (x != cell_nil)
index bb4c2cc4785de625e7bcab9cafd9e167d4ca7db9..a01465e8ac3d8bcb64660cdce41ebfdcdefe5ed4 100755 (executable)
@@ -137,6 +137,9 @@ exit $?
                  (reverse! list)
                  list))
 
+(pass-if-equal "reverse! ()" '()
+  (reverse! '()))
+
 (pass-if "cond-expand" (sequal? (cond-expand (foobar #f) (mes (display ": pass: *YAY*") 'mes) (guile (display ": pass: *GUILE*") 'mes)) 'mes))
 
 (pass-if "apply identity" (seq? (apply identity '(0)) 0))