changeset 72945:d4ecc69b8d2e

* search.c (clear_regexp_cache): New function. * syntax.c (Fmodify_syntax_entry): Clear regexp cache.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 17 Sep 2006 17:38:59 +0000
parents 65c16038d6c9
children 7bdeeb04897d
files src/ChangeLog src/search.c src/syntax.c
diffstat 3 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Sep 17 15:31:54 2006 +0000
+++ b/src/ChangeLog	Sun Sep 17 17:38:59 2006 +0000
@@ -1,3 +1,9 @@
+2006-09-17  Chong Yidong  <cyd@stupidchicken.com>
+
+	* search.c (clear_regexp_cache): New function.
+
+	* syntax.c (Fmodify_syntax_entry): Clear regexp cache.
+
 2006-09-16  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
 	* gtkutil.c (xg_get_file_with_chooser): Check
--- a/src/search.c	Sun Sep 17 15:31:54 2006 +0000
+++ b/src/search.c	Sun Sep 17 17:38:59 2006 +0000
@@ -207,6 +207,19 @@
     }
 }
 
+/* Clear the regexp cache.
+   There is no danger of memory leak here because re_compile_pattern
+   automagically manages the memory in each re_pattern_buffer struct,
+   based on its `allocated' and `buffer' values.  */
+void
+clear_regexp_cache ()
+{
+  int i;
+
+  for (i = 0; i < REGEXP_CACHE_SIZE; ++i)
+    searchbufs[i].regexp = Qnil;
+}
+
 /* Compile a regexp if necessary, but first check to see if there's one in
    the cache.
    PATTERN is the pattern to compile.
--- a/src/syntax.c	Sun Sep 17 15:31:54 2006 +0000
+++ b/src/syntax.c	Sun Sep 17 17:38:59 2006 +0000
@@ -1039,6 +1039,11 @@
     check_syntax_table (syntax_table);
 
   SET_RAW_SYNTAX_ENTRY (syntax_table, XINT (c), Fstring_to_syntax (newentry));
+
+  /* We clear the regexp cache, since character classes can now have
+     different values from those in the compiled regexps.*/
+  clear_regexp_cache ();
+
   return Qnil;
 }