From: Stefan Monnier Date: Tue, 3 Oct 2006 13:47:26 +0000 (+0000) Subject: (compile_pattern): Only check `cp->syntax_table' if needed. X-Git-Tag: emacs-pretest-22.0.90~248 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=54dd3310afa4bacd201ce9e126be49ede6aa3a36;p=emacs.git (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 --git a/src/ChangeLog b/src/ChangeLog index b13d015c01a..f64020ca34d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -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 --git a/src/search.c b/src/search.c index 5f9f321067a..7c3151b76b8 100644 --- a/src/search.c +++ b/src/search.c @@ -216,7 +216,8 @@ shrink_regexp_cache () } } -/* 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 @@ clear_regexp_cache () 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