changeset 23964:11c5dd0a7bd7

(re_compile_fastmap): Do something similar to the previous change, for charset_not, wordchar, notwordchar, categoryspec, notcategoryspec.
author Richard M. Stallman <rms@gnu.org>
date Wed, 30 Dec 1998 20:44:39 +0000
parents c242e2dc93a9
children 8a2363657bcc
files src/regex.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/regex.c	Wed Dec 30 20:41:24 1998 +0000
+++ b/src/regex.c	Wed Dec 30 20:44:39 1998 +0000
@@ -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;