diff src/search.c @ 460:223736d75acb r21-2-45

Import from CVS: tag r21-2-45
author cvs
date Mon, 13 Aug 2007 11:43:24 +0200
parents 1ccc32a20af4
children 0784d089fdc9
line wrap: on
line diff
--- a/src/search.c	Mon Aug 13 11:42:27 2007 +0200
+++ b/src/search.c	Mon Aug 13 11:43:24 2007 +0200
@@ -312,8 +312,8 @@
   s1 = p2 - p1;
   s2 = BI_BUF_ZV (buf) - p2;
 
+  regex_match_object = Qnil;
   regex_emacs_buffer = buf;
-  regex_emacs_buffer_p = 1;
   i = re_match_2 (bufp, (char *) BI_BUF_BYTE_ADDRESS (buf, p1),
 		  s1, (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2,
 		  BI_BUF_PT (buf) - BI_BUF_BEGV (buf), &search_regs,
@@ -403,8 +403,8 @@
   QUIT;
   {
     Bytecount bis = charcount_to_bytecount (XSTRING_DATA (string), s);
+    regex_match_object = string;
     regex_emacs_buffer = buf;
-    regex_emacs_buffer_p = 0;
     val = re_search (bufp, (char *) XSTRING_DATA (string),
 		     XSTRING_LENGTH (string), bis,
 		     XSTRING_LENGTH (string) - bis,
@@ -495,8 +495,8 @@
     }
 
   /* #### evil current-buffer dependency */
+  regex_match_object = reloc;
   regex_emacs_buffer = current_buffer;
-  regex_emacs_buffer_p = 0;
   val = re_search (bufp, (char *) newnonreloc + offset, length, 0,
 		   length, 0);
 
@@ -784,7 +784,9 @@
   unsigned char fastmap[0400];
   int negate = 0;
   REGISTER int i;
+#ifndef emacs
   Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table);
+#endif
   Bufpos limit;
 
   if (NILP (lim))
@@ -880,6 +882,7 @@
 
     if (syntaxp)
       {
+	SETUP_SYNTAX_CACHE_FOR_BUFFER (buf, BUF_PT (buf), forwardp ? 1 : -1);
 	/* All syntax designators are normal chars so nothing strange
 	   to worry about */
 	if (forwardp)
@@ -887,20 +890,26 @@
 	    while (BUF_PT (buf) < limit
 		   && fastmap[(unsigned char)
                               syntax_code_spec
-			      [(int) SYNTAX (syntax_table,
-					     BUF_FETCH_CHAR
-					     (buf, BUF_PT (buf)))]])
-	      BUF_SET_PT (buf, BUF_PT (buf) + 1);
+			      [(int) SYNTAX_FROM_CACHE (syntax_table,
+							BUF_FETCH_CHAR
+							(buf, BUF_PT (buf)))]])
+	      {
+		BUF_SET_PT (buf, BUF_PT (buf) + 1);
+		UPDATE_SYNTAX_CACHE_FORWARD (BUF_PT (buf));
+	      }
 	  }
 	else
 	  {
 	    while (BUF_PT (buf) > limit
 		   && fastmap[(unsigned char)
                               syntax_code_spec
-			      [(int) SYNTAX (syntax_table,
-					     BUF_FETCH_CHAR
-					     (buf, BUF_PT (buf) - 1))]])
-	      BUF_SET_PT (buf, BUF_PT (buf) - 1);
+			      [(int) SYNTAX_FROM_CACHE (syntax_table,
+							BUF_FETCH_CHAR
+							(buf, BUF_PT (buf) - 1))]])
+	      {
+		BUF_SET_PT (buf, BUF_PT (buf) - 1);
+		UPDATE_SYNTAX_CACHE_BACKWARD (BUF_PT (buf) - 1);
+	      }
 	  }
       }
     else
@@ -1160,13 +1169,13 @@
       p2 = BI_BUF_CEILING_OF (buf, p1);
       s1 = p2 - p1;
       s2 = BI_BUF_ZV (buf) - p2;
+      regex_match_object = Qnil;
 
       while (n < 0)
 	{
 	  Bytecount val;
 	  QUIT;
           regex_emacs_buffer = buf;
-	  regex_emacs_buffer_p = 1;
 	  val = re_search_2 (bufp,
 			     (char *) BI_BUF_BYTE_ADDRESS (buf, p1), s1,
 			     (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2,
@@ -1205,7 +1214,6 @@
 	  Bytecount val;
 	  QUIT;
           regex_emacs_buffer = buf;
-	  regex_emacs_buffer_p = 1;
           val = re_search_2 (bufp,
 			     (char *) BI_BUF_BYTE_ADDRESS (buf, p1), s1,
 			     (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2,