emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r111647: * window.h (struct window):


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111647: * window.h (struct window): Convert base_line_number, base_line_pos
Date: Fri, 01 Feb 2013 11:23:18 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111647
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Fri 2013-02-01 11:23:18 +0400
message:
  * window.h (struct window): Convert base_line_number, base_line_pos
  and column_number_displayed members from Lisp_Object to ptrdiff_t.
  Convert region_showing member from Lisp_Object to bitfield.
  Remove sequence_number member.  Adjust comments.
  * window.c (sequence_number): Remove.
  (make_window): Initialize column_number_displayed.
  * print.c (print_object): Follow the printed representation of
  frames and print window pointer to distinguish between windows.
  (adjust_window_count): Invalidate base_line_pos.  Adjust comment.
  * xdisp.c (wset_base_line_number, wset_base_line_pos)
  (wset_column_number_displayed, wset_region_showing): Remove.
  (window_buffer_changed, mode_line_update_needed, redisplay_internal)
  (try_scrolling, try_cursor_movement, redisplay_window)
  (try_window_reusing_current_matrix, try_window_id, display_line)
  (display_mode_lines, decode_mode_spec): Adjust users.
  * .gdbinit (pwinx): Do not print sequence_number.
modified:
  src/.gdbinit
  src/ChangeLog
  src/print.c
  src/window.c
  src/window.h
  src/xdisp.c
=== modified file 'src/.gdbinit'
--- a/src/.gdbinit      2013-01-02 16:13:04 +0000
+++ b/src/.gdbinit      2013-02-01 07:23:18 +0000
@@ -358,7 +358,6 @@
 
 define pwinx
   set $w = $arg0
