[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/search.c
From: |
David Kastrup |
Subject: |
[Emacs-diffs] Changes to emacs/src/search.c |
Date: |
Wed, 23 Jun 2004 15:38:02 -0400 |
Index: emacs/src/search.c
diff -c emacs/src/search.c:1.180 emacs/src/search.c:1.181
*** emacs/src/search.c:1.180 Mon Jun 21 03:24:25 2004
--- emacs/src/search.c Wed Jun 23 19:22:25 2004
***************
*** 2589,2603 ****
/* Adjust search data for this change. */
{
int oldend = search_regs.end[sub];
int change = newpoint - search_regs.end[sub];
int i;
for (i = 0; i < search_regs.num_regs; i++)
{
! if (search_regs.start[i] > oldend)
search_regs.start[i] += change;
! if (search_regs.end[i] > oldend)
search_regs.end[i] += change;
}
}
--- 2589,2608 ----
/* Adjust search data for this change. */
{
int oldend = search_regs.end[sub];
+ int oldstart = search_regs.start[sub];
int change = newpoint - search_regs.end[sub];
int i;
for (i = 0; i < search_regs.num_regs; i++)
{
! if (search_regs.start[i] >= oldend)
search_regs.start[i] += change;
! else if (search_regs.start[i] > oldstart)
! search_regs.start[i] = oldstart;
! if (search_regs.end[i] >= oldend)
search_regs.end[i] += change;
+ else if (search_regs.end[i] > oldstart)
+ search_regs.end[i] = oldstart;
}
}
***************
*** 2666,2673 ****
if the last match was on a buffer; integers or nil if a string was matched.
Use `store-match-data' to reinstate the data in this list.
! If INTEGERS (the optional first argument) is non-nil, always use integers
! \(rather than markers) to represent buffer positions.
If REUSE is a list, reuse it as part of the value. If REUSE is long enough
to hold all the values, and if INTEGERS is non-nil, no consing is done.
--- 2671,2681 ----
if the last match was on a buffer; integers or nil if a string was matched.
Use `store-match-data' to reinstate the data in this list.
! If INTEGERS (the optional first argument) is non-nil, always use
! integers \(rather than markers) to represent buffer positions. In
! this case, and if the last match was in a buffer, the buffer will get
! stored as one additional element at the end of the list.
!
If REUSE is a list, reuse it as part of the value. If REUSE is long enough
to hold all the values, and if INTEGERS is non-nil, no consing is done.
***************
*** 2684,2693 ****
prev = Qnil;
! data = (Lisp_Object *) alloca ((2 * search_regs.num_regs)
* sizeof (Lisp_Object));
! len = -1;
for (i = 0; i < search_regs.num_regs; i++)
{
int start = search_regs.start[i];
--- 2692,2701 ----
prev = Qnil;
! data = (Lisp_Object *) alloca ((2 * search_regs.num_regs + 1)
* sizeof (Lisp_Object));
! len = 0;
for (i = 0; i < search_regs.num_regs; i++)
{
int start = search_regs.start[i];
***************
*** 2714,2735 ****
/* last_thing_searched must always be Qt, a buffer, or Qnil. */
abort ();
! len = i;
}
else
data[2 * i] = data [2 * i + 1] = Qnil;
}
/* If REUSE is not usable, cons up the values and return them. */
if (! CONSP (reuse))
! return Flist (2 * len + 2, data);
/* If REUSE is a list, store as many value elements as will fit
into the elements of REUSE. */
for (i = 0, tail = reuse; CONSP (tail);
i++, tail = XCDR (tail))
{
! if (i < 2 * len + 2)
XSETCAR (tail, data[i]);
else
XSETCAR (tail, Qnil);
--- 2722,2750 ----
/* last_thing_searched must always be Qt, a buffer, or Qnil. */
abort ();
! len = 2*(i+1);
}
else
data[2 * i] = data [2 * i + 1] = Qnil;
}
+ if (BUFFERP(last_thing_searched)
+ && ! NILP (integers))
+ {
+ XSETBUFFER(data[len], last_thing_searched);
+ len++;
+ }
+
/* If REUSE is not usable, cons up the values and return them. */
if (! CONSP (reuse))
! return Flist (len, data);
/* If REUSE is a list, store as many value elements as will fit
into the elements of REUSE. */
for (i = 0, tail = reuse; CONSP (tail);
i++, tail = XCDR (tail))
{
! if (i < len)
XSETCAR (tail, data[i]);
else
XSETCAR (tail, Qnil);
***************
*** 2738,2745 ****
/* If we couldn't fit all value elements into REUSE,
cons up the rest of them and add them to the end of REUSE. */
! if (i < 2 * len + 2)
! XSETCDR (prev, Flist (2 * len + 2 - i, data + i));
return reuse;
}
--- 2753,2760 ----
/* If we couldn't fit all value elements into REUSE,
cons up the rest of them and add them to the end of REUSE. */
! if (i < len)
! XSETCDR (prev, Flist (len - i, data + i));
return reuse;
}
***************
*** 2760,2767 ****
if (!CONSP (list) && !NILP (list))
list = wrong_type_argument (Qconsp, list);
! /* Unless we find a marker with a buffer in LIST, assume that this
! match data came from a string. */
last_thing_searched = Qt;
/* Allocate registers if they don't already exist. */
--- 2775,2782 ----
if (!CONSP (list) && !NILP (list))
list = wrong_type_argument (Qconsp, list);
! /* Unless we find a marker with a buffer or an explicit buffer
! in LIST, assume that this match data came from a string. */
last_thing_searched = Qt;
/* Allocate registers if they don't already exist. */
***************
*** 2792,2833 ****
search_regs.num_regs = length;
}
- }
! for (i = 0; i < search_regs.num_regs; i++)
! {
! marker = Fcar (list);
! if (NILP (marker))
! {
! search_regs.start[i] = -1;
! list = Fcdr (list);
! }
! else
! {
! int from;
! if (MARKERP (marker))
! {
! if (XMARKER (marker)->buffer == 0)
! XSETFASTINT (marker, 0);
! else
! XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer);
! }
! CHECK_NUMBER_COERCE_MARKER (marker);
! from = XINT (marker);
! list = Fcdr (list);
!
! marker = Fcar (list);
! if (MARKERP (marker) && XMARKER (marker)->buffer == 0)
! XSETFASTINT (marker, 0);
!
! CHECK_NUMBER_COERCE_MARKER (marker);
! search_regs.start[i] = from;
! search_regs.end[i] = XINT (marker);
! }
! list = Fcdr (list);
! }
return Qnil;
}
--- 2807,2855 ----
search_regs.num_regs = length;
}
! for (i = 0; i < length; i++)
! {
! marker = Fcar (list);
! if (NILP (marker))
! {
! search_regs.start[i] = -1;
! list = Fcdr (list);
! }
! else
! {
! int from;
!
! if (MARKERP (marker))
! {
! if (XMARKER (marker)->buffer == 0)
! XSETFASTINT (marker, 0);
! else
! XSETBUFFER (last_thing_searched, XMARKER (marker)->buffer);
! }
!
! CHECK_NUMBER_COERCE_MARKER (marker);
! from = XINT (marker);
! list = Fcdr (list);
!
! marker = Fcar (list);
! if (MARKERP (marker) && XMARKER (marker)->buffer == 0)
! XSETFASTINT (marker, 0);
!
! CHECK_NUMBER_COERCE_MARKER (marker);
! search_regs.start[i] = from;
! search_regs.end[i] = XINT (marker);
! }
! list = Fcdr (list);
! }
! for (; i < search_regs.num_regs; i++)
! search_regs.start[i] = -1;
! }
! if (CONSP(list) && BUFFERP(XCAR(list))) {
! XSETBUFFER(last_thing_searched, XCAR(list));
! }
return Qnil;
}
***************
*** 2836,2841 ****
--- 2858,2864 ----
during the execution of a sentinel or filter. */
static int search_regs_saved;
static struct re_registers saved_search_regs;
+ static Lisp_Object saved_last_thing_searched;
/* Called from Flooking_at, Fstring_match, search_buffer, Fstore_match_data
if asynchronous code (filter or sentinel) is running. */
***************
*** 2847,2852 ****
--- 2870,2877 ----
saved_search_regs.num_regs = search_regs.num_regs;
saved_search_regs.start = search_regs.start;
saved_search_regs.end = search_regs.end;
+ saved_last_thing_searched = last_thing_searched;
+ last_thing_searched = Qnil;
search_regs.num_regs = 0;
search_regs.start = 0;
search_regs.end = 0;
***************
*** 2869,2875 ****
search_regs.num_regs = saved_search_regs.num_regs;
search_regs.start = saved_search_regs.start;
search_regs.end = saved_search_regs.end;
!
search_regs_saved = 0;
}
}
--- 2894,2901 ----
search_regs.num_regs = saved_search_regs.num_regs;
search_regs.start = saved_search_regs.start;
search_regs.end = saved_search_regs.end;
! last_thing_searched = saved_last_thing_searched;
! saved_last_thing_searched = Qnil;
search_regs_saved = 0;
}
}