emacs-diffs
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]