-  xgetint $w->sequence_number
   if ($w->mini_p != Qnil)
     printf "Mini "
   end

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-02-01 06:30:51 +0000
+++ b/src/ChangeLog     2013-02-01 07:23:18 +0000
@@ -1,3 +1,22 @@
+2013-02-01  Dmitry Antipov  <address@hidden>
+
+       * window.h (struct window): Convert base_line_number, base_line_pos
+       and column_number_displayed members from Lisp_Object to ptrdiff_t.
+       Convert region_showing member from Lisp_Object to bitfield.
+       Remove sequence_number member.  Adjust comments.
+       * window.c (sequence_number): Remove.
+       (make_window): Initialize column_number_displayed.
+       * print.c (print_object): Follow the printed representation of
+       frames and print window pointer to distinguish between windows.
+       (adjust_window_count): Invalidate base_line_pos.  Adjust comment.
+       * xdisp.c (wset_base_line_number, wset_base_line_pos)
+       (wset_column_number_displayed, wset_region_showing): Remove.
+       (window_buffer_changed, mode_line_update_needed, redisplay_internal)
+       (try_scrolling, try_cursor_movement, redisplay_window)
+       (try_window_reusing_current_matrix, try_window_id, display_line)
+       (display_mode_lines, decode_mode_spec): Adjust users.
+       * .gdbinit (pwinx): Do not print sequence_number.
+
 2013-02-01  Paul Eggert  <address@hidden>
 
        Use fdopendir, fstatat and readlinkat, for efficiency (Bug#13539).

=== modified file 'src/print.c'
--- a/src/print.c       2013-01-14 17:46:14 +0000
+++ b/src/print.c       2013-02-01 07:23:18 +0000
@@ -1766,7 +1766,7 @@
        {
          int len;
          strout ("#<window ", -1, -1, printcharfun);
-         len = sprintf (buf, "%d", XWINDOW (obj)->sequence_number);
+         len = sprintf (buf, "%p", XWINDOW (obj));
          strout (buf, len, len, printcharfun);
          if (!NILP (XWINDOW (obj)->buffer))
            {

=== modified file 'src/window.c'
--- a/src/window.c      2013-01-24 05:41:28 +0000
+++ b/src/window.c      2013-02-01 07:23:18 +0000
@@ -116,9 +116,6 @@
 /* Hook run at end of temp_output_buffer_show.  */
 static Lisp_Object Qtemp_buffer_show_hook;
 
-/* Incremented for each window created.  */
-static int sequence_number;
-
 /* Nonzero after init_window_once has finished.  */
 static int window_initialized;
 
@@ -286,8 +283,9 @@
        b = b->base_buffer;
       b->window_count += arg;
       eassert (b->window_count >= 0);
-      /* Catch redisplay's attention.  */
+      /* These should be recalculated by redisplay code.  */
       w->window_end_valid = 0;
+      w->base_line_pos = 0;
     }
 }
 
@@ -3429,8 +3427,6 @@
   adjust_window_count (p, 1);
   XSETWINDOW (parent, p);
 
-  p->sequence_number = ++sequence_number;
-
   replace_window (window, parent, 1);
 
   wset_next (o, Qnil);
@@ -3479,7 +3475,7 @@
   w->nrows_scale_factor = w->ncols_scale_factor = 1;
   w->phys_cursor_type = -1;
   w->phys_cursor_width = -1;
-  w->sequence_number = ++sequence_number;
+  w->column_number_displayed = -1;
 
   /* Reset window_list.  */
   Vwindow_list = Qnil;

=== modified file 'src/window.h'
--- a/src/window.h      2013-01-22 11:48:00 +0000
+++ b/src/window.h      2013-02-01 07:23:18 +0000
@@ -192,23 +192,6 @@
        and Qt, so bitfield can't be used here.  */
     Lisp_Object dedicated;
 
-    /* Line number and position of a line somewhere above the top of the
-       screen.  If this field is nil, it means we don't have a base
-       line.  */
-    Lisp_Object base_line_number;
-    /* If this field is nil, it means we don't have a base line.
-       If it is a buffer, it means don't display the line number
-       as long as the window shows that buffer.  */
-    Lisp_Object base_line_pos;
-
-    /* If we have highlighted the region (or any part of it),
-       this is the mark position that we used, as an integer.  */
-    Lisp_Object region_showing;
-
-    /* The column number currently displayed in this window's mode line,
-       or nil if column numbers are not being displayed.  */
-    Lisp_Object column_number_displayed;
-
     /* If redisplay in this window goes beyond this buffer position,
        must run the redisplay-end-trigger-hook.  */
     Lisp_Object redisplay_end_trigger;
@@ -238,9 +221,6 @@
     /* Number saying how recently window was selected.  */
     int use_time;
 
-    /* Unique number of window assigned when it was created.  */
-    int sequence_number;
-
     /* Number of columns display within the window is scrolled to the left.  */
     ptrdiff_t hscroll;
 
@@ -260,6 +240,19 @@
        it should be positive.  */
     ptrdiff_t last_point;
 
+    /* Line number and position of a line somewhere above the top of the
+       screen.  If this field is zero, it means we don't have a base line.  */
+    ptrdiff_t base_line_number;
+
+    /* If this field is zero, it means we don't have a base line.
+       If it is -1, it means don't display the line number as long
+       as the window shows its buffer.  */
+    ptrdiff_t base_line_pos;
+
+    /* The column number currently displayed in this window's mode
+       line, or -1 if column numbers are not being displayed.  */
+    ptrdiff_t column_number_displayed;
+
     /* Scaling factor for the glyph_matrix size calculation in this window.
        Used if window contains many small images or uses proportional fonts,
        as the normal  may yield a matrix which is too small.  */
@@ -340,6 +333,9 @@
        the frame image that window_end_pos did not get onto the frame.  */
     unsigned window_end_valid : 1;
 
+    /* Nonzero if we have highlighted the region (or any part of it).  */
+    unsigned region_showing : 1;
+
     /* Amount by which lines of this window are scrolled in
        y-direction (smooth scrolling).  */
     int vscroll;

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2013-01-25 17:13:31 +0000
+++ b/src/xdisp.c       2013-02-01 07:23:18 +0000
@@ -367,28 +367,6 @@
 static Lisp_Object Qmargin, Qpointer;
 static Lisp_Object Qline_height;
 
-/* These setters are used only in this file, so they can be private.  */
-static void
-wset_base_line_number (struct window *w, Lisp_Object val)
-{
-  w->base_line_number = val;
-}
-static void
-wset_base_line_pos (struct window *w, Lisp_Object val)
-{
-  w->base_line_pos = val;
-}
-static void
-wset_column_number_displayed (struct window *w, Lisp_Object val)
-{
-  w->column_number_displayed = val;
-}
-static void
-wset_region_showing (struct window *w, Lisp_Object val)
-{
-  w->region_showing = val;
-}
-
 #ifdef HAVE_WINDOW_SYSTEM
 
 /* Test if overflow newline into fringe.  Called with iterator IT
@@ -10775,7 +10753,7 @@
 
   return (((BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)) != w->last_had_star)
          || ((!NILP (Vtransient_mark_mode) && !NILP (BVAR (b, mark_active)))
-             != !NILP (w->region_showing)));
+             != w->region_showing));
 }
 
 /* Nonzero if W has %c in its mode line and mode line should be updated.  */
@@ -10783,9 +10761,9 @@
 static int
 mode_line_update_needed (struct window *w)
 {
-  return (!NILP (w->column_number_displayed)
+  return (w->column_number_displayed != -1
          && !(PT == w->last_point && !window_outdated (w))
-         && (XFASTINT (w->column_number_displayed) != current_column ()));
+         && (w->column_number_displayed != current_column ()));
 }
 
 /***********************************************************************
@@ -13038,18 +13016,6 @@
       clear_garbaged_frames ();
     }
 
-
-  /* If showing the region, and mark has changed, we must redisplay
-     the whole window.  The assignment to this_line_start_pos prevents
-     the optimization directly below this if-statement.  */
-  if (((!NILP (Vtransient_mark_mode)
-       && !NILP (BVAR (XBUFFER (w->buffer), mark_active)))
-       != !NILP (w->region_showing))
-      || (!NILP (w->region_showing)
-         && !EQ (w->region_showing,
-                 Fmarker_position (BVAR (XBUFFER (w->buffer), mark)))))
-    CHARPOS (this_line_start_pos) = 0;
-
   /* Optimize the case that only the line containing the cursor in the
      selected window has changed.  Variables starting with this_ are
      set in display_line and record information about the line
@@ -13213,7 +13179,7 @@
               && (EQ (selected_window,
                       BVAR (current_buffer, last_selected_window))
                   || highlight_nonselected_windows)
-              && NILP (w->region_showing)
+              && !w->region_showing
               && NILP (Vshow_trailing_whitespace)
               && !cursor_in_echo_area)
        {
@@ -14710,7 +14676,7 @@
       if (!just_this_one_p
          || current_buffer->clip_changed
          || BEG_UNCHANGED < CHARPOS (startp))
-       wset_base_line_number (w, Qnil);
+       w->base_line_number = 0;
 
       /* If cursor ends up on a partially visible line,
         treat that as being off the bottom of the screen.  */
@@ -14859,7 +14825,7 @@
          region exists, cursor movement has to do more than just
          set the cursor.  */
       && markpos_of_region () < 0
-      && NILP (w->region_showing)
+      && !w->region_showing
       && NILP (Vshow_trailing_whitespace)
       /* This code is not used for mini-buffer for the sake of the case
         of redisplaying to replace an echo area message; since in
@@ -15425,7 +15391,7 @@
 
       /* Forget any recorded base line for line number display.  */
       if (!buffer_unchanged_p)
-       wset_base_line_number (w, Qnil);
+       w->base_line_number = 0;
 
       /* Redisplay the mode line.  Select the buffer properly for that.
         Also, run the hook window-scroll-functions
@@ -15665,7 +15631,7 @@
              || current_buffer->clip_changed
              || BEG_UNCHANGED < CHARPOS (startp))
            /* Forget any recorded base line for line number display.  */
-           wset_base_line_number (w, Qnil);
+           w->base_line_number = 0;
 
          if (!cursor_row_fully_visible_p (w, 1, 0))
            {
@@ -15732,11 +15698,9 @@
   debug_method_add (w, "recenter");
 #endif
 
-  /* w->vscroll = 0; */
-
   /* Forget any previously recorded base line for line number display.  */
   if (!buffer_unchanged_p)
-    wset_base_line_number (w, Qnil);
+    w->base_line_number = 0;
 
   /* Determine the window start relative to point.  */
   init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
@@ -15956,10 +15920,10 @@
           && !FRAME_WINDOW_P (f)
           && !WINDOW_FULL_WIDTH_P (w))
        /* Line number to display.  */
-       || INTEGERP (w->base_line_pos)
+       || w->base_line_pos > 0
        /* Column number is displayed and different from the one displayed.  */
-       || (!NILP (w->column_number_displayed)
-          && (XFASTINT (w->column_number_displayed) != current_column ())))
+       || (w->column_number_displayed != -1
+          && (w->column_number_displayed != current_column ())))
       /* This means that the window has a mode line.  */
       && (WINDOW_WANTS_MODELINE_P (w)
          || WINDOW_WANTS_HEADER_LINE_P (w)))
