comparison src/ChangeLog @ 4995:8431b52e43b1

Move the various map* functions to C; add #'map-into. src/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> Move #'mapcar*, #'mapcan, #'mapc, #'map, #'mapl, #'mapcon to C; extend #'mapvector, #'mapconcat, #'mapcar to support more SEQUENCES; have them all error with circular lists. * fns.c (Fsubseq): Call CHECK_SEQUENCE here; Flength can return from the debugger if it errors with a non-sequence, leading to a crash in Fsubseq if sequence really is *not* a sequence. (mapcarX): Rename mapcar1 to mapcarX; rework it comprehensively to take an optional lisp output argument, and a varying number of sequences. Special-case a single list argument, as we used to, saving its elements in the stack space for the results before calling FUNCTION, so FUNCTION can corrupt the list all it wants. dead_wrong_type_argument() in the other cases if we encounter a non-cons where we expected a cons. (Fmapconcat): Accept further SEQUENCES after separator here. Special-case the idiom (mapconcat 'identity SEQUENCE), don't even funcall. (FmapcarX): Rename this from Fmapcar. Accept optional SEQUENCES. (Fmapvector): Accept optional SEQUENCES. (Fmapcan, Fmapc, Fmap): Move these here from cl-extra.el. (Fmap_into): New function, as specified by Common Lisp. (maplist): New function, the guts of the implementation of Fmaplist and Fmapl. (Fmaplist, Fmapl, Fmapcon): Move these from cl-extra.el. (syms_of_fns): Add a few needed symbols here, for the type tests used by #'map. Add the new subrs, with aliases for #'mapc-internal and #'mapcar. * general-slots.h: Declare Qcoerce here, now it's used in both indent.c and fns.c * indent.c (syms_of_indent): Qcoerce is gone from here. * lisp.h: Add ARRAYP(), SEQUENCEP(), and the corresponding CHECK_* macros. Declare Fbit_vector, Fstring, FmapcarX, now other files need to use them. * data.c (Farrayp, Fsequencep): Use ARRAYP and SEQUENCEP, just added to lisp.h * buffer.c (Fbuffer_list): Now Fmapcar has been renamed FmapcarX and takes MANY arguments, update this function to reflect that. lisp/ChangeLog addition: 2010-01-31 Aidan Kehoe <kehoea@parhasard.net> * cl.el (mapcar*): Delete; this is now in fns.c. Use #'mapc, not #'mapc-internal in a couple of places. * cl-macs.el (mapc, mapcar*, map): Delete these compiler macros now the corresponding functions are in fns.c; there's no run-time advantage to the macros. * cl-extra.el (coerce): Extend the possible conversions here a little; it's not remotely comprehensive yet, though it does allow running slightly more Common Lisp code than previously. (cl-mapcar-many): Delete. (map, maplist, mapc, mapl, mapcan, mapcon): Move these to fns.c. * bytecomp.el (byte-compile-maybe-mapc): Use #'mapc itself, not #'mapc-internal, now the former is in C. (mapcar*): Use #'byte-compile-maybe-mapc as this function's byte-compile method, now a #'mapc that can take more than one sequence is in C. * obsolete.el (cl-mapc): Move this compatibility alias to this file. * update-elc.el (do-autoload-commands): Use #'mapc, not #'mapc-internal here.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 31 Jan 2010 18:29:48 +0000
parents e91e3e353805
children c17c857e20bf
comparison
equal deleted inserted replaced
4904:e91e3e353805 4995:8431b52e43b1
33 * search.c (search_buffer): 33 * search.c (search_buffer):
34 Don't use Boyer-Moore for case-insensitive search if the search 34 Don't use Boyer-Moore for case-insensitive search if the search
35 pattern contains repeated Ibytes and the corresponding character 35 pattern contains repeated Ibytes and the corresponding character
36 has case information (or, equivalently, if one of its case 36 has case information (or, equivalently, if one of its case
37 equivalents would contain repeated Ibytes). 37 equivalents would contain repeated Ibytes).
38
39 2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
40
41 Move #'mapcar*, #'mapcan, #'mapc, #'map, #'mapl, #'mapcon to C;
42 extend #'mapvector, #'mapconcat, #'mapcar to support more
43 SEQUENCES; have them all error with circular lists.
44
45 * fns.c (Fsubseq): Call CHECK_SEQUENCE here; Flength can return
46 from the debugger if it errors with a non-sequence, leading to a
47 crash in Fsubseq if sequence really is *not* a sequence.
48 (mapcarX): Rename mapcar1 to mapcarX; rework it comprehensively to
49 take an optional lisp output argument, and a varying number of
50 sequences.
51 Special-case a single list argument, as we used to, saving its
52 elements in the stack space for the results before calling
53 FUNCTION, so FUNCTION can corrupt the list all it
54 wants. dead_wrong_type_argument() in the other cases if we
55 encounter a non-cons where we expected a cons.
56 (Fmapconcat):
57 Accept further SEQUENCES after separator here. Special-case
58 the idiom (mapconcat 'identity SEQUENCE), don't even funcall.
59 (FmapcarX): Rename this from Fmapcar. Accept optional SEQUENCES.
60 (Fmapvector): Accept optional SEQUENCES.
61 (Fmapcan, Fmapc, Fmap): Move these here from cl-extra.el.
62 (Fmap_into): New function, as specified by Common Lisp.
63 (maplist): New function, the guts of the implementation of
64 Fmaplist and Fmapl.
65 (Fmaplist, Fmapl, Fmapcon): Move these from cl-extra.el.
66 (syms_of_fns):
67 Add a few needed symbols here, for the type tests
68 used by #'map. Add the new subrs, with aliases for #'mapc-internal
69 and #'mapcar.
70
71 * general-slots.h: Declare Qcoerce here, now it's used in both
72 indent.c and fns.c
73 * indent.c (syms_of_indent): Qcoerce is gone from here.
74
75 * lisp.h: Add ARRAYP(), SEQUENCEP(), and the corresponding CHECK_*
76 macros. Declare Fbit_vector, Fstring, FmapcarX, now other files
77 need to use them.
78 * data.c (Farrayp, Fsequencep): Use ARRAYP and SEQUENCEP, just
79 added to lisp.h
80
81 * buffer.c (Fbuffer_list): Now Fmapcar has been renamed FmapcarX
82 and takes MANY arguments, update this function to reflect that.
38 83
39 2010-01-28 Jerry James <james@xemacs.org> 84 2010-01-28 Jerry James <james@xemacs.org>
40 85
41 * Makefile.in.in: Remove internationalization rules, since the 86 * Makefile.in.in: Remove internationalization rules, since the
42 lib-src programs they invoke are now gone. 87 lib-src programs they invoke are now gone.