# HG changeset patch # User Aidan Kehoe # 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 * 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 * 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 + + * 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 * 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 + + * 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 * 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)))))