@@ -15990,11 +15954,10 @@
        goto need_larger_matrices;
     }
 
-  if (!line_number_displayed
-      && !BUFFERP (w->base_line_pos))
+  if (!line_number_displayed && w->base_line_pos != -1)
     {
-      wset_base_line_pos (w, Qnil);
-      wset_base_line_number (w, Qnil);
+      w->base_line_pos = 0;
+      w->base_line_number = 0;
     }
 
  finish_menu_bars:
@@ -16231,7 +16194,7 @@
 
   /* Can't do this if region may have changed.  */
   if (0 <= markpos_of_region ()
-      || !NILP (w->region_showing)
+      || w->region_showing
       || !NILP (Vshow_trailing_whitespace))
     return 0;
 
@@ -17070,7 +17033,7 @@
     GIVE_UP (11);
 
   /* Likewise if showing a region.  */
-  if (!NILP (w->region_showing))
+  if (w->region_showing)
     GIVE_UP (10);
 
   /* Can't use this if overlay arrow position and/or string have
@@ -19157,7 +19120,7 @@
     }
 
   /* Is IT->w showing the region?  */
-  wset_region_showing (it->w, it->region_beg_charpos > 0 ? Qt : Qnil);
+  it->w->region_showing = it->region_beg_charpos > 0;
 
   /* Clear the result glyph row and enable it.  */
   prepare_desired_row (row);
