[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r111693: * search.c (scan_buffer): Ca
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r111693: * search.c (scan_buffer): Calculate end byte position just once. |
Date: |
Fri, 08 Feb 2013 18:44:53 +0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 111693
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Fri 2013-02-08 18:44:53 +0400
message:
* 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.
modified:
src/ChangeLog
src/search.c
src/syntax.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-02-08 05:28:52 +0000
+++ b/src/ChangeLog 2013-02-08 14:44:53 +0000
@@ -1,5 +1,15 @@
2013-02-08 Dmitry Antipov <address@hidden>
+ * 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 <address@hidden>
+
* lisp.h (make_uninit_vector): New function.
* alloc.c (Fvector, Fmake_byte_code):
* ccl.c (Fregister_ccl_program):
=== modified file 'src/search.c'
--- a/src/search.c 2013-01-02 16:13:04 +0000
+++ b/src/search.c 2013-02-08 14:44:53 +0000
@@ -644,18 +644,23 @@
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 @@
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 @@
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 @@
if (allow_quit)
immediate_quit++;
- start_byte = CHAR_TO_BYTE (start);
-
if (count > 0)
{
while (start_byte < limit_byte)
@@ -1016,8 +1019,7 @@
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 @@
return Qnil;
}
- if (np < BEGV || np > ZV)
- emacs_abort ();
-
+ eassert (BEGV <= np && np <= ZV);
SET_PT (np);
return make_number (np);
=== modified file 'src/syntax.c'
--- a/src/syntax.c 2013-02-08 05:28:52 +0000
+++ b/src/syntax.c 2013-02-08 14:44:53 +0000
@@ -121,6 +121,7 @@
/* 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 @@
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 @@
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 @@
(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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r111693: * search.c (scan_buffer): Calculate end byte position just once.,
Dmitry Antipov <=