diff options
| author | Paul Eggert | 2016-06-07 09:34:27 -0700 |
|---|---|---|
| committer | Paul Eggert | 2016-06-07 09:34:27 -0700 |
| commit | 2aa6b47e3e216410195cf7ec3abb5902f38082fa (patch) | |
| tree | 1b993c346dd4b6e92df488e1228411a6c737fef0 /src/syntax.c | |
| parent | 5bc3263303bde93db32b0799ecee0cfa9fe40e9a (diff) | |
| parent | 6e3adf8a4a796cea4328a528da48fc972b3feed6 (diff) | |
| download | emacs-2aa6b47e3e216410195cf7ec3abb5902f38082fa.tar.gz emacs-2aa6b47e3e216410195cf7ec3abb5902f38082fa.zip | |
Merge from origin/emacs-25
6e3adf8 Fix crash in syntax.c after GC
973ce5a Improve squiggly heredoc support in non-SMIE Ruby mode
9d5cceb Fix doc string quoting
0b33a23 Fix mouse dragging of vertical dividers with scroll bars on l...
a5d05f4 * etc/PROBLEMS: Mention the link-time problems on FreeBSD 11.
Diffstat (limited to 'src/syntax.c')
| -rw-r--r-- | src/syntax.c | 61 |
1 files changed, 25 insertions, 36 deletions
diff --git a/src/syntax.c b/src/syntax.c index 1c3f644aec5..78c7de9c65b 100644 --- a/src/syntax.c +++ b/src/syntax.c | |||
| @@ -2182,63 +2182,51 @@ skip_syntaxes (bool forwardp, Lisp_Object string, Lisp_Object lim) | |||
| 2182 | ptrdiff_t start_point = PT; | 2182 | ptrdiff_t start_point = PT; |
| 2183 | ptrdiff_t pos = PT; | 2183 | ptrdiff_t pos = PT; |
| 2184 | ptrdiff_t pos_byte = PT_BYTE; | 2184 | ptrdiff_t pos_byte = PT_BYTE; |
| 2185 | unsigned char *p = PT_ADDR, *endp, *stop; | 2185 | unsigned char *p, *endp, *stop; |
| 2186 | |||
| 2187 | if (forwardp) | ||
| 2188 | { | ||
| 2189 | endp = (XINT (lim) == GPT) ? GPT_ADDR : CHAR_POS_ADDR (XINT (lim)); | ||
| 2190 | stop = (pos < GPT && GPT < XINT (lim)) ? GPT_ADDR : endp; | ||
| 2191 | } | ||
| 2192 | else | ||
| 2193 | { | ||
| 2194 | endp = CHAR_POS_ADDR (XINT (lim)); | ||
| 2195 | stop = (pos >= GPT && GPT > XINT (lim)) ? GAP_END_ADDR : endp; | ||
| 2196 | } | ||
| 2197 | 2186 | ||
| 2198 | immediate_quit = 1; | 2187 | immediate_quit = 1; |
| 2199 | SETUP_SYNTAX_TABLE (pos, forwardp ? 1 : -1); | 2188 | SETUP_SYNTAX_TABLE (pos, forwardp ? 1 : -1); |
| 2189 | |||
| 2200 | if (forwardp) | 2190 | if (forwardp) |
| 2201 | { | 2191 | { |
| 2202 | if (multibyte) | 2192 | while (true) |
| 2203 | { | 2193 | { |
| 2204 | while (1) | 2194 | p = BYTE_POS_ADDR (pos_byte); |
| 2195 | endp = XINT (lim) == GPT ? GPT_ADDR : CHAR_POS_ADDR (XINT (lim)); | ||
| 2196 | stop = pos < GPT && GPT < XINT (lim) ? GPT_ADDR : endp; | ||
| 2197 | |||
| 2198 | do | ||
| 2205 | { | 2199 | { |
| 2206 | int nbytes; | 2200 | int nbytes; |
| 2207 | 2201 | ||
| 2208 | if (p >= stop) | 2202 | if (p >= stop) |
| 2209 | { | 2203 | { |
| 2210 | if (p >= endp) | 2204 | if (p >= endp) |
| 2211 | break; | 2205 | goto done; |
| 2212 | p = GAP_END_ADDR; | 2206 | p = GAP_END_ADDR; |
| 2213 | stop = endp; | 2207 | stop = endp; |
| 2214 | } | 2208 | } |
| 2215 | c = STRING_CHAR_AND_LENGTH (p, nbytes); | 2209 | if (multibyte) |
| 2210 | c = STRING_CHAR_AND_LENGTH (p, nbytes); | ||
| 2211 | else | ||
| 2212 | c = *p, nbytes = 1; | ||
| 2216 | if (! fastmap[SYNTAX (c)]) | 2213 | if (! fastmap[SYNTAX (c)]) |
| 2217 | break; | 2214 | goto done; |
| 2218 | p += nbytes, pos++, pos_byte += nbytes; | 2215 | p += nbytes, pos++, pos_byte += nbytes; |
| 2219 | UPDATE_SYNTAX_TABLE_FORWARD (pos); | ||
| 2220 | } | ||
| 2221 | } | ||
| 2222 | else | ||
| 2223 | { | ||
| 2224 | while (1) | ||
| 2225 | { | ||
| 2226 | if (p >= stop) | ||
| 2227 | { | ||
| 2228 | if (p >= endp) | ||
| 2229 | break; | ||
| 2230 | p = GAP_END_ADDR; | ||
| 2231 | stop = endp; | ||
| 2232 | } | ||
| 2233 | if (! fastmap[SYNTAX (*p)]) | ||
| 2234 | break; | ||
| 2235 | p++, pos++, pos_byte++; | ||
| 2236 | UPDATE_SYNTAX_TABLE_FORWARD (pos); | ||
| 2237 | } | 2216 | } |
| 2217 | while (!parse_sexp_lookup_properties | ||
| 2218 | || pos < gl_state.e_property); | ||
| 2219 | |||
| 2220 | update_syntax_table_forward (pos + gl_state.offset, | ||
| 2221 | false, gl_state.object); | ||
| 2238 | } | 2222 | } |
| 2239 | } | 2223 | } |
| 2240 | else | 2224 | else |
| 2241 | { | 2225 | { |
| 2226 | p = BYTE_POS_ADDR (pos_byte); | ||
| 2227 | endp = CHAR_POS_ADDR (XINT (lim)); | ||
| 2228 | stop = pos >= GPT && GPT > XINT (lim) ? GAP_END_ADDR : endp; | ||
| 2229 | |||
| 2242 | if (multibyte) | 2230 | if (multibyte) |
| 2243 | { | 2231 | { |
| 2244 | while (1) | 2232 | while (1) |
| @@ -2280,6 +2268,7 @@ skip_syntaxes (bool forwardp, Lisp_Object string, Lisp_Object lim) | |||
| 2280 | } | 2268 | } |
| 2281 | } | 2269 | } |
| 2282 | 2270 | ||
| 2271 | done: | ||
| 2283 | SET_PT_BOTH (pos, pos_byte); | 2272 | SET_PT_BOTH (pos, pos_byte); |
| 2284 | immediate_quit = 0; | 2273 | immediate_quit = 0; |
| 2285 | 2274 | ||
| @@ -3109,7 +3098,7 @@ but before count is used up, nil is returned. */) | |||
| 3109 | DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars, | 3098 | DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars, |
| 3110 | 0, 0, 0, | 3099 | 0, 0, 0, |
| 3111 | doc: /* Move point backward over any number of chars with prefix syntax. | 3100 | doc: /* Move point backward over any number of chars with prefix syntax. |
| 3112 | This includes chars with expression prefix syntax class (') and those with | 3101 | This includes chars with expression prefix syntax class (\\=') and those with |
| 3113 | the prefix syntax flag (p). */) | 3102 | the prefix syntax flag (p). */) |
| 3114 | (void) | 3103 | (void) |
| 3115 | { | 3104 | { |