diff options
| author | Karl Heuer | 1998-02-27 21:52:08 +0000 |
|---|---|---|
| committer | Karl Heuer | 1998-02-27 21:52:08 +0000 |
| commit | 33aa088183a963ce75192c46a76c3342aa0d005b (patch) | |
| tree | ae8dbb19b05fa3bcae398cad2becd9bbca4698a1 | |
| parent | e5f0841ed0215fa1b3ab5f1de533a6ffea961d0e (diff) | |
| download | emacs-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.
| -rw-r--r-- | src/fns.c | 23 |
1 files changed, 20 insertions, 3 deletions
| @@ -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) | |||
| 2100 | DEFUN ("mapconcat", Fmapconcat, Smapconcat, 3, 3, 0, | 2116 | DEFUN ("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\ |
| 2102 | In between each pair of results, stick in SEPARATOR. Thus, \" \" as\n\ | 2118 | In between each pair of results, stick in SEPARATOR. Thus, \" \" as\n\ |
| 2103 | SEPARATOR results in spaces between the values returned by FUNCTION.") | 2119 | SEPARATOR results in spaces between the values returned by FUNCTION.\n\ |
| 2120 | SEQUENCE 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.") | |||
| 2134 | DEFUN ("mapcar", Fmapcar, Smapcar, 2, 2, 0, | 2151 | DEFUN ("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\ |
| 2136 | The result is a list just as long as SEQUENCE.\n\ | 2153 | The result is a list just as long as SEQUENCE.\n\ |
| 2137 | SEQUENCE may be a list, a vector or a string.") | 2154 | SEQUENCE 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 | { |