@@ -20161,7 +20124,7 @@
 
   /* These will be set while the mode line specs are processed.  */
   line_number_displayed = 0;
-  wset_column_number_displayed (w, Qnil);
+  w->column_number_displayed = -1;
 
   if (WINDOW_WANTS_MODELINE_P (w))
     {
@@ -21184,8 +21147,7 @@
    returned with spaces to that value.  Return a Lisp string in
    *STRING if the resulting string is taken from that Lisp string.
 
-   Note we operate on the current buffer for most purposes,
-   the exception being w->base_line_pos.  */
+   Note we operate on the current buffer for most purposes.  */
 
 static char lots_of_dashes[] = 
"--------------------------------------------------------------------------------------------------------------------------------------------";
 
@@ -21296,7 +21258,7 @@
       else
        {
          ptrdiff_t col = current_column ();
-         wset_column_number_displayed (w, make_number (col));
+         w->column_number_displayed = col;
          pint2str (decode_mode_spec_buf, width, col);
          return decode_mode_spec_buf;
        }
@@ -21355,27 +21317,24 @@
 
        /* If we decided that this buffer isn't suitable for line numbers,
           don't forget that too fast.  */
-       if (EQ (w->base_line_pos, w->buffer))
+       if (w->base_line_pos == -1)
          goto no_value;
-       /* But do forget it, if the window shows a different buffer now.  */
-       else if (BUFFERP (w->base_line_pos))
-         wset_base_line_pos (w, Qnil);
 
        /* If the buffer is very big, don't waste time.  */
        if (INTEGERP (Vline_number_display_limit)
            && BUF_ZV (b) - BUF_BEGV (b) > XINT (Vline_number_display_limit))
          {
-           wset_base_line_pos (w, Qnil);
-           wset_base_line_number (w, Qnil);
+           w->base_line_pos = 0;
+           w->base_line_number = 0;
            goto no_value;
          }
 
-       if (INTEGERP (w->base_line_number)
-           && INTEGERP (w->base_line_pos)
-           && XFASTINT (w->base_line_pos) <= startpos)
+       if (w->base_line_number > 0
+           && w->base_line_pos > 0
+           && w->base_line_pos <= startpos)
          {
-           line = XFASTINT (w->base_line_number);
-           linepos = XFASTINT (w->base_line_pos);
+           line = w->base_line_number;
+           linepos = w->base_line_pos;
            linepos_byte = buf_charpos_to_bytepos (b, linepos);
          }
        else
@@ -21398,8 +21357,8 @@
           go back past it.  */
        if (startpos == BUF_BEGV (b))
          {
-           wset_base_line_number (w, make_number (topline));
-           wset_base_line_pos (w, make_number (BUF_BEGV (b)));
+           w->base_line_number = topline;
+           w->base_line_pos = BUF_BEGV (b);
          }
        else if (nlines < height + 25 || nlines > height * 3 + 50
                 || linepos == BUF_BEGV (b))
@@ -21425,13 +21384,13 @@
               give up on line numbers for this window.  */
            if (position == limit_byte && limit == startpos - distance)
              {
-               wset_base_line_pos (w, w->buffer);
-               wset_base_line_number (w, Qnil);
+               w->base_line_pos = -1;
+               w->base_line_number = 0;
                goto no_value;
              }
 
-           wset_base_line_number (w, make_number (topline - nlines));
-           wset_base_line_pos (w, make_number (BYTE_TO_CHAR (position)));
+           w->base_line_number = topline - nlines;
+           w->base_line_pos = BYTE_TO_CHAR (position);
          }
 
        /* Now count lines from the start pos to point.  */


reply via email to

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