Mercurial > emacs
changeset 73232:5f8a28d018b2
(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.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 03 Oct 2006 13:47:26 +0000 |
parents | 6b368d6ebfa5 |
children | b4697c34c8fd |
files | src/ChangeLog src/search.c |
diffstat | 2 files changed, 21 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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 <monnier@iro.umontreal.ca> + + * 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 <storm@cua.dk> * process.c (list_processes_1): Run sentinels before removing dead
--- 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