changeset 1583:36ec1d59acb3

(re_compile_fastmap): Do something similar to the previous change, for charset_not, wordchar, notwordchar, categoryspec, notcategoryspec.
author Richard Stallman <rms@gnu.org>
date Wed, 30 Dec 1998 20:44:39 +0000
parents dfd7c775c5d0
children 0f1daf1810b4
files regex.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/regex.c
+++ b/regex.c
@@ -3323,9 +3323,11 @@
 
 
 	case charset_not:
-	  /* Chars beyond end of map must be allowed.  End of map is
-	     `127' if bufp->multibyte is nonzero.  */
-	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  /* Chars beyond end of bitmap are possible matches.
+	     All the single-byte codes can occur in multibyte buffers.
+	     So any that are not listed in the charset
+	     are possible matches, even in multibyte buffers.  */
+	  simple_char_max = (1 << BYTEWIDTH);
 	  for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH;
 	       j < simple_char_max; j++)
 	    fastmap[j] = 1;
@@ -3352,7 +3354,9 @@
 
 
 	case wordchar:
-	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  /* All the single-byte codes can occur in multibyte buffers,
+	     and they may have word syntax.  So do consider them.  */
+	  simple_char_max = (1 << BYTEWIDTH);
 	  for (j = 0; j < simple_char_max; j++)
 	    if (SYNTAX (j) == Sword)
 	      fastmap[j] = 1;
@@ -3365,7 +3369,9 @@
 
 
 	case notwordchar:
-	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  /* All the single-byte codes can occur in multibyte buffers,
+	     and they may not have word syntax.  So do consider them.  */
+	  simple_char_max = (1 << BYTEWIDTH);
 	  for (j = 0; j < simple_char_max; j++)
 	    if (SYNTAX (j) != Sword)
 	      fastmap[j] = 1;
@@ -3445,7 +3451,7 @@
 
 	case categoryspec:
 	  k = *p++;
-	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  simple_char_max = (1 << BYTEWIDTH);
 	  for (j = 0; j < simple_char_max; j++)
 	    if (CHAR_HAS_CATEGORY (j, k))
 	      fastmap[j] = 1;
@@ -3459,7 +3465,7 @@
 
 	case notcategoryspec:
 	  k = *p++;
-	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  simple_char_max = (1 << BYTEWIDTH);
 	  for (j = 0; j < simple_char_max; j++)
 	    if (!CHAR_HAS_CATEGORY (j, k))
 	      fastmap[j] = 1;