GNU bug report logs -
#2435
23.0.90; customize/whitespace: display stops updating
Previous Next
Full log
View this message in rfc822 format
The following patch tries to avoid the problem by updating the regexp
list before using the regexp cell. It seems to fix the problem; or do
have a different suggestion?
*** trunk/src/search.c.~1.237.~ 2009-02-12 16:45:29.000000000 -0500
--- trunk/src/search.c 2009-03-04 23:38:35.000000000 -0500
***************
*** 134,140 ****
char *val;
reg_syntax_t old;
! cp->regexp = Qnil;
cp->buf.translate = (! NILP (translate) ? translate : make_number (0));
cp->posix = posix;
cp->buf.multibyte = STRING_MULTIBYTE (pattern);
--- 134,140 ----
char *val;
reg_syntax_t old;
! cp->regexp = Qt;
cp->buf.translate = (! NILP (translate) ? translate : make_number (0));
cp->posix = posix;
cp->buf.multibyte = STRING_MULTIBYTE (pattern);
***************
*** 239,245 ****
nil should never appear before a non-nil entry. */
if (NILP (cp->regexp))
goto compile_it;
! if (SCHARS (cp->regexp) == SCHARS (pattern)
&& STRING_MULTIBYTE (cp->regexp) == STRING_MULTIBYTE (pattern)
&& !NILP (Fstring_equal (cp->regexp, pattern))
&& EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0)))
--- 239,246 ----
nil should never appear before a non-nil entry. */
if (NILP (cp->regexp))
goto compile_it;
! if (STRINGP (cp->regexp)
! && SCHARS (cp->regexp) == SCHARS (pattern)
&& STRING_MULTIBYTE (cp->regexp) == STRING_MULTIBYTE (pattern)
&& !NILP (Fstring_equal (cp->regexp, pattern))
&& EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0)))
***************
*** 248,273 ****
|| EQ (cp->syntax_table, current_buffer->syntax_table))
&& !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp))
&& cp->buf.charset_unibyte == charset_unibyte)
! break;
/* If we're at the end of the cache, compile into the nil cell
we found, or the last (least recently used) cell with a
! string value. */
if (cp->next == 0)
{
compile_it:
compile_pattern_1 (cp, pattern, translate, regp, posix);
break;
}
}
- /* When we get here, cp (aka *cpp) contains the compiled pattern,
- either because we found it in the cache or because we just compiled it.
- Move it to the front of the queue to mark it as most recently used. */
- *cpp = cp->next;
- cp->next = searchbuf_head;
- searchbuf_head = cp;
-
/* Advise the searching functions about the space we have allocated
for register data. */
if (regp)
--- 249,279 ----
|| EQ (cp->syntax_table, current_buffer->syntax_table))
&& !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp))
&& cp->buf.charset_unibyte == charset_unibyte)
! {
! /* We found a compiled pattern. Move it to the front of the
! queue to mark it as most recently used. */
! *cpp = cp->next;
! cp->next = searchbuf_head;
! searchbuf_head = cp;
! break;
! }
/* If we're at the end of the cache, compile into the nil cell
we found, or the last (least recently used) cell with a
! string value. We must update the queue before calling
! compile_pattern_1, because compile_pattern_1 can end up
! calling compile_pattern recursively (via load_charset). */
if (cp->next == 0)
{
compile_it:
+ *cpp = cp->next;
+ cp->next = searchbuf_head;
+ searchbuf_head = cp;
compile_pattern_1 (cp, pattern, translate, regp, posix);
break;
}
}
/* Advise the searching functions about the space we have allocated
for register data. */
if (regp)
This bug report was last modified 16 years and 135 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.