(calendar-mode-map): Rename `holidays' menu to `Holidays'.
[bpt/emacs.git] / src / syntax.c
index 4ac1c8d..5d67d11 100644 (file)
@@ -1065,6 +1065,7 @@ int parse_sexp_ignore_comments;
    If that many words cannot be found before the end of the buffer, return 0.
    COUNT negative means scan backward and stop at word beginning.  */
 
+int
 scan_words (from, count)
      register int from, count;
 {
@@ -1768,6 +1769,7 @@ scan_lists (from, count, depth, sexpflag)
   int found;
   int from_byte = CHAR_TO_BYTE (from);
   int out_bytepos, out_charpos;
+  int temp;
 
   if (depth > 0) min_depth = 0;
 
@@ -1818,7 +1820,10 @@ scan_lists (from, count, depth, sexpflag)
              while (from < stop)
                {
                  UPDATE_SYNTAX_TABLE_FORWARD (from);
-                 switch (SWITCH_ENUM_CAST (SYNTAX (FETCH_CHAR (from_byte))))
+
+                 /* Some compilers can't handle this inside the switch.  */
+                 temp = SYNTAX (FETCH_CHAR (from_byte));
+                 switch (temp)
                    {
                    case Scharquote:
                    case Sescape:
@@ -1912,7 +1917,10 @@ scan_lists (from, count, depth, sexpflag)
                      ? (FETCH_CHAR (from_byte) == stringterm)
                      : SYNTAX (FETCH_CHAR (from_byte)) == Sstring_fence) 
                    break;
-                 switch (SWITCH_ENUM_CAST (SYNTAX (FETCH_CHAR (from_byte))))
+
+                 /* Some compilers can't handle this inside the switch.  */
+                 temp = SYNTAX (FETCH_CHAR (from_byte));
+                 switch (temp)
                    {
                    case Scharquote:
                    case Sescape:
@@ -2174,12 +2182,16 @@ This includes chars with \"quote\" or \"prefix\" syntax (' or p).")
 
   DEC_BOTH (pos, pos_byte);
 
-  while (pos + 1 > beg && !char_quoted (pos, pos_byte)
+  while (!char_quoted (pos, pos_byte)
         /* Previous statement updates syntax table.  */
         && ((c = FETCH_CHAR (pos_byte), SYNTAX (c) == Squote)
             || SYNTAX_PREFIX (c)))
     {
-      DEC_BOTH (pos, pos_byte);
+      opoint = pos;
+      opoint_byte = pos_byte;
+
+      if (pos + 1 > beg)
+       DEC_BOTH (pos, pos_byte);
     }
 
   SET_PT_BOTH (opoint, opoint_byte);
@@ -2220,8 +2232,10 @@ scan_sexps_forward (stateptr, from, from_byte, end, targetdepth,
   Lisp_Object tem;
   int prev_from;               /* Keep one character before FROM.  */
   int prev_from_byte;
+  int prev_from_syntax;
   int boundary_stop = commentstop == -1;
   int nofence;
+  int temp;
 
   prev_from = from;
   prev_from_byte = from_byte;
@@ -2232,14 +2246,15 @@ scan_sexps_forward (stateptr, from, from_byte, end, targetdepth,
 #define INC_FROM                               \
 do { prev_from = from;                         \
      prev_from_byte = from_byte;               \
+     prev_from_syntax                          \
+       = SYNTAX_WITH_FLAGS (FETCH_CHAR (prev_from_byte)); \
      INC_BOTH (from, from_byte);               \
+     UPDATE_SYNTAX_TABLE_FORWARD (from);       \
   } while (0)
 
   immediate_quit = 1;
   QUIT;
 
-  SETUP_SYNTAX_TABLE (from, 1);
-
   if (NILP (oldstate))
     {
       depth = 0;
@@ -2302,11 +2317,15 @@ do { prev_from = from;                          \
     }
   if (start_quoted) goto startquoted;
 
+
+  SETUP_SYNTAX_TABLE (prev_from, 1);
+  prev_from_syntax = SYNTAX_WITH_FLAGS (FETCH_CHAR (prev_from_byte));
+  UPDATE_SYNTAX_TABLE_FORWARD (from);
+
   while (from < end)
     {
-      UPDATE_SYNTAX_TABLE_FORWARD (from);
-      code = SYNTAX (FETCH_CHAR (from_byte));
       INC_FROM;
+      code = prev_from_syntax & 0xff;
 
       if (code == Scomment)
        state.comstr_start = prev_from;
@@ -2319,13 +2338,14 @@ do { prev_from = from;                          \
                             ? ST_COMMENT_STYLE 
                             : SYNTAX_COMMENT_STYLE (FETCH_CHAR (from_byte)));
          state.comstr_start = prev_from;
-         if (code != Scomment_fence) INC_FROM;
+         if (code != Scomment_fence)
+           INC_FROM;
          code = Scomment;
        }
      else if (from < end)
-       if (SYNTAX_COMSTART_FIRST (FETCH_CHAR (prev_from_byte)))
+       if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax))
          if (SYNTAX_COMSTART_SECOND (FETCH_CHAR (from_byte)))
-           /* Duplicate code to avoid a very complex if-expression
+           /* Duplicate code to avoid a complex if-expression
               which causes trouble for the SGI compiler.  */
            {
              /* Record the comment style we have entered so that only
@@ -2335,11 +2355,12 @@ do { prev_from = from;                          \
                                 ? ST_COMMENT_STYLE 
                                 : SYNTAX_COMMENT_STYLE (FETCH_CHAR (from_byte)));
              state.comstr_start = prev_from;
-             if (code != Scomment_fence) INC_FROM;
+             if (code != Scomment_fence)
+               INC_FROM;
              code = Scomment;
            }
 
-      if (SYNTAX_PREFIX (FETCH_CHAR (prev_from_byte)))
+      if (SYNTAX_FLAGS_PREFIX (prev_from_syntax))
        continue;
       switch (SWITCH_ENUM_CAST (code))
        {
@@ -2359,8 +2380,9 @@ do { prev_from = from;                            \
        symstarted:
          while (from < end)
            {
-             UPDATE_SYNTAX_TABLE_FORWARD (from);
-             switch (SWITCH_ENUM_CAST (SYNTAX (FETCH_CHAR (from_byte))))
+             /* Some compilers can't handle this inside the switch.  */
+             temp = SYNTAX (FETCH_CHAR (from_byte));
+             switch (temp)
                {
                case Scharquote:
                case Sescape:
@@ -2387,7 +2409,6 @@ do { prev_from = from;                            \
            {
              /* Enter the loop in the middle so that we find
                 a 2-char comment ender if we start in the middle of it.  */
-             prev = FETCH_CHAR (prev_from_byte);
              goto startincomment_1;
            }
          /* At beginning of buffer, enter the loop the ordinary way.  */
@@ -2401,7 +2422,6 @@ do { prev_from = from;                            \
          while (1)
            {
              if (from == end) goto done;
-             UPDATE_SYNTAX_TABLE_FORWARD (from);
              prev = FETCH_CHAR (from_byte);
              if (SYNTAX (prev) == Sendcomment
                  && SYNTAX_COMMENT_STYLE (prev) == state.comstyle)
@@ -2414,9 +2434,10 @@ do { prev_from = from;                           \
                break;
              INC_FROM;
            startincomment_1:
-             if (from < end && SYNTAX_COMEND_FIRST (prev)
+             if (from < end && SYNTAX_FLAGS_COMEND_FIRST (prev_from_syntax)
                  && SYNTAX_COMEND_SECOND (FETCH_CHAR (from_byte))
-                 && SYNTAX_COMMENT_STYLE (prev) == state.comstyle)
+                 && (SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax)
+                     == state.comstyle))
                /* Only terminate the comment section if the end-comment
                   sequence of the same style as the start sequence has
                   been encountered.  */
@@ -2470,8 +2491,10 @@ do { prev_from = from;                           \
                if (from >= end) goto done;
                c = FETCH_CHAR (from_byte);
                if (nofence && c == state.instring) break;
-               UPDATE_SYNTAX_TABLE_FORWARD (from);
-               switch (SWITCH_ENUM_CAST (SYNTAX (c)))
+
+               /* Some compilers can't handle this inside the switch.  */
+               temp = SYNTAX (c);
+               switch (temp)
                  {
                  case Sstring_fence:
                    if (!nofence) goto string_end;
@@ -2596,6 +2619,7 @@ DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
                                     Qnil)))))))));
 }
 \f
+void
 init_syntax_once ()
 {
   register int i, c;
@@ -2667,6 +2691,7 @@ init_syntax_once ()
     }
 }
 
+void
 syms_of_syntax ()
 {
   Qsyntax_table_p = intern ("syntax-table-p");