Commit b69e3c18 authored by Chong Yidong's avatar Chong Yidong
Browse files

* 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.
parent f3209e43
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.
......
......@@ -42,6 +42,9 @@ struct regexp_cache
{
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 @@ compile_pattern_1 (cp, pattern, translate, regp, posix, multibyte)
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 @@ compile_pattern (pattern, regp, translate, posix, multibyte)
&& 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 @@ syms_of_search ()
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];
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment