From bc796a59e2634d2e62efb9fba7cae981b70b7847 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 13 Sep 2002 11:22:21 +0000 Subject: [PATCH] (skip_chars): Fix previous change. (skip_syntaxes): Fix previous change. --- src/ChangeLog | 5 +++++ src/syntax.c | 39 ++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c01ca49fa24..f72e6601ebf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2002-09-13 Kenichi Handa + + * syntax.c (skip_chars): Fix previous change. + (skip_syntaxes): Fix previous change. + 2002-09-06 Dave Love * config.in: Restore it. diff --git a/src/syntax.c b/src/syntax.c index f4b5270ee9f..debe8c8a9d8 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -1420,6 +1420,9 @@ skip_chars (forwardp, string, lim) if (multibyte) char_ranges = (int *) alloca (XSTRING (string)->size * (sizeof (int)) * 2); + str = XSTRING (string)->data; + size_byte = STRING_BYTES (XSTRING (string)); + i_byte = 0; if (i_byte < size_byte && XSTRING (string)->data[0] == '^') @@ -1433,9 +1436,6 @@ skip_chars (forwardp, string, lim) If STRING contains non-ASCII characters, setup char_ranges for them and use fastmap only for their leading codes. */ - str = XSTRING (string)->data; - size_byte = STRING_BYTES (XSTRING (string)); - if (! string_multibyte) { int string_has_eight_bit = 0; @@ -1662,9 +1662,8 @@ skip_chars (forwardp, string, lim) } else { - while (pos < XINT (lim) && fastmap[FETCH_BYTE (pos)]) - pos++; - pos_byte = pos; + while (pos < XINT (lim) && fastmap[FETCH_BYTE (pos_byte)]) + pos++, pos_byte++; } } else @@ -1693,9 +1692,8 @@ skip_chars (forwardp, string, lim) } else { - while (pos > XINT (lim) && fastmap[FETCH_BYTE (pos - 1)]) - pos--; - pos_byte = pos; + while (pos > XINT (lim) && fastmap[FETCH_BYTE (pos_byte - 1)]) + pos--, pos_byte--; } } @@ -1738,6 +1736,13 @@ skip_syntaxes (forwardp, string, lim) bzero (fastmap, sizeof fastmap); + if (STRING_BYTES (XSTRING (string)) > XSTRING (string)->size) + /* As this is very rare case, don't consider efficiency. */ + string = string_make_unibyte (string); + + str = XSTRING (string)->data; + size_byte = STRING_BYTES (XSTRING (string)); + i_byte = 0; if (i_byte < size_byte && XSTRING (string)->data[0] == '^') @@ -1745,12 +1750,6 @@ skip_syntaxes (forwardp, string, lim) negate = 1; i_byte++; } - if (STRING_BYTES (XSTRING (string)) > XSTRING (string)->size) - /* As this is very rare case, don't consider efficiency. */ - string = string_make_unibyte (string); - str = XSTRING (string)->data; - size_byte = STRING_BYTES (XSTRING (string)); - /* Find the syntaxes specified and set their elements of fastmap. */ while (i_byte < size_byte) @@ -1791,14 +1790,13 @@ skip_syntaxes (forwardp, string, lim) { while (pos < XINT (lim)) { - c = FETCH_BYTE (pos); + c = FETCH_BYTE (pos_byte); MAKE_CHAR_MULTIBYTE (c); if (fastmap[(int) SYNTAX (c)]) break; - pos++; + pos++, pos_byte++; UPDATE_SYNTAX_TABLE_FORWARD (pos); } - pos_byte = pos; } } else @@ -1826,16 +1824,15 @@ skip_syntaxes (forwardp, string, lim) if (pos > XINT (lim)) while (1) { - c = FETCH_BYTE (pos - 1); + c = FETCH_BYTE (pos_byte - 1); MAKE_CHAR_MULTIBYTE (c); if (! fastmap[(int) SYNTAX (c)]) break; - pos--; + pos--, pos_byte--; if (pos <= XINT (lim)) break; UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1); } - pos_byte = pos; } } -- 2.39.5