# HG changeset patch # User Stefan Monnier # Date 1159883246 0 # Node ID 5f8a28d018b2e55dfeaefcc41b7895d1e743ddc8 # Parent 6b368d6ebfa5d50e236c5b272e6da71134723851 (compile_pattern): Only check `cp->syntax_table' if needed. (compile_pattern_1): Remember `used_syntax' in `cp->syntax_table'. (clear_regexp_cache): Only flush those regexps which depend on a syntax-table. diff -r 6b368d6ebfa5 -r 5f8a28d018b2 src/ChangeLog --- a/src/ChangeLog Tue Oct 03 13:38:18 2006 +0000 +++ b/src/ChangeLog Tue Oct 03 13:47:26 2006 +0000 @@ -1,3 +1,17 @@ +2006-10-03 Stefan Monnier + + * lisp.h (clear_regexp_cache): Declare. + + * search.c (compile_pattern): Only check `cp->syntax_table' if needed. + (compile_pattern_1): Remember `used_syntax' in `cp->syntax_table'. + (clear_regexp_cache): Only flush those regexps which depend on + a syntax-table. + + * regex.c (regex_compile): Set the new `used_syntax' bit. + + * regex.h: Remove file local variables. + (struct re_pattern_buffer): New field `used_syntax'. + 2006-10-03 Kim F. Storm * process.c (list_processes_1): Run sentinels before removing dead diff -r 6b368d6ebfa5 -r 5f8a28d018b2 src/search.c --- a/src/search.c Tue Oct 03 13:38:18 2006 +0000 +++ b/src/search.c Tue Oct 03 13:47:26 2006 +0000 @@ -216,7 +216,8 @@ } } -/* Clear the regexp cache. +/* Clear the regexp cache w.r.t. a particular syntax table, + because it was changed. 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. */ @@ -226,7 +227,11 @@ int i; for (i = 0; i < REGEXP_CACHE_SIZE; ++i) - searchbufs[i].regexp = Qnil; + /* It's tempting to compare with the syntax-table we've actually changd, + but it's not sufficient because char-table inheritance mewans that + modifying one syntax-table can change others at the same time. */ + if (!EQ (searchbufs[i].syntax_table, Qt)) + searchbufs[i].regexp = Qnil; } /* Compile a regexp if necessary, but first check to see if there's one in