Mercurial > emacs
changeset 21207:390b39d69836
(Fbackward_prefix_chars): Set point properly while scanning.
(scan_sexps_forward): Make INC_FROM do UPDATE_SYNTAX_TABLE_FORWARD.
Delete the explicit calls to UPDATE_SYNTAX_TABLE_FORWARD.
Also set prev_from_syntax (new local var). Test that in the loop,
instead of fetching syntax of the previous char.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 18 Mar 1998 00:11:33 +0000 |
parents | dac44ee5f772 |
children | 108e8bd3c936 |
files | src/syntax.c |
diffstat | 1 files changed, 26 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/syntax.c Tue Mar 17 23:58:13 1998 +0000 +++ b/src/syntax.c Wed Mar 18 00:11:33 1998 +0000 @@ -2174,12 +2174,16 @@ 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,6 +2224,7 @@ 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; @@ -2232,14 +2237,15 @@ #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 +2308,15 @@ } 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 +2329,14 @@ ? 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 +2346,12 @@ ? 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,7 +2371,6 @@ symstarted: while (from < end) { - UPDATE_SYNTAX_TABLE_FORWARD (from); switch (SWITCH_ENUM_CAST (SYNTAX (FETCH_CHAR (from_byte)))) { case Scharquote: @@ -2387,7 +2398,6 @@ { /* 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 +2411,6 @@ 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 +2423,10 @@ 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,7 +2480,6 @@ 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))) { case Sstring_fence: