[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/search.c,v
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] Changes to emacs/src/search.c,v |
Date: |
Tue, 03 Oct 2006 13:25:26 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Stefan Monnier <monnier> 06/10/03 13:25:26
Index: search.c
===================================================================
RCS file: /sources/emacs/emacs/src/search.c,v
retrieving revision 1.215
retrieving revision 1.216
diff -u -b -r1.215 -r1.216
--- search.c 24 Sep 2006 20:28:49 -0000 1.215
+++ search.c 3 Oct 2006 13:25:26 -0000 1.216
@@ -43,7 +43,8 @@
struct regexp_cache *next;
Lisp_Object regexp, whitespace_regexp;
/* Syntax table for which the regexp applies. We need this because
- of character classes. */
+ of character classes. If this is t, then the compiled pattern is valid
+ for any syntax-table. */
Lisp_Object syntax_table;
struct re_pattern_buffer buf;
char fastmap[0400];
@@ -170,7 +171,6 @@
cp->posix = posix;
cp->buf.multibyte = multibyte;
cp->whitespace_regexp = Vsearch_spaces_regexp;
- cp->syntax_table = current_buffer->syntax_table;
/* rms: I think BLOCK_INPUT is not needed here any more,
because regex.c defines malloc to call xmalloc.
Using BLOCK_INPUT here means the debugger won't run if an error occurs.
@@ -185,6 +185,10 @@
val = (char *) re_compile_pattern ((char *)raw_pattern,
raw_pattern_size, &cp->buf);
+ /* If the compiled pattern hard codes some of the contents of the
+ syntax-table, it can only be reused with *this* syntax table. */
+ cp->syntax_table = cp->buf.used_syntax ? current_buffer->syntax_table : Qt;
+
re_set_whitespace_regexp (NULL);
re_set_syntax (old);
@@ -261,10 +265,8 @@
&& 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)
+ && (EQ (cp->syntax_table, Qt)
+ || EQ (cp->syntax_table, current_buffer->syntax_table))
&& !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp)))
break;
- [Emacs-diffs] Changes to emacs/src/search.c,v,
Stefan Monnier <=