aboutsummaryrefslogtreecommitdiffstats
path: root/src/syntax.c
diff options
context:
space:
mode:
authorPaul Eggert2016-06-07 09:34:27 -0700
committerPaul Eggert2016-06-07 09:34:27 -0700
commit2aa6b47e3e216410195cf7ec3abb5902f38082fa (patch)
tree1b993c346dd4b6e92df488e1228411a6c737fef0 /src/syntax.c
parent5bc3263303bde93db32b0799ecee0cfa9fe40e9a (diff)
parent6e3adf8a4a796cea4328a528da48fc972b3feed6 (diff)
downloademacs-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.c61
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. */)
3109DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars, 3098DEFUN ("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.
3112This includes chars with expression prefix syntax class (') and those with 3101This includes chars with expression prefix syntax class (\\=') and those with
3113the prefix syntax flag (p). */) 3102the prefix syntax flag (p). */)
3114 (void) 3103 (void)
3115{ 3104{