aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer1998-02-27 21:52:08 +0000
committerKarl Heuer1998-02-27 21:52:08 +0000
commit33aa088183a963ce75192c46a76c3342aa0d005b (patch)
treeae8dbb19b05fa3bcae398cad2becd9bbca4698a1 /src
parente5f0841ed0215fa1b3ab5f1de533a6ffea961d0e (diff)
downloademacs-33aa088183a963ce75192c46a76c3342aa0d005b.tar.gz
emacs-33aa088183a963ce75192c46a76c3342aa0d005b.zip
(mapcar1): Handle bool-vectors.
(Fmapconcat, Fmapcar): Doc fixes. (Flength): For char-table, length is based on max valid char code.
Diffstat (limited to 'src')
-rw-r--r--src/fns.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/fns.c b/src/fns.c
index a724fa5c0d1..49855103bcd 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -125,7 +125,9 @@ To get the number of characters, use `chars-in-string'")
125 else if (VECTORP (sequence)) 125 else if (VECTORP (sequence))
126 XSETFASTINT (val, XVECTOR (sequence)->size); 126 XSETFASTINT (val, XVECTOR (sequence)->size);
127 else if (CHAR_TABLE_P (sequence)) 127 else if (CHAR_TABLE_P (sequence))
128 XSETFASTINT (val, CHAR_TABLE_ORDINARY_SLOTS); 128 XSETFASTINT (val, (MIN_CHAR_COMPOSITION
129 + (CHAR_FIELD2_MASK | CHAR_FIELD3_MASK)
130 - 1));
129 else if (BOOL_VECTOR_P (sequence)) 131 else if (BOOL_VECTOR_P (sequence))
130 XSETFASTINT (val, XBOOL_VECTOR (sequence)->size); 132 XSETFASTINT (val, XBOOL_VECTOR (sequence)->size);
131 else if (COMPILEDP (sequence)) 133 else if (COMPILEDP (sequence))
@@ -2059,6 +2061,20 @@ mapcar1 (leni, vals, fn, seq)
2059 vals[i] = call1 (fn, dummy); 2061 vals[i] = call1 (fn, dummy);
2060 } 2062 }
2061 } 2063 }
2064 else if (BOOL_VECTOR_P (seq))
2065 {
2066 for (i = 0; i < leni; i++)
2067 {
2068 int byte;
2069 byte = XBOOL_VECTOR (seq)->data[i / BITS_PER_CHAR];
2070 if (byte & (1 << (i % BITS_PER_CHAR)))
2071 dummy = Qt;
2072 else
2073 dummy = Qnil;
2074
2075 vals[i] = call1 (fn, dummy);
2076 }
2077 }
2062 else if (STRINGP (seq) && ! STRING_MULTIBYTE (seq)) 2078 else if (STRINGP (seq) && ! STRING_MULTIBYTE (seq))
2063 { 2079 {
2064 /* Single-byte string. */ 2080 /* Single-byte string. */
@@ -2100,7 +2116,8 @@ mapcar1 (leni, vals, fn, seq)
2100DEFUN ("mapconcat", Fmapconcat, Smapconcat, 3, 3, 0, 2116DEFUN ("mapconcat", Fmapconcat, Smapconcat, 3, 3, 0,
2101 "Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.\n\ 2117 "Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.\n\
2102In between each pair of results, stick in SEPARATOR. Thus, \" \" as\n\ 2118In between each pair of results, stick in SEPARATOR. Thus, \" \" as\n\
2103SEPARATOR results in spaces between the values returned by FUNCTION.") 2119SEPARATOR results in spaces between the values returned by FUNCTION.\n\
2120SEQUENCE may be a list, a vector, a bool-vector, or a string.")
2104 (function, sequence, separator) 2121 (function, sequence, separator)
2105 Lisp_Object function, sequence, separator; 2122 Lisp_Object function, sequence, separator;
2106{ 2123{
@@ -2134,7 +2151,7 @@ SEPARATOR results in spaces between the values returned by FUNCTION.")
2134DEFUN ("mapcar", Fmapcar, Smapcar, 2, 2, 0, 2151DEFUN ("mapcar", Fmapcar, Smapcar, 2, 2, 0,
2135 "Apply FUNCTION to each element of SEQUENCE, and make a list of the results.\n\ 2152 "Apply FUNCTION to each element of SEQUENCE, and make a list of the results.\n\
2136The result is a list just as long as SEQUENCE.\n\ 2153The result is a list just as long as SEQUENCE.\n\
2137SEQUENCE may be a list, a vector or a string.") 2154SEQUENCE may be a list, a vector, a bool-vector, or a string.")
2138 (function, sequence) 2155 (function, sequence)
2139 Lisp_Object function, sequence; 2156 Lisp_Object function, sequence;
2140{ 2157{