diff options
Diffstat (limited to 'src/syntax.c')
| -rw-r--r-- | src/syntax.c | 59 |
1 files changed, 24 insertions, 35 deletions
diff --git a/src/syntax.c b/src/syntax.c index 16b7fabe938..6f536846466 100644 --- a/src/syntax.c +++ b/src/syntax.c | |||
| @@ -2171,63 +2171,51 @@ skip_syntaxes (bool forwardp, Lisp_Object string, Lisp_Object lim) | |||
| 2171 | ptrdiff_t start_point = PT; | 2171 | ptrdiff_t start_point = PT; |
| 2172 | ptrdiff_t pos = PT; | 2172 | ptrdiff_t pos = PT; |
| 2173 | ptrdiff_t pos_byte = PT_BYTE; | 2173 | ptrdiff_t pos_byte = PT_BYTE; |
| 2174 | unsigned char *p = PT_ADDR, *endp, *stop; | 2174 | unsigned char *p, *endp, *stop; |
| 2175 | |||
| 2176 | if (forwardp) | ||
| 2177 | { | ||
| 2178 | endp = (XINT (lim) == GPT) ? GPT_ADDR : CHAR_POS_ADDR (XINT (lim)); | ||
| 2179 | stop = (pos < GPT && GPT < XINT (lim)) ? GPT_ADDR : endp; | ||
| 2180 | } | ||
| 2181 | else | ||
| 2182 | { | ||
| 2183 | endp = CHAR_POS_ADDR (XINT (lim)); | ||
| 2184 | stop = (pos >= GPT && GPT > XINT (lim)) ? GAP_END_ADDR : endp; | ||
| 2185 | } | ||
| 2186 | 2175 | ||
| 2187 | immediate_quit = 1; | 2176 | immediate_quit = 1; |
| 2188 | SETUP_SYNTAX_TABLE (pos, forwardp ? 1 : -1); | 2177 | SETUP_SYNTAX_TABLE (pos, forwardp ? 1 : -1); |
| 2178 | |||
| 2189 | if (forwardp) | 2179 | if (forwardp) |
| 2190 | { | 2180 | { |
| 2191 | if (multibyte) | 2181 | while (true) |
| 2192 | { | 2182 | { |
| 2193 | while (1) | 2183 | p = BYTE_POS_ADDR (pos_byte); |
| 2184 | endp = XINT (lim) == GPT ? GPT_ADDR : CHAR_POS_ADDR (XINT (lim)); | ||
| 2185 | stop = pos < GPT && GPT < XINT (lim) ? GPT_ADDR : endp; | ||
| 2186 | |||
| 2187 | do | ||
| 2194 | { | 2188 | { |
| 2195 | int nbytes; | 2189 | int nbytes; |
| 2196 | 2190 | ||
| 2197 | if (p >= stop) | 2191 | if (p >= stop) |
| 2198 | { | 2192 | { |
| 2199 | if (p >= endp) | 2193 | if (p >= endp) |
| 2200 | break; | 2194 | goto done; |
| 2201 | p = GAP_END_ADDR; | 2195 | p = GAP_END_ADDR; |
| 2202 | stop = endp; | 2196 | stop = endp; |
| 2203 | } | 2197 | } |
| 2204 | c = STRING_CHAR_AND_LENGTH (p, nbytes); | 2198 | if (multibyte) |
| 2199 | c = STRING_CHAR_AND_LENGTH (p, nbytes); | ||
| 2200 | else | ||
| 2201 | c = *p, nbytes = 1; | ||
| 2205 | if (! fastmap[SYNTAX (c)]) | 2202 | if (! fastmap[SYNTAX (c)]) |
| 2206 | break; | 2203 | goto done; |
| 2207 | p += nbytes, pos++, pos_byte += nbytes; | 2204 | p += nbytes, pos++, pos_byte += nbytes; |
| 2208 | UPDATE_SYNTAX_TABLE_FORWARD (pos); | ||
| 2209 | } | ||
| 2210 | } | ||
| 2211 | else | ||
| 2212 | { | ||
| 2213 | while (1) | ||
| 2214 | { | ||
| 2215 | if (p >= stop) | ||
| 2216 | { | ||
| 2217 | if (p >= endp) | ||
| 2218 | break; | ||
| 2219 | p = GAP_END_ADDR; | ||
| 2220 | stop = endp; | ||
| 2221 | } | ||
| 2222 | if (! fastmap[SYNTAX (*p)]) | ||
| 2223 | break; | ||
| 2224 | p++, pos++, pos_byte++; | ||
| 2225 | UPDATE_SYNTAX_TABLE_FORWARD (pos); | ||
| 2226 | } | 2205 | } |
| 2206 | while (!parse_sexp_lookup_properties | ||
| 2207 | || pos < gl_state.e_property); | ||
| 2208 | |||
| 2209 | update_syntax_table_forward (pos + gl_state.offset, | ||
| 2210 | false, gl_state.object); | ||
| 2227 | } | 2211 | } |
| 2228 | } | 2212 | } |
| 2229 | else | 2213 | else |
| 2230 | { | 2214 | { |
| 2215 | p = BYTE_POS_ADDR (pos_byte); | ||
| 2216 | endp = CHAR_POS_ADDR (XINT (lim)); | ||
| 2217 | stop = pos >= GPT && GPT > XINT (lim) ? GAP_END_ADDR : endp; | ||
| 2218 | |||
| 2231 | if (multibyte) | 2219 | if (multibyte) |
| 2232 | { | 2220 | { |
| 2233 | while (1) | 2221 | while (1) |
| @@ -2269,6 +2257,7 @@ skip_syntaxes (bool forwardp, Lisp_Object string, Lisp_Object lim) | |||
| 2269 | } | 2257 | } |
| 2270 | } | 2258 | } |
| 2271 | 2259 | ||
| 2260 | done: | ||
| 2272 | SET_PT_BOTH (pos, pos_byte); | 2261 | SET_PT_BOTH (pos, pos_byte); |
| 2273 | immediate_quit = 0; | 2262 | immediate_quit = 0; |
| 2274 | 2263 | ||