Mercurial > hg > xemacs-beta
changeset 5034:1b96882bdf37
Fix a multiple-value bug, mapcarX; correct a comment and a label name.
src/ChangeLog addition:
2010-02-19 Aidan Kehoe <kehoea@parhasard.net>
* fns.c (mapcarX):
Correct this function, discarding multiple values when one
SEQUENCE is supplied, choosing a better label name. Correct the
comment describing the SOME_OR_EVERY argument.
tests/ChangeLog addition:
2010-02-19 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-tests.el:
Check that multiple values are discarded correctly with #'mapcar
and one SEQUENCE.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Fri, 19 Feb 2010 23:21:27 +0000 |
parents | d2c3bac89ba0 |
children | b1e48555be7d |
files | src/ChangeLog src/fns.c tests/ChangeLog tests/automated/lisp-tests.el |
diffstat | 4 files changed, 28 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Fri Feb 19 09:30:45 2010 +0000 +++ b/src/ChangeLog Fri Feb 19 23:21:27 2010 +0000 @@ -1,3 +1,10 @@ +2010-02-19 Aidan Kehoe <kehoea@parhasard.net> + + * fns.c (mapcarX): + Correct this function, discarding multiple values when one + SEQUENCE is supplied, choosing a better label name. Correct the + comment describing the SOME_OR_EVERY argument. + 2010-02-12 Aidan Kehoe <kehoea@parhasard.net> * syswindows.h:
--- a/src/fns.c Fri Feb 19 09:30:45 2010 +0000 +++ b/src/fns.c Fri Feb 19 23:21:27 2010 +0000 @@ -3231,7 +3231,8 @@ taking the elements from SEQUENCES. If VALS is non-NULL, store the results into VALS, a C array of Lisp_Objects; else, if LISP_VALS is non-nil, store the results into LISP_VALS, a sequence with sufficient - room for CALL_COUNT results. Else, do not accumulate any result. + room for CALL_COUNT results (but see the documentation of SOME_OR_EVERY.) + Else, do not accumulate any result. If VALS is non-NULL, NSEQUENCES is one, and SEQUENCES[0] is a cons, mapcarX will store the elements of SEQUENCES[0] in stack and GCPRO them, @@ -3246,11 +3247,10 @@ If SOME_OR_EVERY is SOME_OR_EVERY_SOME, return the (possibly multiple) values given by FUNCTION the first time it is non-nil, and abandon the - iterations. LISP_VALS in this case must be an object created by - make_opaque_ptr, dereferenced as pointing to a Lisp object. If - SOME_OR_EVERY is SOME_OR_EVERY_EVERY, store Qnil at the Lisp_Object - pointer address provided by LISP_VALS if FUNCTION gives nil; otherwise - leave it alone. */ + iterations. LISP_VALS must be a cons, and the return value will be + stored in its car. If SOME_OR_EVERY is SOME_OR_EVERY_EVERY, store Qnil + in the car of LISP_VALS if FUNCTION gives nil; otherwise leave it + alone. */ #define SOME_OR_EVERY_NEITHER 0 #define SOME_OR_EVERY_SOME 1 @@ -3306,7 +3306,7 @@ for (i = 0; i < call_count; ++i) { args[1] = vals[i]; - vals[i] = Ffuncall (nsequences + 1, args); + vals[i] = IGNORE_MULTIPLE_VALUES (Ffuncall (nsequences + 1, args)); } } else @@ -3413,7 +3413,7 @@ break; } - goto bad_show_or_every_flag; + goto bad_some_or_every_flag; } case lrecord_type_vector: { @@ -3443,7 +3443,7 @@ (void) Faset (lisp_vals, make_int (i), called); break; } - bad_show_or_every_flag: + bad_some_or_every_flag: default: { ABORT();
--- a/tests/ChangeLog Fri Feb 19 09:30:45 2010 +0000 +++ b/tests/ChangeLog Fri Feb 19 23:21:27 2010 +0000 @@ -1,3 +1,9 @@ +2010-02-19 Aidan Kehoe <kehoea@parhasard.net> + + * automated/lisp-tests.el: + Check that multiple values are discarded correctly with #'mapcar + and one SEQUENCE. + 2010-02-05 Jerry James <james@xemacs.org> * DLL/dltest.c: Remove old test. Building and using any module now
--- a/tests/automated/lisp-tests.el Fri Feb 19 09:30:45 2010 +0000 +++ b/tests/automated/lisp-tests.el Fri Feb 19 23:21:27 2010 +0000 @@ -973,6 +973,12 @@ (car y)) x))) +(Assert-eql + (length (multiple-value-list + (car (mapcar #'(lambda (argument) (floor argument)) (list pi e))))) + 1 + "checking multiple values are correctly discarded in mapcar") + ;;----------------------------------------------------- ;; Test vector functions ;;-----------------------------------------------------