diff options
| author | Stefan Monnier | 2015-11-21 22:05:28 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2015-11-21 22:05:28 -0500 |
| commit | 702d76dbee8447f56d01009142983f09e7507d6f (patch) | |
| tree | c4bb2e544ae9e87ff14f1254d64537b92868384b /src | |
| parent | 8e84823f3f06714d0668060d62456cf7e3100e6c (diff) | |
| download | emacs-702d76dbee8447f56d01009142983f09e7507d6f.tar.gz emacs-702d76dbee8447f56d01009142983f09e7507d6f.zip | |
Unrevert most of regexp reentrancy abort patch
The problem was in:
* src/syntax.c (update_syntax_table_forward): Propertize even when truncated
which is hence not unreverted.
The rest is:
* src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
(UPDATE_SYNTAX_TABLE_FAST): Re-introduce.
All callers in regex.c changed back to the _FAST versions.
* test/automated/message-mode-tests.el: Tweak the test to rely on auto
propertization in backward-sexp.
Diffstat (limited to 'src')
| -rw-r--r-- | src/regex.c | 18 | ||||
| -rw-r--r-- | src/syntax.h | 14 |
2 files changed, 23 insertions, 9 deletions
diff --git a/src/regex.c b/src/regex.c index dcf286454b3..4e00fd15dc9 100644 --- a/src/regex.c +++ b/src/regex.c | |||
| @@ -5945,12 +5945,12 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 5945 | #ifdef emacs | 5945 | #ifdef emacs |
| 5946 | ssize_t offset = PTR_TO_OFFSET (d - 1); | 5946 | ssize_t offset = PTR_TO_OFFSET (d - 1); |
| 5947 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 5947 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 5948 | UPDATE_SYNTAX_TABLE (charpos); | 5948 | UPDATE_SYNTAX_TABLE_FAST (charpos); |
| 5949 | #endif | 5949 | #endif |
| 5950 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); | 5950 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); |
| 5951 | s1 = SYNTAX (c1); | 5951 | s1 = SYNTAX (c1); |
| 5952 | #ifdef emacs | 5952 | #ifdef emacs |
| 5953 | UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1); | 5953 | UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1); |
| 5954 | #endif | 5954 | #endif |
| 5955 | PREFETCH_NOLIMIT (); | 5955 | PREFETCH_NOLIMIT (); |
| 5956 | GET_CHAR_AFTER (c2, d, dummy); | 5956 | GET_CHAR_AFTER (c2, d, dummy); |
| @@ -5987,7 +5987,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 5987 | #ifdef emacs | 5987 | #ifdef emacs |
| 5988 | ssize_t offset = PTR_TO_OFFSET (d); | 5988 | ssize_t offset = PTR_TO_OFFSET (d); |
| 5989 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 5989 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 5990 | UPDATE_SYNTAX_TABLE (charpos); | 5990 | UPDATE_SYNTAX_TABLE_FAST (charpos); |
| 5991 | #endif | 5991 | #endif |
| 5992 | PREFETCH (); | 5992 | PREFETCH (); |
| 5993 | GET_CHAR_AFTER (c2, d, dummy); | 5993 | GET_CHAR_AFTER (c2, d, dummy); |
| @@ -6032,7 +6032,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6032 | #ifdef emacs | 6032 | #ifdef emacs |
| 6033 | ssize_t offset = PTR_TO_OFFSET (d) - 1; | 6033 | ssize_t offset = PTR_TO_OFFSET (d) - 1; |
| 6034 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 6034 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 6035 | UPDATE_SYNTAX_TABLE (charpos); | 6035 | UPDATE_SYNTAX_TABLE_FAST (charpos); |
| 6036 | #endif | 6036 | #endif |
| 6037 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); | 6037 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); |
| 6038 | s1 = SYNTAX (c1); | 6038 | s1 = SYNTAX (c1); |
| @@ -6047,7 +6047,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6047 | PREFETCH_NOLIMIT (); | 6047 | PREFETCH_NOLIMIT (); |
| 6048 | GET_CHAR_AFTER (c2, d, dummy); | 6048 | GET_CHAR_AFTER (c2, d, dummy); |
| 6049 | #ifdef emacs | 6049 | #ifdef emacs |
| 6050 | UPDATE_SYNTAX_TABLE_FORWARD (charpos); | 6050 | UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos); |
| 6051 | #endif | 6051 | #endif |
| 6052 | s2 = SYNTAX (c2); | 6052 | s2 = SYNTAX (c2); |
| 6053 | 6053 | ||
| @@ -6076,7 +6076,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6076 | #ifdef emacs | 6076 | #ifdef emacs |
| 6077 | ssize_t offset = PTR_TO_OFFSET (d); | 6077 | ssize_t offset = PTR_TO_OFFSET (d); |
| 6078 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 6078 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 6079 | UPDATE_SYNTAX_TABLE (charpos); | 6079 | UPDATE_SYNTAX_TABLE_FAST (charpos); |
| 6080 | #endif | 6080 | #endif |
| 6081 | PREFETCH (); | 6081 | PREFETCH (); |
| 6082 | c2 = RE_STRING_CHAR (d, target_multibyte); | 6082 | c2 = RE_STRING_CHAR (d, target_multibyte); |
| @@ -6119,7 +6119,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6119 | #ifdef emacs | 6119 | #ifdef emacs |
| 6120 | ssize_t offset = PTR_TO_OFFSET (d) - 1; | 6120 | ssize_t offset = PTR_TO_OFFSET (d) - 1; |
| 6121 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 6121 | ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 6122 | UPDATE_SYNTAX_TABLE (charpos); | 6122 | UPDATE_SYNTAX_TABLE_FAST (charpos); |
| 6123 | #endif | 6123 | #endif |
| 6124 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); | 6124 | GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2); |
| 6125 | s1 = SYNTAX (c1); | 6125 | s1 = SYNTAX (c1); |
| @@ -6134,7 +6134,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6134 | PREFETCH_NOLIMIT (); | 6134 | PREFETCH_NOLIMIT (); |
| 6135 | c2 = RE_STRING_CHAR (d, target_multibyte); | 6135 | c2 = RE_STRING_CHAR (d, target_multibyte); |
| 6136 | #ifdef emacs | 6136 | #ifdef emacs |
| 6137 | UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1); | 6137 | UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1); |
| 6138 | #endif | 6138 | #endif |
| 6139 | s2 = SYNTAX (c2); | 6139 | s2 = SYNTAX (c2); |
| 6140 | 6140 | ||
| @@ -6157,7 +6157,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, | |||
| 6157 | { | 6157 | { |
| 6158 | ssize_t offset = PTR_TO_OFFSET (d); | 6158 | ssize_t offset = PTR_TO_OFFSET (d); |
| 6159 | ssize_t pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset); | 6159 | ssize_t pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset); |
| 6160 | UPDATE_SYNTAX_TABLE (pos1); | 6160 | UPDATE_SYNTAX_TABLE_FAST (pos1); |
| 6161 | } | 6161 | } |
| 6162 | #endif | 6162 | #endif |
| 6163 | { | 6163 | { |
diff --git a/src/syntax.h b/src/syntax.h index 06ce0ec55df..eb154e088c9 100644 --- a/src/syntax.h +++ b/src/syntax.h | |||
| @@ -186,6 +186,13 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos) | |||
| 186 | false, gl_state.object); | 186 | false, gl_state.object); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | INLINE void | ||
| 190 | UPDATE_SYNTAX_TABLE_FORWARD_FAST (ptrdiff_t charpos) | ||
| 191 | { | ||
| 192 | if (parse_sexp_lookup_properties && charpos >= gl_state.e_property) | ||
| 193 | update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object); | ||
| 194 | } | ||
| 195 | |||
| 189 | /* Make syntax table state (gl_state) good for CHARPOS, assuming it is | 196 | /* Make syntax table state (gl_state) good for CHARPOS, assuming it is |
| 190 | currently good for a position after CHARPOS. */ | 197 | currently good for a position after CHARPOS. */ |
| 191 | 198 | ||
| @@ -205,6 +212,13 @@ UPDATE_SYNTAX_TABLE (ptrdiff_t charpos) | |||
| 205 | UPDATE_SYNTAX_TABLE_FORWARD (charpos); | 212 | UPDATE_SYNTAX_TABLE_FORWARD (charpos); |
| 206 | } | 213 | } |
| 207 | 214 | ||
| 215 | INLINE void | ||
| 216 | UPDATE_SYNTAX_TABLE_FAST (ptrdiff_t charpos) | ||
| 217 | { | ||
| 218 | UPDATE_SYNTAX_TABLE_BACKWARD (charpos); | ||
| 219 | UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos); | ||
| 220 | } | ||
| 221 | |||
| 208 | /* Set up the buffer-global syntax table. */ | 222 | /* Set up the buffer-global syntax table. */ |
| 209 | 223 | ||
| 210 | INLINE void | 224 | INLINE void |