emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 8e7b1af: Handle chars of syntax word which are also


From: Alan Mackenzie
Subject: [Emacs-diffs] master 8e7b1af: Handle chars of syntax word which are also flagged as comment delimiters
Date: Sun, 30 Oct 2016 17:31:46 +0000 (UTC)

branch: master
commit 8e7b1af1d708dcf41695cf3fbeff9d35cdb8e5b6
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    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.
---
 src/syntax.c |   23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/syntax.c b/src/syntax.c
index 667de40..d463f7e 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]