Mercurial > emacs
changeset 73002:b3a72607819d
* search.c (struct regexp_cache): New entry syntax_table.
(compile_pattern_1): Set it.
(syms_of_search): Initialize it.
(compile_pattern): Require the syntax_table entry of the cache
element to match the current syntax table entry.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 19 Sep 2006 21:44:52 +0000 |
parents | 2b055f644b75 |
children | ec72ab6f5541 |
files | src/ChangeLog src/search.c |
diffstat | 2 files changed, 18 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Tue Sep 19 21:36:44 2006 +0000 +++ b/src/ChangeLog Tue Sep 19 21:44:52 2006 +0000 @@ -1,3 +1,11 @@ +2006-09-19 Chong Yidong <cyd@stupidchicken.com> + + * search.c (struct regexp_cache): New entry syntax_table. + (compile_pattern_1): Set it. + (syms_of_search): Initialize it. + (compile_pattern): Require the syntax_table entry of the cache + element to match the current syntax table entry. + 2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca> * window.c (Fwindow_end): Fix recent change.
--- a/src/search.c Tue Sep 19 21:36:44 2006 +0000 +++ b/src/search.c Tue Sep 19 21:44:52 2006 +0000 @@ -42,6 +42,9 @@ { struct regexp_cache *next; Lisp_Object regexp, whitespace_regexp; + /* Syntax table for which the regexp applies. We need this because + of character classes. */ + Lisp_Object syntax_table; struct re_pattern_buffer buf; char fastmap[0400]; /* Nonzero means regexp was compiled to do full POSIX backtracking. */ @@ -167,6 +170,7 @@ cp->posix = posix; cp->buf.multibyte = multibyte; cp->whitespace_regexp = Vsearch_spaces_regexp; + cp->syntax_table = current_buffer->syntax_table; /* Doing BLOCK_INPUT here has the effect that the debugger won't run if an error occurs. Why is BLOCK_INPUT needed here? */ @@ -256,6 +260,10 @@ && EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0))) && cp->posix == posix && cp->buf.multibyte == multibyte + /* TODO: Strictly speaking, we only need to match syntax + tables when a character class like [[:space:]] occurs in + the pattern. -- cyd*/ + && EQ (cp->syntax_table, current_buffer->syntax_table) && !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp))) break; @@ -3114,8 +3122,10 @@ searchbufs[i].buf.fastmap = searchbufs[i].fastmap; searchbufs[i].regexp = Qnil; searchbufs[i].whitespace_regexp = Qnil; + searchbufs[i].syntax_table = Qnil; staticpro (&searchbufs[i].regexp); staticpro (&searchbufs[i].whitespace_regexp); + staticpro (&searchbufs[i].syntax_table); searchbufs[i].next = (i == REGEXP_CACHE_SIZE-1 ? 0 : &searchbufs[i+1]); } searchbuf_head = &searchbufs[0];