Commit 8e7b1af1 authored by Alan Mackenzie's avatar Alan Mackenzie

Handle chars of syntax word which are also flagged as comment delimiters

src/syntax.c (scan_sexps_forward): When chars of syntax word are also flagged
as the start/end of two char comment delimiters, recognize a comment delimiter
in preference to a portion of a word.  This fixes bug #24767.
parent a37eba84
......@@ -3124,6 +3124,7 @@ scan_sexps_forward (struct lisp_parse_state *state,
ptrdiff_t prev_from; /* Keep one character before FROM. */
ptrdiff_t prev_from_byte;
int prev_from_syntax, prev_prev_from_syntax;
int syntax;
bool boundary_stop = commentstop == -1;
bool nofence;
bool found;
......@@ -3191,8 +3192,6 @@ do { prev_from = from; \
while (from < end)
{
int syntax;
if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
&& (c1 = FETCH_CHAR (from_byte),
syntax = SYNTAX_WITH_FLAGS (c1),
......@@ -3258,7 +3257,24 @@ do { prev_from = from; \
while (from < end)
{
int symchar = FETCH_CHAR_AS_MULTIBYTE (from_byte);
switch (SYNTAX (symchar))
if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
&& (syntax = SYNTAX_WITH_FLAGS (symchar),
SYNTAX_FLAGS_COMSTART_SECOND (syntax)))
{
state->comstyle
= SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax);
comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax)
| SYNTAX_FLAGS_COMMENT_NESTED (syntax));
state->incomment = comnested ? 1 : -1;
state->comstr_start = prev_from;
INC_FROM;
prev_from_syntax = Smax;
code = Scomment;
goto atcomment;
}
switch (SYNTAX (symchar))
{
case Scharquote:
case Sescape:
......@@ -3280,6 +3296,7 @@ do { prev_from = from; \
case Scomment_fence: /* Can't happen because it's handled above. */
case Scomment:
atcomment:
if (commentstop || boundary_stop) goto done;
startincomment:
/* The (from == BEGV) test was to enter the loop in the middle so
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment