mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
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.
This commit is contained in:
parent
8e84823f3f
commit
702d76dbee
18
src/regex.c
18
src/regex.c
@ -5945,12 +5945,12 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
#ifdef emacs
|
||||
ssize_t offset = PTR_TO_OFFSET (d - 1);
|
||||
ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FAST (charpos);
|
||||
#endif
|
||||
GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
|
||||
s1 = SYNTAX (c1);
|
||||
#ifdef emacs
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1);
|
||||
#endif
|
||||
PREFETCH_NOLIMIT ();
|
||||
GET_CHAR_AFTER (c2, d, dummy);
|
||||
@ -5987,7 +5987,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
#ifdef emacs
|
||||
ssize_t offset = PTR_TO_OFFSET (d);
|
||||
ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FAST (charpos);
|
||||
#endif
|
||||
PREFETCH ();
|
||||
GET_CHAR_AFTER (c2, d, dummy);
|
||||
@ -6032,7 +6032,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
#ifdef emacs
|
||||
ssize_t offset = PTR_TO_OFFSET (d) - 1;
|
||||
ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FAST (charpos);
|
||||
#endif
|
||||
GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
|
||||
s1 = SYNTAX (c1);
|
||||
@ -6047,7 +6047,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
PREFETCH_NOLIMIT ();
|
||||
GET_CHAR_AFTER (c2, d, dummy);
|
||||
#ifdef emacs
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos);
|
||||
#endif
|
||||
s2 = SYNTAX (c2);
|
||||
|
||||
@ -6076,7 +6076,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
#ifdef emacs
|
||||
ssize_t offset = PTR_TO_OFFSET (d);
|
||||
ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FAST (charpos);
|
||||
#endif
|
||||
PREFETCH ();
|
||||
c2 = RE_STRING_CHAR (d, target_multibyte);
|
||||
@ -6119,7 +6119,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
#ifdef emacs
|
||||
ssize_t offset = PTR_TO_OFFSET (d) - 1;
|
||||
ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FAST (charpos);
|
||||
#endif
|
||||
GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
|
||||
s1 = SYNTAX (c1);
|
||||
@ -6134,7 +6134,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
PREFETCH_NOLIMIT ();
|
||||
c2 = RE_STRING_CHAR (d, target_multibyte);
|
||||
#ifdef emacs
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1);
|
||||
#endif
|
||||
s2 = SYNTAX (c2);
|
||||
|
||||
@ -6157,7 +6157,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1,
|
||||
{
|
||||
ssize_t offset = PTR_TO_OFFSET (d);
|
||||
ssize_t pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
|
||||
UPDATE_SYNTAX_TABLE (pos1);
|
||||
UPDATE_SYNTAX_TABLE_FAST (pos1);
|
||||
}
|
||||
#endif
|
||||
{
|
||||
|
14
src/syntax.h
14
src/syntax.h
@ -186,6 +186,13 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
|
||||
false, gl_state.object);
|
||||
}
|
||||
|
||||
INLINE void
|
||||
UPDATE_SYNTAX_TABLE_FORWARD_FAST (ptrdiff_t charpos)
|
||||
{
|
||||
if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
|
||||
update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object);
|
||||
}
|
||||
|
||||
/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
|
||||
currently good for a position after CHARPOS. */
|
||||
|
||||
@ -205,6 +212,13 @@ UPDATE_SYNTAX_TABLE (ptrdiff_t charpos)
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (charpos);
|
||||
}
|
||||
|
||||
INLINE void
|
||||
UPDATE_SYNTAX_TABLE_FAST (ptrdiff_t charpos)
|
||||
{
|
||||
UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos);
|
||||
}
|
||||
|
||||
/* Set up the buffer-global syntax table. */
|
||||
|
||||
INLINE void
|
||||
|
@ -40,9 +40,9 @@
|
||||
"and here's a closer ")
|
||||
(let ((last-command-event ?\)))
|
||||
(ert-simulate-command '(self-insert-command 1)))
|
||||
;; Syntax propertization doesn't kick in batch mode
|
||||
(when noninteractive
|
||||
(syntax-propertize (point-max)))
|
||||
;; Auto syntax propertization doesn't kick in until
|
||||
;; parse-sexp-lookup-properties is set.
|
||||
(setq-local parse-sexp-lookup-properties t)
|
||||
(backward-sexp)
|
||||
(should (string= "here's an opener "
|
||||
(buffer-substring-no-properties
|
||||
|
Loading…
Reference in New Issue
Block a user