]> git.eshelyaron.com Git - emacs.git/commitdiff
* search.c (scan_buffer): Calculate end byte position just once.
authorDmitry Antipov <dmantipov@yandex.ru>
Fri, 8 Feb 2013 14:44:53 +0000 (18:44 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Fri, 8 Feb 2013 14:44:53 +0000 (18:44 +0400)
(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.

src/ChangeLog
src/search.c
src/syntax.c

index 073227281f051189a69c3ce7ebeb8bada203d57f..420cb5aed63b5575695aa9fe3f40cb897869ad41 100644 (file)
@@ -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.
index 545f614a063f5ca8d9ca61f2bf5eae853b1bb2e9..c4ccf6c257b52e3fd37d4790d8f3c3c81a4fd473 100644 (file)
@@ -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);
index 6febcd266c0db9307b4124538ec8570ccfb242e0..42500b0cb7699dade8e54b93cfffcac3acb4a3cd 100644 (file)
@@ -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