munson%elm.Berkeley.EDU@BERKELEY.EDU (Ethan V. Munson) (12/30/88)
I believe I have found a bug in GNU Emacs 18.59.9 in "store-match-data".
When you store a match list of the form (nil nil marker1 marker2),
a subsequent call to "match-data" returns (nil nil nil nil marker1 marker2).
I have inspected the code in search.c and believe that the bug is the
result of a missing call to Fcdr. A proposed fixed version of the function
definition follows.
Ethan Munson
munson@renoir.Berkeley.EDU
...ucbvax!renoir!munson
---------------------------------
DEFUN ("store-match-data", Fstore_match_data, Sstore_match_data, 1, 1, 0,
"Set internal data on last search match from elements of LIST.\n\
LIST should have been created by calling match-data previously.")
(list)
register Lisp_Object list;
{
register int i;
register Lisp_Object marker;
if (!CONSP (list) && !NULL (list))
list = wrong_type_argument (Qconsp, list, 0);
for (i = 0; i < RE_NREGS; i++)
{
marker = Fcar (list);
if (NULL (marker))
{
search_regs.start[i] = -1;
list = Fcdr (list); /* added statement */
}
else
{
CHECK_MARKER (marker, 0);
search_regs.start[i] = marker_position (marker);
list = Fcdr (list);
marker = Fcar (list);
CHECK_MARKER (marker, 0);
search_regs.end[i] = marker_position (marker);
}
list = Fcdr (list);
}
return Qnil;
}