APPROVE COMMIT
NOTE: This patch has been committed.
# HG changeset patch
# User Aidan Kehoe <kehoea(a)parhasard.net>
# Date 1297327570 0
# Node ID 70b15ac66ee5f431c1e663ea985f825bfd09ea63
# Parent 22c4e67a2e69afcc7443c42632da14a466d208f8
Correct a bug with circularity checking in #'mapcar*, #'map, etc.
src/ChangeLog addition:
2011-02-10 Aidan Kehoe <kehoea(a)parhasard.net>
* fns.c (shortest_length_among_sequences):
This was buggy, it always errored if the last argument was
circular, even if other arguments were non-circular. Correct that.
tests/ChangeLog addition:
2011-02-10 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/lisp-tests.el:
* automated/lisp-tests.el (mapcar*):
If multiple SEQUENCE arguments are passed to #'mapcar*, and the
last one is circular while the others aren't, make sure that
#'mapcar* doesn't error.
diff -r 22c4e67a2e69 -r 70b15ac66ee5 src/ChangeLog
--- a/src/ChangeLog Wed Feb 09 20:15:50 2011 +0000
+++ b/src/ChangeLog Thu Feb 10 08:46:10 2011 +0000
@@ -1,3 +1,9 @@
+2011-02-10 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * fns.c (shortest_length_among_sequences):
+ This was buggy, it always errored if the last argument was
+ circular, even if other arguments were non-circular. Correct that.
+
2011-02-09 Aidan Kehoe <kehoea(a)parhasard.net>
* alloc.c (Facons):
diff -r 22c4e67a2e69 -r 70b15ac66ee5 src/fns.c
--- a/src/fns.c Wed Feb 09 20:15:50 2011 +0000
+++ b/src/fns.c Thu Feb 10 08:46:10 2011 +0000
@@ -7145,7 +7145,7 @@
static Elemcount
shortest_length_among_sequences (int nsequences, Lisp_Object *sequences)
{
- Elemcount len = EMACS_INT_MAX;
+ Elemcount len = 1 + EMACS_INT_MAX;
Lisp_Object length = Qnil;
int i;
@@ -7167,7 +7167,7 @@
}
}
- if (NILP (length))
+ if (len == 1 + EMACS_INT_MAX)
{
signal_circular_list_error (sequences[0]);
}
diff -r 22c4e67a2e69 -r 70b15ac66ee5 tests/ChangeLog
--- a/tests/ChangeLog Wed Feb 09 20:15:50 2011 +0000
+++ b/tests/ChangeLog Thu Feb 10 08:46:10 2011 +0000
@@ -1,3 +1,11 @@
+2011-02-10 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * automated/lisp-tests.el:
+ * automated/lisp-tests.el (mapcar*):
+ If multiple SEQUENCE arguments are passed to #'mapcar*, and the
+ last one is circular while the others aren't, make sure that
+ #'mapcar* doesn't error.
+
2011-02-07 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/lisp-tests.el:
diff -r 22c4e67a2e69 -r 70b15ac66ee5 tests/automated/lisp-tests.el
--- a/tests/automated/lisp-tests.el Wed Feb 09 20:15:50 2011 +0000
+++ b/tests/automated/lisp-tests.el Thu Feb 10 08:46:10 2011 +0000
@@ -1046,6 +1046,12 @@
(car y))
x)))
+(Assert
+ (equal
+ (let ((list (list pi))) (mapcar* #'cons [1 2 3 4] (nconc list list)))
+ `((1 . ,pi) (2 . ,pi) (3 . ,pi) (4 . ,pi)))
+ "checking mapcar* behaves correctly when only one arg is circular")
+
(Assert (eql
(length (multiple-value-list
(car (mapcar #'(lambda (argument) (floor argument)) (list pi e)))))
--
“Apart from the nine-banded armadillo, man is the only natural host of
Mycobacterium leprae, although it can be grown in the footpads of mice.”
-- Kumar & Clark, Clinical Medicine, summarising improbable leprosy research
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches