diff --git a/src/ChangeLog b/src/ChangeLog index 9b74ac1ed89a9d8af07f979c448ffbcbaa2821dd..a205a9cc6c3e85af46f87046544e66e83d76ea2c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2006-09-17 Chong Yidong + + * search.c (clear_regexp_cache): New function. + + * syntax.c (Fmodify_syntax_entry): Clear regexp cache. + 2006-09-16 Jan Dj,Ad(Brv * gtkutil.c (xg_get_file_with_chooser): Check diff --git a/src/search.c b/src/search.c index 2063e7d95ba85474a5d5f22a2542b979992fee4f..8b469a37b7001c1633bf0e939e7080458655f044 100644 --- a/src/search.c +++ b/src/search.c @@ -207,6 +207,19 @@ shrink_regexp_cache () } } +/* 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. diff --git a/src/syntax.c b/src/syntax.c index eee9151f87867519866d6f673a9eaae990d735e2..052191d5fef8f670f5306178551fddaef5bdb053 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -1039,6 +1039,11 @@ usage: (modify-syntax-entry CHAR NEWENTRY &optional SYNTAX-TABLE) */) 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; }