* search.c (scan_buffer): Calculate end byte position just once.
(scan_newline): Do not recalculate start_byte. (search_command): Use eassert. * syntax.c (struct lisp_parse_state): New member location_byte. (scan_sexps_forward): Record from_byte and avoid redundant character to byte position calculation ... (Fparse_partial_sexp): ... here. Break too long line.
This commit is contained in:
parent
6130b96ae7
commit
8ca3092052
3 changed files with 26 additions and 13 deletions
|
@ -1,3 +1,13 @@
|
|||
2013-02-08 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* search.c (scan_buffer): Calculate end byte position just once.
|
||||
(scan_newline): Do not recalculate start_byte.
|
||||
(search_command): Use eassert.
|
||||
* syntax.c (struct lisp_parse_state): New member location_byte.
|
||||
(scan_sexps_forward): Record from_byte and avoid redundant
|
||||
character to byte position calculation ...
|
||||
(Fparse_partial_sexp): ... here. Break too long line.
|
||||
|
||||
2013-02-08 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* lisp.h (make_uninit_vector): New function.
|
||||
|
|
22
src/search.c
22
src/search.c
|
@ -644,18 +644,23 @@ scan_buffer (int target, ptrdiff_t start, ptrdiff_t end,
|
|||
ptrdiff_t count, ptrdiff_t *shortage, bool allow_quit)
|
||||
{
|
||||
struct region_cache *newline_cache;
|
||||
ptrdiff_t end_byte = -1;
|
||||
int direction;
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
direction = 1;
|
||||
if (! end) end = ZV;
|
||||
if (!end)
|
||||
end = ZV, end_byte = ZV_BYTE;
|
||||
}
|
||||
else
|
||||
{
|
||||
direction = -1;
|
||||
if (! end) end = BEGV;
|
||||
if (!end)
|
||||
end = BEGV, end_byte = BEGV_BYTE;
|
||||
}
|
||||
if (end_byte == -1)
|
||||
end_byte = CHAR_TO_BYTE (end);
|
||||
|
||||
newline_cache_on_off (current_buffer);
|
||||
newline_cache = current_buffer->newline_cache;
|
||||
|
@ -673,7 +678,7 @@ scan_buffer (int target, ptrdiff_t start, ptrdiff_t end,
|
|||
the position of the last character before the next such
|
||||
obstacle --- the last character the dumb search loop should
|
||||
examine. */
|
||||
ptrdiff_t ceiling_byte = CHAR_TO_BYTE (end) - 1;
|
||||
ptrdiff_t ceiling_byte = end_byte - 1;
|
||||
ptrdiff_t start_byte;
|
||||
ptrdiff_t tem;
|
||||
|
||||
|
@ -750,7 +755,7 @@ scan_buffer (int target, ptrdiff_t start, ptrdiff_t end,
|
|||
while (start > end)
|
||||
{
|
||||
/* The last character to check before the next obstacle. */
|
||||
ptrdiff_t ceiling_byte = CHAR_TO_BYTE (end);
|
||||
ptrdiff_t ceiling_byte = end_byte;
|
||||
ptrdiff_t start_byte;
|
||||
ptrdiff_t tem;
|
||||
|
||||
|
@ -861,8 +866,6 @@ scan_newline (ptrdiff_t start, ptrdiff_t start_byte,
|
|||
if (allow_quit)
|
||||
immediate_quit++;
|
||||
|
||||
start_byte = CHAR_TO_BYTE (start);
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
while (start_byte < limit_byte)
|
||||
|
@ -1016,8 +1019,7 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror,
|
|||
|
||||
if (!EQ (noerror, Qt))
|
||||
{
|
||||
if (lim < BEGV || lim > ZV)
|
||||
emacs_abort ();
|
||||
eassert (BEGV <= lim && lim <= ZV);
|
||||
SET_PT_BOTH (lim, lim_byte);
|
||||
return Qnil;
|
||||
#if 0 /* This would be clean, but maybe programs depend on
|
||||
|
@ -1029,9 +1031,7 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror,
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
if (np < BEGV || np > ZV)
|
||||
emacs_abort ();
|
||||
|
||||
eassert (BEGV <= np && np <= ZV);
|
||||
SET_PT (np);
|
||||
|
||||
return make_number (np);
|
||||
|
|
|
@ -121,6 +121,7 @@ struct lisp_parse_state
|
|||
/* Char number of start of containing expression */
|
||||
ptrdiff_t prevlevelstart;
|
||||
ptrdiff_t location; /* Char number at which parsing stopped. */
|
||||
ptrdiff_t location_byte; /* Corresponding byte position. */
|
||||
ptrdiff_t comstr_start; /* Position of last comment/string starter. */
|
||||
Lisp_Object levelstarts; /* Char numbers of starts-of-expression
|
||||
of levels (starting from outermost). */
|
||||
|
@ -3288,6 +3289,7 @@ do { prev_from = from; \
|
|||
state.prevlevelstart
|
||||
= (curlevel == levelstart) ? -1 : (curlevel - 1)->last;
|
||||
state.location = from;
|
||||
state.location_byte = from_byte;
|
||||
state.levelstarts = Qnil;
|
||||
while (curlevel > levelstart)
|
||||
state.levelstarts = Fcons (make_number ((--curlevel)->last),
|
||||
|
@ -3327,7 +3329,8 @@ Fifth arg OLDSTATE is a list like what this function returns.
|
|||
Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
|
||||
If it is symbol `syntax-table', stop after the start of a comment or a
|
||||
string, or after end of a comment or a string. */)
|
||||
(Lisp_Object from, Lisp_Object to, Lisp_Object targetdepth, Lisp_Object stopbefore, Lisp_Object oldstate, Lisp_Object commentstop)
|
||||
(Lisp_Object from, Lisp_Object to, Lisp_Object targetdepth,
|
||||
Lisp_Object stopbefore, Lisp_Object oldstate, Lisp_Object commentstop)
|
||||
{
|
||||
struct lisp_parse_state state;
|
||||
EMACS_INT target;
|
||||
|
@ -3347,7 +3350,7 @@ Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
|
|||
(NILP (commentstop)
|
||||
? 0 : (EQ (commentstop, Qsyntax_table) ? -1 : 1)));
|
||||
|
||||
SET_PT (state.location);
|
||||
SET_PT_BOTH (state.location, state.location_byte);
|
||||
|
||||
return Fcons (make_number (state.depth),
|
||||
Fcons (state.prevlevelstart < 0
|
||||
|
|
Loading…
Add table
Reference in a new issue