Mercurial > hg > xemacs-beta
changeset 5355:70b15ac66ee5
Correct a bug with circularity checking in #'mapcar*, #'map, etc.
src/ChangeLog addition:
2011-02-10 Aidan Kehoe <kehoea@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@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.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Thu, 10 Feb 2011 08:46:10 +0000 |
parents | 22c4e67a2e69 |
children | 5dd1ba5e0113 |
files | src/ChangeLog src/fns.c tests/ChangeLog tests/automated/lisp-tests.el |
diffstat | 4 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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@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@parhasard.net> * alloc.c (Facons):
--- 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]); }
--- 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@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@parhasard.net> * 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)))))