emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r109327: Generalize INTERNAL_FIELD be


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109327: Generalize INTERNAL_FIELD between buffers, keyboards and frames.
Date: Tue, 31 Jul 2012 16:36:19 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109327
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Tue 2012-07-31 16:36:19 +0400
message:
  Generalize INTERNAL_FIELD between buffers, keyboards and frames.
  * src/lisp.h (INTERNAL_FIELD): New macro.
  * src/buffer.h (BUFFER_INTERNAL_FIELD): Removed.
  (BVAR): Change to use INTERNAL_FIELD.
  * src/keyboard.h (KBOARD_INTERNAL_FIELD): Likewise.
  (KVAR): Change to use INTERNAL_FIELD.
  * src/frame.h (FVAR): New macro.
  (struct frame): Use INTERNAL_FIELD for all Lisp_Object fields.
  * src/alloc.c, src/buffer.c, src/data.c, src/dispnew.c, src/dosfns.c
  * src/eval.c, src/frame.c, src/fringe.c, src/gtkutil.c, src/minibuf.c
  * src/nsfns.m, src/nsterm.m, src/print.c, src/term.c, src/w32fns.c
  * src/w32menu.c, src/w32term.c, src/window.c, src/window.h, src/xdisp.c
  * src/xfaces.c, src/xfns.c, src/xmenu.c, src/xterm.c: Users changed.
  * admin/coccinelle/frame.cocci: Semantic patch to replace direct
  access to Lisp_Object members of struct frame to FVAR.
added:
  admin/coccinelle/frame.cocci
modified:
  admin/ChangeLog
  src/ChangeLog
  src/alloc.c
  src/buffer.c
  src/buffer.h
  src/data.c
  src/dispnew.c
  src/dosfns.c
  src/eval.c
  src/frame.c
  src/frame.h
  src/fringe.c
  src/gtkutil.c
  src/keyboard.h
  src/lisp.h
  src/minibuf.c
  src/nsfns.m
  src/nsterm.m
  src/print.c
  src/term.c
  src/w32fns.c
  src/w32menu.c
  src/w32term.c
  src/window.c
  src/window.h
  src/xdisp.c
  src/xfaces.c
  src/xfns.c
  src/xmenu.c
  src/xterm.c
=== modified file 'admin/ChangeLog'
--- a/admin/ChangeLog   2012-07-28 23:05:32 +0000
+++ b/admin/ChangeLog   2012-07-31 12:36:19 +0000
@@ -1,3 +1,8 @@
+2012-07-31  Dmitry Antipov  <address@hidden>
+
+       * coccinelle/frame.cocci: Semantic patch to replace direct
+       access to Lisp_Object members of struct frame to FVAR.
+
 2012-07-28  Paul Eggert  <address@hidden>
 
        Use Gnulib environ and stdalign modules (Bug#9772, Bug#9960).

=== added file 'admin/coccinelle/frame.cocci'
--- a/admin/coccinelle/frame.cocci      1970-01-01 00:00:00 +0000
+++ b/admin/coccinelle/frame.cocci      2012-07-31 12:36:19 +0000
@@ -0,0 +1,133 @@
+// Change direct access to Lisp_Object fields of struct frame to FVAR.
+@@
+expression F;
+@@
+(
+- F->icon_name
++ FVAR (F, icon_name)
+|
+- F->title
++ FVAR (F, title)
+|
+- F->focus_frame
++ FVAR (F, focus_frame)
+|
+- F->root_window
++ FVAR (F, root_window)
+|
+- F->selected_window
++ FVAR (F, selected_window)
+|
+- F->minibuffer_window
++ FVAR (F, minibuffer_window)
+|
+- F->param_alist
++ FVAR (F, param_alist)
+|
+- F->scroll_bars
++ FVAR (F, scroll_bars)
+|
+- F->condemned_scroll_bars
++ FVAR (F, condemned_scroll_bars)
+|
+- F->menu_bar_items
++ FVAR (F, menu_bar_items)
+|
+- F->face_alist
++ FVAR (F, face_alist)
+|
+- F->menu_bar_vector
++ FVAR (F, menu_bar_vector)
+|
+- F->buffer_predicate
++ FVAR (F, buffer_predicate)
+|
+- F->buffer_list
++ FVAR (F, buffer_list)
+|
+- F->buried_buffer_list
++ FVAR (F, buried_buffer_list)
+|
+- F->menu_bar_window
++ FVAR (F, menu_bar_window)
+|
+- F->tool_bar_window
++ FVAR (F, tool_bar_window)
+|
+- F->tool_bar_items
++ FVAR (F, tool_bar_items)
+|
+- F->tool_bar_position
++ FVAR (F, tool_bar_position)
+|
+- F->desired_tool_bar_string
++ FVAR (F, desired_tool_bar_string)
+|
+- F->current_tool_bar_string
++ FVAR (F, current_tool_bar_string)
+
+|
+
+- XFRAME (F)->icon_name
++ FVAR (XFRAME (F), icon_name)
+|
+- XFRAME (F)->title
++ FVAR (XFRAME (F), title)
+|
+- XFRAME (F)->focus_frame
++ FVAR (XFRAME (F), focus_frame)
+|
+- XFRAME (F)->root_window
++ FVAR (XFRAME (F), root_window)
+|
+- XFRAME (F)->selected_window
++ FVAR (XFRAME (F), selected_window)
+|
+- XFRAME (F)->minibuffer_window
++ FVAR (XFRAME (F), minibuffer_window)
+|
+- XFRAME (F)->param_alist
++ FVAR (XFRAME (F), param_alist)
+|
+- XFRAME (F)->scroll_bars
++ FVAR (XFRAME (F), scroll_bars)
+|
+- XFRAME (F)->condemned_scroll_bars
++ FVAR (XFRAME (F), condemned_scroll_bars)
+|
+- XFRAME (F)->menu_bar_items
++ FVAR (XFRAME (F), menu_bar_items)
+|
+- XFRAME (F)->face_alist
++ FVAR (XFRAME (F), face_alist)
+|
+- XFRAME (F)->menu_bar_vector
++ FVAR (XFRAME (F), menu_bar_vector)
+|
+- XFRAME (F)->buffer_predicate
++ FVAR (XFRAME (F), buffer_predicate)
+|
+- XFRAME (F)->buffer_list
++ FVAR (XFRAME (F), buffer_list)
+|
+- XFRAME (F)->buried_buffer_list
++ FVAR (XFRAME (F), buried_buffer_list)
+|
+- XFRAME (F)->menu_bar_window
++ FVAR (XFRAME (F), menu_bar_window)
+|
+- XFRAME (F)->tool_bar_window
++ FVAR (XFRAME (F), tool_bar_window)
+|
+- XFRAME (F)->tool_bar_items
++ FVAR (XFRAME (F), tool_bar_items)
+|
+- XFRAME (F)->tool_bar_position
++ FVAR (XFRAME (F), tool_bar_position)
+|
+- XFRAME (F)->desired_tool_bar_string
++ FVAR (XFRAME (F), desired_tool_bar_string)
+|
+- XFRAME (F)->current_tool_bar_string
++ FVAR (XFRAME (F), current_tool_bar_string)
+)

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-07-31 11:37:38 +0000
+++ b/src/ChangeLog     2012-07-31 12:36:19 +0000
@@ -1,5 +1,20 @@
 2012-07-31  Dmitry Antipov  <address@hidden>
 
+       Generalize INTERNAL_FIELD between buffers, keyboards and frames.
+       * lisp.h (INTERNAL_FIELD): New macro.
+       * buffer.h (BUFFER_INTERNAL_FIELD): Removed.
+       (BVAR): Change to use INTERNAL_FIELD.
+       * keyboard.h (KBOARD_INTERNAL_FIELD): Likewise.
+       (KVAR): Change to use INTERNAL_FIELD.
+       * frame.h (FVAR): New macro.
+       (struct frame): Use INTERNAL_FIELD for all Lisp_Object fields.
+       * alloc.c, buffer.c, data.c, dispnew.c, dosfns.c, eval.c, frame.c
+       * fringe.c, gtkutil.c, minibuf.c, nsfns.m, nsterm.m, print.c
+       * term.c, w32fns.c, w32menu.c, w32term.c, window.c, window.h,
+       * xdisp.c, xfaces.c, xfns.c, xmenu.c, xterm.c: Users changed.
+
+2012-07-31  Dmitry Antipov  <address@hidden>
+
        Miscellaneous fixes for non-default X toolkits.
        * xfns.c (Fx_file_dialog): Change to SSDATA to avoid warnings.
        * xterm.c (x_frame_of_widget): Remove redundant prototype.

=== modified file 'src/alloc.c'
--- a/src/alloc.c       2012-07-30 18:56:42 +0000
+++ b/src/alloc.c       2012-07-31 12:36:19 +0000
@@ -4424,7 +4424,7 @@
      must not have been killed.  */
   return (m->type == MEM_TYPE_BUFFER
          && p == m->start
-         && !NILP (((struct buffer *) p)->BUFFER_INTERNAL_FIELD (name)));
+         && !NILP (((struct buffer *) p)->INTERNAL_FIELD (name)));
 }
 
 #endif /* GC_MARK_STACK || defined GC_MALLOC_CHECK */
@@ -5549,10 +5549,10 @@
         turned off in that buffer.  Calling truncate_undo_list on
         Qt tends to return NULL, which effectively turns undo back on.
         So don't call truncate_undo_list if undo_list is Qt.  */
-      if (! EQ (nextb->BUFFER_INTERNAL_FIELD (undo_list), Qt))
+      if (! EQ (nextb->INTERNAL_FIELD (undo_list), Qt))
        {
          Lisp_Object tail, prev;
-         tail = nextb->BUFFER_INTERNAL_FIELD (undo_list);
+         tail = nextb->INTERNAL_FIELD (undo_list);
          prev = Qnil;
          while (CONSP (tail))
            {
@@ -5561,7 +5561,7 @@
                  && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
                {
                  if (NILP (prev))
-                   nextb->BUFFER_INTERNAL_FIELD (undo_list) = tail = XCDR 
(tail);
+                   nextb->INTERNAL_FIELD (undo_list) = tail = XCDR (tail);
                  else
                    {
                      tail = XCDR (tail);
@@ -5577,7 +5577,7 @@
        }
       /* Now that we have stripped the elements that need not be in the
         undo_list any more, we can finally mark the list.  */
-      mark_object (nextb->BUFFER_INTERNAL_FIELD (undo_list));
+      mark_object (nextb->INTERNAL_FIELD (undo_list));
     }
 
   gc_sweep ();

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2012-07-29 22:42:12 +0000
+++ b/src/buffer.c      2012-07-31 12:36:19 +0000
@@ -191,9 +191,9 @@
       Lisp_Object args[3];
 
       CHECK_FRAME (frame);
-      framelist = Fcopy_sequence (XFRAME (frame)->buffer_list);
+      framelist = Fcopy_sequence (FVAR (XFRAME (frame), buffer_list));
       prevlist = Fnreverse (Fcopy_sequence
-                           (XFRAME (frame)->buried_buffer_list));
+                           (FVAR (XFRAME (frame), buried_buffer_list)));
 
       /* Remove from GENERAL any buffer that duplicates one in
          FRAMELIST or PREVLIST.  */
@@ -1324,7 +1324,7 @@
 
   pred = frame_buffer_predicate (frame);
   /* Consider buffers that have been seen in the frame first.  */
-  tail = XFRAME (frame)->buffer_list;
+  tail = FVAR (XFRAME (frame), buffer_list);
   for (; CONSP (tail); tail = XCDR (tail))
     {
       buf = XCAR (tail);
@@ -1446,7 +1446,7 @@
 
   /* Skip dead buffers, indirect buffers and buffers
      which aren't changed since last compaction.  */
-  if (!NILP (buffer->BUFFER_INTERNAL_FIELD (name))
+  if (!NILP (buffer->INTERNAL_FIELD (name))
       && (buffer->base_buffer == NULL)
       && (buffer->text->compact != buffer->text->modiff))
     {
@@ -1454,7 +1454,7 @@
         turned off in that buffer.  Calling truncate_undo_list on
         Qt tends to return NULL, which effectively turns undo back on.
         So don't call truncate_undo_list if undo_list is Qt.  */
-      if (!EQ (buffer->BUFFER_INTERNAL_FIELD (undo_list), Qt))
+      if (!EQ (buffer->INTERNAL_FIELD (undo_list), Qt))
        truncate_undo_list (buffer);
 
       /* Shrink buffer gaps.  */
@@ -1764,8 +1764,8 @@
   Vinhibit_quit = tem;
 
   /* Update buffer list of selected frame.  */
-  f->buffer_list = Fcons (buffer, Fdelq (buffer, f->buffer_list));
-  f->buried_buffer_list = Fdelq (buffer, f->buried_buffer_list);
+  FVAR (f, buffer_list) = Fcons (buffer, Fdelq (buffer, FVAR (f, 
buffer_list)));
+  FVAR (f, buried_buffer_list) = Fdelq (buffer, FVAR (f, buried_buffer_list));
 
   /* Run buffer-list-update-hook.  */
   if (!NILP (Vrun_hooks))
@@ -1802,8 +1802,9 @@
   Vinhibit_quit = tem;
 
   /* Update buffer lists of selected frame.  */
-  f->buffer_list = Fdelq (buffer, f->buffer_list);
-  f->buried_buffer_list = Fcons (buffer, Fdelq (buffer, 
f->buried_buffer_list));
+  FVAR (f, buffer_list) = Fdelq (buffer, FVAR (f, buffer_list));
+  FVAR (f, buried_buffer_list)
+    = Fcons (buffer, Fdelq (buffer, FVAR (f, buried_buffer_list)));
 
   /* Run buffer-list-update-hook.  */
   if (!NILP (Vrun_hooks))

=== modified file 'src/buffer.h'
--- a/src/buffer.h      2012-07-22 03:44:35 +0000
+++ b/src/buffer.h      2012-07-31 12:36:19 +0000
@@ -472,14 +472,9 @@
     int inhibit_shrinking;
   };
 
-/* Lisp fields in struct buffer are hidden from most code and accessed
-   via the BVAR macro, below.  Only select pieces of code, like the GC,
-   are allowed to use BUFFER_INTERNAL_FIELD.  */
-#define BUFFER_INTERNAL_FIELD(field) field ## _
+/* Most code should use this macro to access Lisp fields in struct buffer.  */
 
-/* Most code should use this macro to access Lisp fields in struct
-   buffer.  */
-#define BVAR(buf, field) ((buf)->BUFFER_INTERNAL_FIELD (field))
+#define BVAR(buf, field) ((buf)->INTERNAL_FIELD (field))
 
 /* This is the structure that the buffer Lisp object points to.  */
 
@@ -493,17 +488,17 @@
   struct vectorlike_header header;
 
   /* The name of this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (name);
+  Lisp_Object INTERNAL_FIELD (name);
 
   /* The name of the file visited in this buffer, or nil.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (filename);
+  Lisp_Object INTERNAL_FIELD (filename);
 
   /* Directory for expanding relative file names.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (directory);
+  Lisp_Object INTERNAL_FIELD (directory);
 
   /* True if this buffer has been backed up (if you write to the visited
      file and it hasn't been backed up, then a backup will be made).  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (backed_up);
+  Lisp_Object INTERNAL_FIELD (backed_up);
 
   /* Length of file when last read or saved.
      -1 means auto saving turned off because buffer shrank a lot.
@@ -511,132 +506,132 @@
        (That value is used with buffer-swap-text.)
      This is not in the  struct buffer_text
      because it's not used in indirect buffers at all.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (save_length);
+  Lisp_Object INTERNAL_FIELD (save_length);
 
   /* File name used for auto-saving this buffer.
      This is not in the  struct buffer_text
      because it's not used in indirect buffers at all.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (auto_save_file_name);
+  Lisp_Object INTERNAL_FIELD (auto_save_file_name);
 
   /* Non-nil if buffer read-only.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (read_only);
+  Lisp_Object INTERNAL_FIELD (read_only);
 
   /* "The mark".  This is a marker which may
      point into this buffer or may point nowhere.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (mark);
+  Lisp_Object INTERNAL_FIELD (mark);
 
   /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER) for all
      per-buffer variables of this buffer.  For locally unbound
      symbols, just the symbol appears as the element.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (local_var_alist);
+  Lisp_Object INTERNAL_FIELD (local_var_alist);
 
   /* Symbol naming major mode (e.g., lisp-mode).  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (major_mode);
+  Lisp_Object INTERNAL_FIELD (major_mode);
 
   /* Pretty name of major mode (e.g., "Lisp"). */
-  Lisp_Object BUFFER_INTERNAL_FIELD (mode_name);
+  Lisp_Object INTERNAL_FIELD (mode_name);
 
   /* Mode line element that controls format of mode line.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (mode_line_format);
+  Lisp_Object INTERNAL_FIELD (mode_line_format);
 
   /* Analogous to mode_line_format for the line displayed at the top
      of windows.  Nil means don't display that line.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (header_line_format);
+  Lisp_Object INTERNAL_FIELD (header_line_format);
 
   /* Keys that are bound local to this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (keymap);
+  Lisp_Object INTERNAL_FIELD (keymap);
 
   /* This buffer's local abbrev table.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (abbrev_table);
+  Lisp_Object INTERNAL_FIELD (abbrev_table);
 
   /* This buffer's syntax table.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (syntax_table);
+  Lisp_Object INTERNAL_FIELD (syntax_table);
 
   /* This buffer's category table.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (category_table);
+  Lisp_Object INTERNAL_FIELD (category_table);
 
   /* Values of several buffer-local variables.  */
   /* tab-width is buffer-local so that redisplay can find it
      in buffers that are not current.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (case_fold_search);
-  Lisp_Object BUFFER_INTERNAL_FIELD (tab_width);
-  Lisp_Object BUFFER_INTERNAL_FIELD (fill_column);
-  Lisp_Object BUFFER_INTERNAL_FIELD (left_margin);
+  Lisp_Object INTERNAL_FIELD (case_fold_search);
+  Lisp_Object INTERNAL_FIELD (tab_width);
+  Lisp_Object INTERNAL_FIELD (fill_column);
+  Lisp_Object INTERNAL_FIELD (left_margin);
 
   /* Function to call when insert space past fill column.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (auto_fill_function);
+  Lisp_Object INTERNAL_FIELD (auto_fill_function);
 
   /* Case table for case-conversion in this buffer.
      This char-table maps each char into its lower-case version.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (downcase_table);
+  Lisp_Object INTERNAL_FIELD (downcase_table);
 
   /* Char-table mapping each char to its upper-case version.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (upcase_table);
+  Lisp_Object INTERNAL_FIELD (upcase_table);
 
   /* Char-table for conversion for case-folding search.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (case_canon_table);
+  Lisp_Object INTERNAL_FIELD (case_canon_table);
 
   /* Char-table of equivalences for case-folding search.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (case_eqv_table);
+  Lisp_Object INTERNAL_FIELD (case_eqv_table);
 
   /* Non-nil means do not display continuation lines.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (truncate_lines);
+  Lisp_Object INTERNAL_FIELD (truncate_lines);
 
   /* Non-nil means to use word wrapping when displaying continuation lines.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (word_wrap);
+  Lisp_Object INTERNAL_FIELD (word_wrap);
 
   /* Non-nil means display ctl chars with uparrow.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (ctl_arrow);
+  Lisp_Object INTERNAL_FIELD (ctl_arrow);
 
   /* Non-nil means reorder bidirectional text for display in the
      visual order.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (bidi_display_reordering);
+  Lisp_Object INTERNAL_FIELD (bidi_display_reordering);
 
   /* If non-nil, specifies which direction of text to force in all the
      paragraphs of the buffer.  Nil means determine paragraph
      direction dynamically for each paragraph.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (bidi_paragraph_direction);
+  Lisp_Object INTERNAL_FIELD (bidi_paragraph_direction);
 
   /* Non-nil means do selective display;
      see doc string in syms_of_buffer (buffer.c) for details.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (selective_display);
+  Lisp_Object INTERNAL_FIELD (selective_display);
 
   /* Non-nil means show ... at end of line followed by invisible lines.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (selective_display_ellipses);
+  Lisp_Object INTERNAL_FIELD (selective_display_ellipses);
 
   /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (minor_modes);
+  Lisp_Object INTERNAL_FIELD (minor_modes);
 
   /* t if "self-insertion" should overwrite; `binary' if it should also
      overwrite newlines and tabs - for editing executables and the like.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (overwrite_mode);
+  Lisp_Object INTERNAL_FIELD (overwrite_mode);
 
   /* Non-nil means abbrev mode is on.  Expand abbrevs automatically.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (abbrev_mode);
+  Lisp_Object INTERNAL_FIELD (abbrev_mode);
 
   /* Display table to use for text in this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (display_table);
+  Lisp_Object INTERNAL_FIELD (display_table);
 
   /* t means the mark and region are currently active.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (mark_active);
+  Lisp_Object INTERNAL_FIELD (mark_active);
 
   /* Non-nil means the buffer contents are regarded as multi-byte
      form of characters, not a binary code.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (enable_multibyte_characters);
+  Lisp_Object INTERNAL_FIELD (enable_multibyte_characters);
 
   /* Coding system to be used for encoding the buffer contents on
      saving.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (buffer_file_coding_system);
+  Lisp_Object INTERNAL_FIELD (buffer_file_coding_system);
 
   /* List of symbols naming the file format used for visited file.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (file_format);
+  Lisp_Object INTERNAL_FIELD (file_format);
 
   /* List of symbols naming the file format used for auto-save file.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (auto_save_file_format);
+  Lisp_Object INTERNAL_FIELD (auto_save_file_format);
 
   /* True if the newline position cache and width run cache are
      enabled.  See search.c and indent.c.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (cache_long_line_scans);
+  Lisp_Object INTERNAL_FIELD (cache_long_line_scans);
 
   /* If the width run cache is enabled, this table contains the
      character widths width_run_cache (see above) assumes.  When we
@@ -644,102 +639,102 @@
      current display table to see whether the display table has
      affected the widths of any characters.  If it has, we
      invalidate the width run cache, and re-initialize width_table.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (width_table);
+  Lisp_Object INTERNAL_FIELD (width_table);
 
   /* In an indirect buffer, or a buffer that is the base of an
      indirect buffer, this holds a marker that records
      PT for this buffer when the buffer is not current.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (pt_marker);
+  Lisp_Object INTERNAL_FIELD (pt_marker);
 
   /* In an indirect buffer, or a buffer that is the base of an
      indirect buffer, this holds a marker that records
      BEGV for this buffer when the buffer is not current.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (begv_marker);
+  Lisp_Object INTERNAL_FIELD (begv_marker);
 
   /* In an indirect buffer, or a buffer that is the base of an
      indirect buffer, this holds a marker that records
      ZV for this buffer when the buffer is not current.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (zv_marker);
+  Lisp_Object INTERNAL_FIELD (zv_marker);
 
   /* This holds the point value before the last scroll operation.
      Explicitly setting point sets this to nil.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (point_before_scroll);
+  Lisp_Object INTERNAL_FIELD (point_before_scroll);
 
   /* Truename of the visited file, or nil.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (file_truename);
+  Lisp_Object INTERNAL_FIELD (file_truename);
 
   /* Invisibility spec of this buffer.
      t => any non-nil `invisible' property means invisible.
      A list => `invisible' property means invisible
      if it is memq in that list.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (invisibility_spec);
+  Lisp_Object INTERNAL_FIELD (invisibility_spec);
 
   /* This is the last window that was selected with this buffer in it,
      or nil if that window no longer displays this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (last_selected_window);
+  Lisp_Object INTERNAL_FIELD (last_selected_window);
 
   /* Incremented each time the buffer is displayed in a window.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (display_count);
+  Lisp_Object INTERNAL_FIELD (display_count);
 
   /* Widths of left and right marginal areas for windows displaying
      this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (left_margin_cols);
-  Lisp_Object BUFFER_INTERNAL_FIELD (right_margin_cols);
+  Lisp_Object INTERNAL_FIELD (left_margin_cols);
+  Lisp_Object INTERNAL_FIELD (right_margin_cols);
 
   /* Widths of left and right fringe areas for windows displaying
      this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (left_fringe_width);
-  Lisp_Object BUFFER_INTERNAL_FIELD (right_fringe_width);
+  Lisp_Object INTERNAL_FIELD (left_fringe_width);
+  Lisp_Object INTERNAL_FIELD (right_fringe_width);
 
   /* Non-nil means fringes are drawn outside display margins;
      othersize draw them between margin areas and text.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (fringes_outside_margins);
+  Lisp_Object INTERNAL_FIELD (fringes_outside_margins);
 
   /* Width and type of scroll bar areas for windows displaying
      this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (scroll_bar_width);
-  Lisp_Object BUFFER_INTERNAL_FIELD (vertical_scroll_bar_type);
+  Lisp_Object INTERNAL_FIELD (scroll_bar_width);
+  Lisp_Object INTERNAL_FIELD (vertical_scroll_bar_type);
 
   /* Non-nil means indicate lines not displaying text (in a style
      like vi).  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (indicate_empty_lines);
+  Lisp_Object INTERNAL_FIELD (indicate_empty_lines);
 
   /* Non-nil means indicate buffer boundaries and scrolling.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (indicate_buffer_boundaries);
+  Lisp_Object INTERNAL_FIELD (indicate_buffer_boundaries);
 
   /* Logical to physical fringe bitmap mappings.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (fringe_indicator_alist);
+  Lisp_Object INTERNAL_FIELD (fringe_indicator_alist);
 
   /* Logical to physical cursor bitmap mappings.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (fringe_cursor_alist);
+  Lisp_Object INTERNAL_FIELD (fringe_cursor_alist);
 
   /* Time stamp updated each time this buffer is displayed in a window.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (display_time);
+  Lisp_Object INTERNAL_FIELD (display_time);
 
   /* If scrolling the display because point is below the bottom of a
      window showing this buffer, try to choose a window start so
      that point ends up this number of lines from the top of the
      window.  Nil means that scrolling method isn't used.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (scroll_up_aggressively);
+  Lisp_Object INTERNAL_FIELD (scroll_up_aggressively);
 
   /* If scrolling the display because point is above the top of a
      window showing this buffer, try to choose a window start so
      that point ends up this number of lines from the bottom of the
      window.  Nil means that scrolling method isn't used.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (scroll_down_aggressively);
+  Lisp_Object INTERNAL_FIELD (scroll_down_aggressively);
 
   /* Desired cursor type in this buffer.  See the doc string of
      per-buffer variable `cursor-type'.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (cursor_type);
+  Lisp_Object INTERNAL_FIELD (cursor_type);
 
   /* An integer > 0 means put that number of pixels below text lines
      in the display of this buffer.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (extra_line_spacing);
+  Lisp_Object INTERNAL_FIELD (extra_line_spacing);
 
   /* Cursor type to display in non-selected windows.
      t means to use hollow box cursor.
      See `cursor-type' for other values.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (cursor_in_non_selected_windows);
+  Lisp_Object INTERNAL_FIELD (cursor_in_non_selected_windows);
 
   /* No more Lisp_Object beyond this point.  Except undo_list,
      which is handled specially in Fgarbage_collect .  */
@@ -861,7 +856,7 @@
      buffer of an indirect buffer.  But we can't store it in the
      struct buffer_text because local variables have to be right in
      the struct buffer. So we copy it around in set_buffer_internal.  */
-  Lisp_Object BUFFER_INTERNAL_FIELD (undo_list);
+  Lisp_Object INTERNAL_FIELD (undo_list);
 };
 
 
@@ -1020,7 +1015,7 @@
    from the start of a buffer structure.  */
 
 #define PER_BUFFER_VAR_OFFSET(VAR) \
-  offsetof (struct buffer, BUFFER_INTERNAL_FIELD (VAR))
+  offsetof (struct buffer, INTERNAL_FIELD (VAR))
 
 /* Used to iterate over normal Lisp_Object fields of struct buffer (all
    Lisp_Objects except undo_list).  If you add, remove, or reorder

=== modified file 'src/data.c'
--- a/src/data.c        2012-07-30 18:56:42 +0000
+++ b/src/data.c        2012-07-31 12:36:19 +0000
@@ -1006,7 +1006,7 @@
        XSETSYMBOL (var, symbol);
        if (blv->frame_local)
          {
-           tem1 = assq_no_quit (var, XFRAME (selected_frame)->param_alist);
+           tem1 = assq_no_quit (var, FVAR (XFRAME (selected_frame), 
param_alist));
            blv->where = selected_frame;
          }
        else
@@ -1179,7 +1179,7 @@
            XSETSYMBOL (symbol, sym); /* May have changed via aliasing.  */
            tem1 = Fassq (symbol,
                          (blv->frame_local
-                          ? XFRAME (where)->param_alist
+                          ? FVAR (XFRAME (where), param_alist)
                           : BVAR (XBUFFER (where), local_var_alist)));
            blv->where = where;
            blv->found = 1;

=== modified file 'src/dispnew.c'
--- a/src/dispnew.c     2012-07-10 23:24:36 +0000
+++ b/src/dispnew.c     2012-07-31 12:36:19 +0000
@@ -841,12 +841,12 @@
   /* Clear the matrix of the menu bar window, if such a window exists.
      The menu bar window is currently used to display menus on X when
      no toolkit support is compiled in.  */
-  if (WINDOWP (f->menu_bar_window))
-    clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);
+  if (WINDOWP (FVAR (f, menu_bar_window)))
+    clear_glyph_matrix (XWINDOW (FVAR (f, menu_bar_window))->current_matrix);
 
   /* Clear the matrix of the tool-bar window, if any.  */
-  if (WINDOWP (f->tool_bar_window))
-    clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix);
+  if (WINDOWP (FVAR (f, tool_bar_window)))
+    clear_glyph_matrix (XWINDOW (FVAR (f, tool_bar_window))->current_matrix);
 
   /* Clear current window matrices.  */
   eassert (WINDOWP (FRAME_ROOT_WINDOW (f)));
@@ -862,11 +862,11 @@
   if (f->desired_matrix)
     clear_glyph_matrix (f->desired_matrix);
 
-  if (WINDOWP (f->menu_bar_window))
-    clear_glyph_matrix (XWINDOW (f->menu_bar_window)->desired_matrix);
+  if (WINDOWP (FVAR (f, menu_bar_window)))
+    clear_glyph_matrix (XWINDOW (FVAR (f, menu_bar_window))->desired_matrix);
 
-  if (WINDOWP (f->tool_bar_window))
-    clear_glyph_matrix (XWINDOW (f->tool_bar_window)->desired_matrix);
+  if (WINDOWP (FVAR (f, tool_bar_window)))
+    clear_glyph_matrix (XWINDOW (FVAR (f, tool_bar_window))->desired_matrix);
 
   /* Do it for window matrices.  */
   eassert (WINDOWP (FRAME_ROOT_WINDOW (f)));
@@ -1901,7 +1901,7 @@
 adjust_frame_glyphs_initially (void)
 {
   struct frame *sf = SELECTED_FRAME ();
-  struct window *root = XWINDOW (sf->root_window);
+  struct window *root = XWINDOW (FVAR (sf, root_window));
   struct window *mini = XWINDOW (root->next);
   int frame_lines = FRAME_LINES (sf);
   int frame_cols = FRAME_COLS (sf);
@@ -2184,15 +2184,15 @@
   {
     /* Allocate a dummy window if not already done.  */
     struct window *w;
-    if (NILP (f->menu_bar_window))
+    if (NILP (FVAR (f, menu_bar_window)))
       {
-       f->menu_bar_window = make_window ();
-       w = XWINDOW (f->menu_bar_window);
+       FVAR (f, menu_bar_window) = make_window ();
+       w = XWINDOW (FVAR (f, menu_bar_window));
        XSETFRAME (w->frame, f);
        w->pseudo_window_p = 1;
       }
     else
-      w = XWINDOW (f->menu_bar_window);
+      w = XWINDOW (FVAR (f, menu_bar_window));
 
     /* Set window dimensions to frame dimensions and allocate or
        adjust glyph matrices of W.  */
@@ -2210,15 +2210,15 @@
     /* Allocate/ reallocate matrices of the tool bar window.  If we
        don't have a tool bar window yet, make one.  */
     struct window *w;
-    if (NILP (f->tool_bar_window))
+    if (NILP (FVAR (f, tool_bar_window)))
       {
-       f->tool_bar_window = make_window ();
-       w = XWINDOW (f->tool_bar_window);
+       FVAR (f, tool_bar_window) = make_window ();
+       w = XWINDOW (FVAR (f, tool_bar_window));
        XSETFRAME (w->frame, f);
        w->pseudo_window_p = 1;
       }
     else
-      w = XWINDOW (f->tool_bar_window);
+      w = XWINDOW (FVAR (f, tool_bar_window));
 
     XSETFASTINT (w->top_line, FRAME_MENU_BAR_LINES (f));
     XSETFASTINT (w->left_col, 0);
@@ -2278,28 +2278,28 @@
       f->glyphs_initialized_p = 0;
 
       /* Release window sub-matrices.  */
-      if (!NILP (f->root_window))
-        free_window_matrices (XWINDOW (f->root_window));
+      if (!NILP (FVAR (f, root_window)))
+        free_window_matrices (XWINDOW (FVAR (f, root_window)));
 
       /* Free the dummy window for menu bars without X toolkit and its
         glyph matrices.  */
-      if (!NILP (f->menu_bar_window))
+      if (!NILP (FVAR (f, menu_bar_window)))
        {
-         struct window *w = XWINDOW (f->menu_bar_window);
+         struct window *w = XWINDOW (FVAR (f, menu_bar_window));
          free_glyph_matrix (w->desired_matrix);
          free_glyph_matrix (w->current_matrix);
          w->desired_matrix = w->current_matrix = NULL;
-         f->menu_bar_window = Qnil;
+         FVAR (f, menu_bar_window) = Qnil;
        }
 
       /* Free the tool bar window and its glyph matrices.  */
-      if (!NILP (f->tool_bar_window))
+      if (!NILP (FVAR (f, tool_bar_window)))
        {
-         struct window *w = XWINDOW (f->tool_bar_window);
+         struct window *w = XWINDOW (FVAR (f, tool_bar_window));
          free_glyph_matrix (w->desired_matrix);
          free_glyph_matrix (w->current_matrix);
          w->desired_matrix = w->current_matrix = NULL;
-         f->tool_bar_window = Qnil;
+         FVAR (f, tool_bar_window) = Qnil;
        }
 
       /* Release frame glyph matrices.  Reset fields to zero in
@@ -2722,7 +2722,7 @@
   /* If we are called on frame matrices, perform analogous operations
      for window matrices.  */
   if (frame_matrix_frame)
-    mirror_make_current (XWINDOW (frame_matrix_frame->root_window), row);
+    mirror_make_current (XWINDOW (FVAR (frame_matrix_frame, root_window)), 
row);
 }
 
 
@@ -2820,7 +2820,7 @@
 
   /* Do the same for window matrices, if MATRIX is a frame matrix.  */
   if (frame_matrix_frame)
-    mirror_line_dance (XWINDOW (frame_matrix_frame->root_window),
+    mirror_line_dance (XWINDOW (FVAR (frame_matrix_frame, root_window)),
                       unchanged_at_top, nlines, copy_from, retained_p);
 }
 
@@ -3183,7 +3183,7 @@
 {
   /* 1 means display has been paused because of pending input.  */
   int paused_p;
-  struct window *root_window = XWINDOW (f->root_window);
+  struct window *root_window = XWINDOW (FVAR (f, root_window));
 
   if (redisplay_dont_pause)
     force_p = 1;
@@ -3218,13 +3218,13 @@
 
       /* Update the menu bar on X frames that don't have toolkit
         support.  */
-      if (WINDOWP (f->menu_bar_window))
-       update_window (XWINDOW (f->menu_bar_window), 1);
+      if (WINDOWP (FVAR (f, menu_bar_window)))
+       update_window (XWINDOW (FVAR (f, menu_bar_window)), 1);
 
       /* Update the tool-bar window, if present.  */
-      if (WINDOWP (f->tool_bar_window))
+      if (WINDOWP (FVAR (f, tool_bar_window)))
        {
-         struct window *w = XWINDOW (f->tool_bar_window);
+         struct window *w = XWINDOW (FVAR (f, tool_bar_window));
 
          /* Update tool-bar window.  */
          if (w->must_be_updated_p)
@@ -3236,9 +3236,10 @@
 
              /* Swap tool-bar strings.  We swap because we want to
                 reuse strings.  */
-             tem = f->current_tool_bar_string;
-             f->current_tool_bar_string = f->desired_tool_bar_string;
-             f->desired_tool_bar_string = tem;
+             tem = FVAR (f, current_tool_bar_string);
+             FVAR (f, current_tool_bar_string) = FVAR (f,
+                                                      desired_tool_bar_string);
+             FVAR (f, desired_tool_bar_string) = tem;
            }
        }
 
@@ -5759,8 +5760,8 @@
       if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f))
        FrameCols (FRAME_TTY (f)) = newwidth;
 
-      if (WINDOWP (f->tool_bar_window))
-       XSETFASTINT (XWINDOW (f->tool_bar_window)->total_cols, newwidth);
+      if (WINDOWP (FVAR (f, tool_bar_window)))
+       XSETFASTINT (XWINDOW (FVAR (f, tool_bar_window))->total_cols, newwidth);
     }
 
   FRAME_LINES (f) = newheight;
@@ -6084,7 +6085,7 @@
        goto changed;
       if (vecp == end)
        goto changed;
-      if (!EQ (*vecp++, XFRAME (frame)->name))
+      if (!EQ (*vecp++, FVAR (XFRAME (frame), name)))
        goto changed;
     }
   /* Check that the buffer info matches.  */
@@ -6141,7 +6142,7 @@
   FOR_EACH_FRAME (tail, frame)
     {
       *vecp++ = frame;
-      *vecp++ = XFRAME (frame)->name;
+      *vecp++ = FVAR (XFRAME (frame), name);
     }
   for (tail = Vbuffer_alist; CONSP (tail); tail = XCDR (tail))
     {

=== modified file 'src/dosfns.c'
--- a/src/dosfns.c      2012-07-20 07:29:04 +0000
+++ b/src/dosfns.c      2012-07-31 12:36:19 +0000
@@ -468,15 +468,15 @@
 x_set_title (struct frame *f, Lisp_Object name)
 {
   /* Don't change the title if it's already NAME.  */
-  if (EQ (name, f->title))
+  if (EQ (name, FVAR (f, title)))
     return;
 
   update_mode_lines = 1;
 
-  f->title = name;
+  FVAR (f, title) = name;
 
   if (NILP (name))
-    name = f->name;
+    name = FVAR (f, name);
 
   if (FRAME_MSDOS_P (f))
     {

=== modified file 'src/eval.c'
--- a/src/eval.c        2012-07-29 17:14:51 +0000
+++ b/src/eval.c        2012-07-31 12:36:19 +0000
@@ -3254,7 +3254,7 @@
             local binding, but only if that binding still exists.  */
          else if (BUFFERP (where)
                   ? !NILP (Flocal_variable_p (symbol, where))
-                  : !NILP (Fassq (symbol, XFRAME (where)->param_alist)))
+                  : !NILP (Fassq (symbol, FVAR (XFRAME (where), param_alist))))
            set_internal (symbol, this_binding.old_value, where, 1);
        }
       /* If variable has a trivial value (no forwarding), we can

=== modified file 'src/frame.c'
--- a/src/frame.c       2012-07-25 09:34:48 +0000
+++ b/src/frame.c       2012-07-31 12:36:19 +0000
@@ -170,7 +170,7 @@
       windows_or_buffers_changed++;
       FRAME_WINDOW_SIZES_CHANGED (f) = 1;
       FRAME_MENU_BAR_LINES (f) = nlines;
-      set_menu_bar_lines_1 (f->root_window, nlines - olines);
+      set_menu_bar_lines_1 (FVAR (f, root_window), nlines - olines);
       adjust_glyphs (f);
     }
 }
@@ -269,7 +269,7 @@
 
   /* Initialize Lisp data.  Note that allocate_frame initializes all
      Lisp data to nil, so do it only for slots which should not be nil.  */
-  f->tool_bar_position = Qtop;
+  FVAR (f, tool_bar_position) = Qtop;
 
   /* Initialize non-Lisp data.  Note that allocate_frame zeroes out all
      non-Lisp data, so do it only for slots which should not be zero.
@@ -293,13 +293,13 @@
       XWINDOW (mini_window)->prev = root_window;
       XWINDOW (mini_window)->mini = 1;
       XWINDOW (mini_window)->frame = frame;
-      f->minibuffer_window = mini_window;
+      FVAR (f, minibuffer_window) = mini_window;
     }
   else
     {
       mini_window = Qnil;
       XWINDOW (root_window)->next = Qnil;
-      f->minibuffer_window = Qnil;
+      FVAR (f, minibuffer_window) = Qnil;
     }
 
   XWINDOW (root_window)->frame = frame;
@@ -339,7 +339,7 @@
        etc.  Running Lisp functions at this point surely ends in a
        SEGV.  */
     set_window_buffer (root_window, buf, 0, 0);
-    f->buffer_list = Fcons (buf, Qnil);
+    FVAR (f, buffer_list) = Fcons (buf, Qnil);
   }
 
   if (mini_p)
@@ -352,11 +352,11 @@
                         0, 0);
     }
 
-  f->root_window = root_window;
-  f->selected_window = root_window;
+  FVAR (f, root_window) = root_window;
+  FVAR (f, selected_window) = root_window;
   /* Make sure this window seems more recently used than
      a newly-created, never-selected window.  */
-  XWINDOW (f->selected_window)->use_time = ++window_select_count;
+  XWINDOW (FVAR (f, selected_window))->use_time = ++window_select_count;
 
   return f;
 }
@@ -398,10 +398,11 @@
           UNGCPRO;
        }
 
-      mini_window = XFRAME (KVAR (kb, 
Vdefault_minibuffer_frame))->minibuffer_window;
+      mini_window = FVAR (XFRAME (KVAR (kb, Vdefault_minibuffer_frame)),
+                         minibuffer_window);
     }
 
-  f->minibuffer_window = mini_window;
+  FVAR (f, minibuffer_window) = mini_window;
 
   /* Make the chosen minibuffer window display the proper minibuffer,
      unless it is already showing a minibuffer.  */
@@ -436,7 +437,7 @@
      Avoid infinite looping on the window chain by marking next pointer
      as nil. */
 
-  mini_window = f->minibuffer_window = f->root_window;
+  mini_window = FVAR (f, minibuffer_window) = FVAR (f, root_window);
   XWINDOW (mini_window)->mini = 1;
   XWINDOW (mini_window)->next = Qnil;
   XWINDOW (mini_window)->prev = Qnil;
@@ -477,7 +478,7 @@
   Vframe_list = Fcons (frame, Vframe_list);
 
   tty_frame_count = 1;
-  f->name = build_pure_c_string ("F1");
+  FVAR (f, name) = build_pure_c_string ("F1");
 
   f->visible = 1;
   f->async_visible = 1;
@@ -518,7 +519,7 @@
   XSETFRAME (frame, f);
   Vframe_list = Fcons (frame, Vframe_list);
 
-  f->name = make_formatted_string (name, "F%"pMd, ++tty_frame_count);
+  FVAR (f, name) = make_formatted_string (name, "F%"pMd, ++tty_frame_count);
 
   f->visible = 1;              /* FRAME_SET_VISIBLE wd set frame_garbaged. */
   f->async_visible = 1;                /* Don't let visible be cleared later. 
*/
@@ -569,7 +570,7 @@
 
   result = Fassq (parameter, supplied_parms);
   if (NILP (result))
-    result = Fassq (parameter, XFRAME (selected_frame)->param_alist);
+    result = Fassq (parameter, FVAR (XFRAME (selected_frame), param_alist));
   if (NILP (result) && current_value != NULL)
     result = build_string (current_value);
   if (!NILP (result) && !STRINGP (result))
@@ -688,11 +689,11 @@
 
   /* Make the frame face alist be frame-specific, so that each
      frame could change its face definitions independently.  */
-  f->face_alist = Fcopy_alist (sf->face_alist);
+  FVAR (f, face_alist) = Fcopy_alist (FVAR (sf, face_alist));
   /* Simple Fcopy_alist isn't enough, because we need the contents of
      the vectors which are the CDRs of associations in face_alist to
      be copied as well.  */
-  for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem))
+  for (tem = FVAR (f, face_alist); CONSP (tem); tem = XCDR (tem))
     XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem))));
   return frame;
 }
@@ -796,7 +797,7 @@
   if (! FRAME_MINIBUF_ONLY_P (XFRAME (selected_frame)))
     last_nonminibuf_frame = XFRAME (selected_frame);
 
-  Fselect_window (XFRAME (frame)->selected_window, norecord);
+  Fselect_window (FVAR (XFRAME (frame), selected_window), norecord);
 
   /* We want to make sure that the next event generates a frame-switch
      event to the appropriate frame.  This seems kludgy to me, but
@@ -1237,11 +1238,11 @@
     }
 
   /* Don't allow minibuf_window to remain on a deleted frame.  */
-  if (EQ (f->minibuffer_window, minibuf_window))
+  if (EQ (FVAR (f, minibuffer_window), minibuf_window))
     {
-      Fset_window_buffer (sf->minibuffer_window,
+      Fset_window_buffer (FVAR (sf, minibuffer_window),
                          XWINDOW (minibuf_window)->buffer, Qnil);
-      minibuf_window = sf->minibuffer_window;
+      minibuf_window = FVAR (sf, minibuffer_window);
 
       /* If the dying minibuffer window was selected,
         select the new one.  */
@@ -1250,8 +1251,8 @@
     }
 
   /* Don't let echo_area_window to remain on a deleted frame.  */
-  if (EQ (f->minibuffer_window, echo_area_window))
-    echo_area_window = sf->minibuffer_window;
+  if (EQ (FVAR (f, minibuffer_window), echo_area_window))
+    echo_area_window = FVAR (sf, minibuffer_window);
 
   /* Clear any X selections for this frame.  */
 #ifdef HAVE_X_WINDOWS
@@ -1272,8 +1273,8 @@
 
   /* Mark all the windows that used to be on FRAME as deleted, and then
      remove the reference to them.  */
-  delete_all_child_windows (f->root_window);
-  f->root_window = Qnil;
+  delete_all_child_windows (FVAR (f, root_window));
+  FVAR (f, root_window) = Qnil;
 
   Vframe_list = Fdelq (frame, Vframe_list);
   FRAME_SET_VISIBLE (f, 0);
@@ -1282,7 +1283,7 @@
      garbage collection.  The frame object itself may not be garbage
      collected until much later, because recent_keys and other data
      structures can still refer to it.  */
-  f->menu_bar_vector = Qnil;
+  FVAR (f, menu_bar_vector) = Qnil;
 
   free_font_driver_list (f);
   xfree (f->namebuf);
@@ -1655,7 +1656,7 @@
     }
 #endif
 
-  make_frame_visible_1 (XFRAME (frame)->root_window);
+  make_frame_visible_1 (FVAR (XFRAME (frame), root_window));
 
   /* Make menu bar update for the Buffers and Frames menus.  */
   windows_or_buffers_changed++;
@@ -1709,12 +1710,12 @@
     error ("Attempt to make invisible the sole visible or iconified frame");
 
   /* Don't allow minibuf_window to remain on a deleted frame.  */
-  if (EQ (XFRAME (frame)->minibuffer_window, minibuf_window))
+  if (EQ (FVAR (XFRAME (frame), minibuffer_window), minibuf_window))
     {
       struct frame *sf = XFRAME (selected_frame);
-      Fset_window_buffer (sf->minibuffer_window,
+      Fset_window_buffer (FVAR (sf, minibuffer_window),
                          XWINDOW (minibuf_window)->buffer, Qnil);
-      minibuf_window = sf->minibuffer_window;
+      minibuf_window = FVAR (sf, minibuffer_window);
     }
 
   /* I think this should be done with a hook.  */
@@ -1747,12 +1748,12 @@
 #endif
 
   /* Don't allow minibuf_window to remain on a deleted frame.  */
-  if (EQ (XFRAME (frame)->minibuffer_window, minibuf_window))
+  if (EQ (FVAR (XFRAME (frame), minibuffer_window), minibuf_window))
     {
       struct frame *sf = XFRAME (selected_frame);
-      Fset_window_buffer (sf->minibuffer_window,
+      Fset_window_buffer (FVAR (sf, minibuffer_window),
                          XWINDOW (minibuf_window)->buffer, Qnil);
-      minibuf_window = sf->minibuffer_window;
+      minibuf_window = FVAR (sf, minibuffer_window);
     }
 
   /* I think this should be done with a hook.  */
@@ -1906,7 +1907,7 @@
 
   f = XFRAME (frame);
 
-  f->focus_frame = focus_frame;
+  FVAR (f, focus_frame) = focus_frame;
 
   if (FRAME_TERMINAL (f)->frame_rehighlight_hook)
     (*FRAME_TERMINAL (f)->frame_rehighlight_hook) (f);
@@ -1939,7 +1940,7 @@
 {
   register Lisp_Object tem;
 
-  tem = Fassq (prop, frame->param_alist);
+  tem = Fassq (prop, FVAR (frame, param_alist));
   if (EQ (tem, Qnil))
     return tem;
   return Fcdr (tem);
@@ -1951,7 +1952,7 @@
 Lisp_Object
 frame_buffer_predicate (Lisp_Object frame)
 {
-  return XFRAME (frame)->buffer_predicate;
+  return FVAR (XFRAME (frame), buffer_predicate);
 }
 
 /* Return the buffer-list of the selected frame.  */
@@ -1959,7 +1960,7 @@
 static Lisp_Object
 frame_buffer_list (Lisp_Object frame)
 {
-  return XFRAME (frame)->buffer_list;
+  return FVAR (XFRAME (frame), buffer_list);
 }
 
 /* Discard BUFFER from the buffer-list and buried-buffer-list of each frame.  
*/
@@ -1971,10 +1972,10 @@
 
   FOR_EACH_FRAME (tail, frame)
     {
-      XFRAME (frame)->buffer_list
-       = Fdelq (buffer, XFRAME (frame)->buffer_list);
-      XFRAME (frame)->buried_buffer_list
-        = Fdelq (buffer, XFRAME (frame)->buried_buffer_list);
+      FVAR (XFRAME (frame), buffer_list)
+       = Fdelq (buffer, FVAR (XFRAME (frame), buffer_list));
+      FVAR (XFRAME (frame), buried_buffer_list)
+        = Fdelq (buffer, FVAR (XFRAME (frame), buried_buffer_list));
     }
 }
 
@@ -2022,8 +2023,8 @@
 
       /* Check for no change needed in this very common case
         before we do any consing.  */
-      if (frame_name_fnn_p (SSDATA (f->name),
-                           SBYTES (f->name)))
+      if (frame_name_fnn_p (SSDATA (FVAR (f, name)),
+                           SBYTES (FVAR (f, name))))
        return;
 
       name = make_formatted_string (namebuf, "F%"pMd, ++tty_frame_count);
@@ -2033,7 +2034,7 @@
       CHECK_STRING (name);
 
       /* Don't change the name if it's already NAME.  */
-      if (! NILP (Fstring_equal (name, f->name)))
+      if (! NILP (Fstring_equal (name, FVAR (f, name))))
        return;
 
       /* Don't allow the user to set the frame name to F<num>, so it
@@ -2042,7 +2043,7 @@
        error ("Frame names of the form F<num> are usurped by Emacs");
     }
 
-  f->name = name;
+  FVAR (f, name) = name;
   update_mode_lines = 1;
 }
 
@@ -2059,7 +2060,7 @@
       for (; CONSP (val); val = XCDR (val))
        if (!NILP (Fbuffer_live_p (XCAR (val))))
          list = Fcons (XCAR (val), list);
-      f->buffer_list = Fnreverse (list);
+      FVAR (f, buffer_list) = Fnreverse (list);
       return;
     }
   if (EQ (prop, Qburied_buffer_list))
@@ -2068,7 +2069,7 @@
       for (; CONSP (val); val = XCDR (val))
        if (!NILP (Fbuffer_live_p (XCAR (val))))
          list = Fcons (XCAR (val), list);
-      f->buried_buffer_list = Fnreverse (list);
+      FVAR (f, buried_buffer_list) = Fnreverse (list);
       return;
     }
 
@@ -2103,9 +2104,9 @@
     FRAME_TTY (f)->previous_frame = NULL;
 
   /* Update the frame parameter alist.  */
-  old_alist_elt = Fassq (prop, f->param_alist);
+  old_alist_elt = Fassq (prop, FVAR (f, param_alist));
   if (EQ (old_alist_elt, Qnil))
-    f->param_alist = Fcons (Fcons (prop, val), f->param_alist);
+    FVAR (f, param_alist) = Fcons (Fcons (prop, val), FVAR (f, param_alist));
   else
     Fsetcdr (old_alist_elt, val);
 
@@ -2113,7 +2114,7 @@
      in addition to the alist.  */
 
   if (EQ (prop, Qbuffer_predicate))
-    f->buffer_predicate = val;
+    FVAR (f, buffer_predicate) = val;
 
   if (! FRAME_WINDOW_P (f))
     {
@@ -2129,11 +2130,11 @@
        error ("Surrogate minibuffer windows must be minibuffer windows");
 
       if ((FRAME_HAS_MINIBUF_P (f) || FRAME_MINIBUF_ONLY_P (f))
-         && !EQ (val, f->minibuffer_window))
+         && !EQ (val, FVAR (f, minibuffer_window)))
        error ("Can't change the surrogate minibuffer of a frame with its own 
minibuffer");
 
       /* Install the chosen minibuffer window, with proper buffer.  */
-      f->minibuffer_window = val;
+      FVAR (f, minibuffer_window) = val;
     }
 }
 
@@ -2158,7 +2159,7 @@
   if (!FRAME_LIVE_P (f))
     return Qnil;
 
-  alist = Fcopy_alist (f->param_alist);
+  alist = Fcopy_alist (FVAR (f, param_alist));
   GCPRO1 (alist);
 
   if (!FRAME_WINDOW_P (f))
@@ -2204,7 +2205,7 @@
                                    : FRAME_W32_P (f) ? "w32term"
                                    :"tty"));
     }
-  store_in_alist (&alist, Qname, f->name);
+  store_in_alist (&alist, Qname, FVAR (f, name));
   height = (f->new_text_lines ? f->new_text_lines : FRAME_LINES (f));
   store_in_alist (&alist, Qheight, make_number (height));
   width = (f->new_text_cols ? f->new_text_cols : FRAME_COLS (f));
@@ -2216,7 +2217,8 @@
                   : FRAME_MINIBUF_WINDOW (f)));
   store_in_alist (&alist, Qunsplittable, (FRAME_NO_SPLIT_P (f) ? Qt : Qnil));
   store_in_alist (&alist, Qbuffer_list, frame_buffer_list (frame));
-  store_in_alist (&alist, Qburied_buffer_list, XFRAME 
(frame)->buried_buffer_list);
+  store_in_alist (&alist, Qburied_buffer_list,
+                 FVAR (XFRAME (frame), buried_buffer_list));
 
   /* I think this should be done with a hook.  */
 #ifdef HAVE_WINDOW_SYSTEM
@@ -2257,7 +2259,7 @@
     {
       /* Avoid consing in frequent cases.  */
       if (EQ (parameter, Qname))
-       value = f->name;
+       value = FVAR (f, name);
 #ifdef HAVE_X_WINDOWS
       else if (EQ (parameter, Qdisplay) && FRAME_X_P (f))
        value = XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element);
@@ -2265,7 +2267,7 @@
       else if (EQ (parameter, Qbackground_color)
               || EQ (parameter, Qforeground_color))
        {
-         value = Fassq (parameter, f->param_alist);
+         value = Fassq (parameter, FVAR (f, param_alist));
          if (CONSP (value))
            {
              value = XCDR (value);
@@ -2303,7 +2305,7 @@
        }
       else if (EQ (parameter, Qdisplay_type)
               || EQ (parameter, Qbackground_mode))
-       value = Fcdr (Fassq (parameter, f->param_alist));
+       value = Fcdr (Fassq (parameter, FVAR (f, param_alist)));
       else
        /* FIXME: Avoid this code path at all (as well as code duplication)
           by sharing more code with Fframe_parameters.  */
@@ -2889,14 +2891,14 @@
   if (! TYPE_RANGED_INTEGERP (int, icon_left))
     {
       icon_left_no_change = 1;
-      icon_left = Fcdr (Fassq (Qicon_left, f->param_alist));
+      icon_left = Fcdr (Fassq (Qicon_left, FVAR (f, param_alist)));
       if (NILP (icon_left))
        XSETINT (icon_left, 0);
     }
   if (! TYPE_RANGED_INTEGERP (int, icon_top))
     {
       icon_top_no_change = 1;
-      icon_top = Fcdr (Fassq (Qicon_top, f->param_alist));
+      icon_top = Fcdr (Fassq (Qicon_top, FVAR (f, param_alist)));
       if (NILP (icon_top))
        XSETINT (icon_top, 0);
     }
@@ -3056,7 +3058,7 @@
   store_in_alist (alistptr, Qouter_window_id,
                  make_formatted_string (buf, "%lu", w));
 #endif
-  store_in_alist (alistptr, Qicon_name, f->icon_name);
+  store_in_alist (alistptr, Qicon_name, FVAR (f, icon_name));
   FRAME_SAMPLE_VISIBILITY (f);
   store_in_alist (alistptr, Qvisibility,
                  (FRAME_VISIBLE_P (f) ? Qt
@@ -3070,7 +3072,7 @@
     XSETFASTINT (tem, FRAME_X_OUTPUT (f)->parent_desc);
   store_in_alist (alistptr, Qexplicit_name, (f->explicit_name ? Qt : Qnil));
   store_in_alist (alistptr, Qparent_id, tem);
-  store_in_alist (alistptr, Qtool_bar_position, f->tool_bar_position);
+  store_in_alist (alistptr, Qtool_bar_position, FVAR (f, tool_bar_position));
 }
 
 
@@ -3130,7 +3132,7 @@
     signal_error ("Invalid screen-gamma", new_value);
 
   /* Apply the new gamma value to the frame background.  */
-  bgcolor = Fassq (Qbackground_color, f->param_alist);
+  bgcolor = Fassq (Qbackground_color, FVAR (f, param_alist));
   if (CONSP (bgcolor) && (bgcolor = XCDR (bgcolor), STRINGP (bgcolor)))
     {
       Lisp_Object parm_index = Fget (Qbackground_color, Qx_frame_parameter);
@@ -3459,7 +3461,7 @@
 {
   Lisp_Object tem;
 
-  tem = assq_no_quit (Qicon_type, f->param_alist);
+  tem = assq_no_quit (Qicon_type, FVAR (f, param_alist));
   if (CONSP (tem))
     return XCDR (tem);
   else

=== modified file 'src/frame.h'
--- a/src/frame.h       2012-05-25 18:19:24 +0000
+++ b/src/frame.h       2012-07-31 12:36:19 +0000
@@ -80,6 +80,10 @@
 
 struct font_driver_list;
 
+/* Most code should use this macro to access Lisp fields in struct frame.  */
+
+#define FVAR(frame, field) ((frame)->INTERNAL_FIELD (field))
+
 struct frame
 {
   struct vectorlike_header header;
@@ -89,15 +93,15 @@
 
   /* Name of this frame: a Lisp string.  It is used for looking up resources,
      as well as for the title in some cases.  */
-  Lisp_Object name;
+  Lisp_Object INTERNAL_FIELD (name);
 
   /* The name to use for the icon, the last time
      it was refreshed.  nil means not explicitly specified.  */
-  Lisp_Object icon_name;
+  Lisp_Object INTERNAL_FIELD (icon_name);
 
   /* This is the frame title specified explicitly, if any.
      Usually it is nil.  */
-  Lisp_Object title;
+  Lisp_Object INTERNAL_FIELD (title);
 
   /* The frame which should receive keystrokes that occur in this
      frame, or nil if they should go to the frame itself.  This is
@@ -110,29 +114,29 @@
      to shift from one frame to the other, any redirections to the
      original frame are shifted to the newly selected frame; if
      focus_frame is nil, Fselect_frame will leave it alone.  */
-  Lisp_Object focus_frame;
+  Lisp_Object INTERNAL_FIELD (focus_frame);
 
   /* This frame's root window.  Every frame has one.
      If the frame has only a minibuffer window, this is it.
      Otherwise, if the frame has a minibuffer window, this is its sibling.  */
-  Lisp_Object root_window;
+  Lisp_Object INTERNAL_FIELD (root_window);
 
   /* This frame's selected window.
      Each frame has its own window hierarchy
      and one of the windows in it is selected within the frame.
      The selected window of the selected frame is Emacs's selected window.  */
-  Lisp_Object selected_window;
+  Lisp_Object INTERNAL_FIELD (selected_window);
 
   /* This frame's minibuffer window.
      Most frames have their own minibuffer windows,
      but only the selected frame's minibuffer window
      can actually appear to exist.  */
-  Lisp_Object minibuffer_window;
+  Lisp_Object INTERNAL_FIELD (minibuffer_window);
 
   /* Parameter alist of this frame.
      These are the parameters specified when creating the frame
      or modified with modify-frame-parameters.  */
-  Lisp_Object param_alist;
+  Lisp_Object INTERNAL_FIELD (param_alist);
 
   /* List of scroll bars on this frame.
      Actually, we don't specify exactly what is stored here at all; the
@@ -141,50 +145,51 @@
      instead of in the `device' structure so that the garbage
      collector doesn't need to look inside the window-system-dependent
      structure.  */
-  Lisp_Object scroll_bars;
-  Lisp_Object condemned_scroll_bars;
+  Lisp_Object INTERNAL_FIELD (scroll_bars);
+  Lisp_Object INTERNAL_FIELD (condemned_scroll_bars);
 
   /* Vector describing the items to display in the menu bar.
      Each item has four elements in this vector.
      They are KEY, STRING, SUBMAP, and HPOS.
      (HPOS is not used in when the X toolkit is in use.)
      There are four additional elements of nil at the end, to terminate.  */
-  Lisp_Object menu_bar_items;
+  Lisp_Object INTERNAL_FIELD (menu_bar_items);
 
   /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA).  */
-  Lisp_Object face_alist;
+  Lisp_Object INTERNAL_FIELD (face_alist);
 
   /* A vector that records the entire structure of this frame's menu bar.
      For the format of the data, see extensive comments in xmenu.c.
      Only the X toolkit version uses this.  */
-  Lisp_Object menu_bar_vector;
+  Lisp_Object INTERNAL_FIELD (menu_bar_vector);
 
   /* Predicate for selecting buffers for other-buffer.  */
-  Lisp_Object buffer_predicate;
+  Lisp_Object INTERNAL_FIELD (buffer_predicate);
 
   /* List of buffers viewed in this frame, for other-buffer.  */
-  Lisp_Object buffer_list;
+  Lisp_Object INTERNAL_FIELD (buffer_list);
 
   /* List of buffers that were viewed, then buried in this frame.  The
      most recently buried buffer is first.  For last-buffer.  */
-  Lisp_Object buried_buffer_list;
+  Lisp_Object INTERNAL_FIELD (buried_buffer_list);
 
   /* A dummy window used to display menu bars under X when no X
      toolkit support is available.  */
-  Lisp_Object menu_bar_window;
+  Lisp_Object INTERNAL_FIELD (menu_bar_window);
 
   /* A window used to display the tool-bar of a frame.  */
-  Lisp_Object tool_bar_window;
+  Lisp_Object INTERNAL_FIELD (tool_bar_window);
 
   /* Desired and current tool-bar items.  */
-  Lisp_Object tool_bar_items;
+  Lisp_Object INTERNAL_FIELD (tool_bar_items);
 
   /* Where tool bar is, can be left, right, top or bottom.  The native
      tool bar only supports top.  */
-  Lisp_Object tool_bar_position;
+  Lisp_Object INTERNAL_FIELD (tool_bar_position);
 
   /* Desired and current contents displayed in tool_bar_window.  */
-  Lisp_Object desired_tool_bar_string, current_tool_bar_string;
+  Lisp_Object INTERNAL_FIELD (desired_tool_bar_string);
+  Lisp_Object INTERNAL_FIELD (current_tool_bar_string);
 
   /* Beyond here, there should be no more Lisp_Object components.  */
 
@@ -635,13 +640,13 @@
 #define FRAME_WINDOW_SIZES_CHANGED(f) (f)->window_sizes_changed
 
 /* The minibuffer window of frame F, if it has one; otherwise nil.  */
-#define FRAME_MINIBUF_WINDOW(f) (f)->minibuffer_window
+#define FRAME_MINIBUF_WINDOW(f) FVAR (f, minibuffer_window)
 
 /* The root window of the window tree of frame F.  */
-#define FRAME_ROOT_WINDOW(f) (f)->root_window
+#define FRAME_ROOT_WINDOW(f) FVAR (f, root_window)
 
 /* The currently selected window of the window tree of frame F.  */
-#define FRAME_SELECTED_WINDOW(f) (f)->selected_window
+#define FRAME_SELECTED_WINDOW(f) FVAR (f, selected_window)
 
 #define FRAME_INSERT_COST(f) (f)->insert_line_cost
 #define FRAME_DELETE_COST(f) (f)->delete_line_cost
@@ -649,7 +654,7 @@
 #define FRAME_DELETEN_COST(f) (f)->delete_n_lines_cost
 #define FRAME_MESSAGE_BUF(f) (f)->message_buf
 #define FRAME_SCROLL_BOTTOM_VPOS(f) (f)->scroll_bottom_vpos
-#define FRAME_FOCUS_FRAME(f) (f)->focus_frame
+#define FRAME_FOCUS_FRAME(f) FVAR (f, focus_frame)
 
 /* Nonzero if frame F supports scroll bars.
    If this is zero, then it is impossible to enable scroll bars
@@ -750,10 +755,10 @@
 
 /* Nonzero if frame F has scroll bars.  */
 
-#define FRAME_SCROLL_BARS(f) ((f)->scroll_bars)
+#define FRAME_SCROLL_BARS(f) (FVAR (f, scroll_bars))
 
-#define FRAME_CONDEMNED_SCROLL_BARS(f) ((f)->condemned_scroll_bars)
-#define FRAME_MENU_BAR_ITEMS(f) ((f)->menu_bar_items)
+#define FRAME_CONDEMNED_SCROLL_BARS(f) (FVAR (f, condemned_scroll_bars))
+#define FRAME_MENU_BAR_ITEMS(f) (FVAR (f, menu_bar_items))
 #define FRAME_COST_BAUD_RATE(f) ((f)->cost_calculation_baud_rate)
 
 #define FRAME_DESIRED_CURSOR(f) ((f)->desired_cursor)

=== modified file 'src/fringe.c'
--- a/src/fringe.c      2012-07-15 00:52:16 +0000
+++ b/src/fringe.c      2012-07-31 12:36:19 +0000
@@ -1338,8 +1338,8 @@
   int o_right = FRAME_RIGHT_FRINGE_WIDTH (f);
   int o_cols = FRAME_FRINGE_COLS (f);
 
-  Lisp_Object left_fringe = Fassq (Qleft_fringe, f->param_alist);
-  Lisp_Object right_fringe = Fassq (Qright_fringe, f->param_alist);
+  Lisp_Object left_fringe = Fassq (Qleft_fringe, FVAR (f, param_alist));
+  Lisp_Object right_fringe = Fassq (Qright_fringe, FVAR (f, param_alist));
   int left_fringe_width, right_fringe_width;
 
   if (!NILP (left_fringe))

=== modified file 'src/gtkutil.c'
--- a/src/gtkutil.c     2012-07-15 14:22:09 +0000
+++ b/src/gtkutil.c     2012-07-31 12:36:19 +0000
@@ -1148,8 +1148,10 @@
   gtk_widget_set_name (wfixed, SSDATA (Vx_resource_name));
 
   /* If this frame has a title or name, set it in the title bar.  */
-  if (! NILP (f->title)) title = SSDATA (ENCODE_UTF_8 (f->title));
-  else if (! NILP (f->name)) title = SSDATA (ENCODE_UTF_8 (f->name));
+  if (! NILP (FVAR (f, title)))
+    title = SSDATA (ENCODE_UTF_8 (FVAR (f, title)));
+  else if (! NILP (FVAR (f, name)))
+    title = SSDATA (ENCODE_UTF_8 (FVAR (f, name)));
 
   if (title) gtk_window_set_title (GTK_WINDOW (wtop), title);
 
@@ -2059,7 +2061,7 @@
     {
       cl_data = xmalloc (sizeof *cl_data);
       cl_data->f = f;
-      cl_data->menu_bar_vector = f->menu_bar_vector;
+      cl_data->menu_bar_vector = FVAR (f, menu_bar_vector);
       cl_data->menu_bar_items_used = f->menu_bar_items_used;
       cl_data->highlight_cb = highlight_cb;
       cl_data->ref_count = 0;
@@ -2091,7 +2093,7 @@
   if (cl_data)
     {
       cl_data->f = f;
-      cl_data->menu_bar_vector = f->menu_bar_vector;
+      cl_data->menu_bar_vector = FVAR (f, menu_bar_vector);
       cl_data->menu_bar_items_used = f->menu_bar_items_used;
       cl_data->highlight_cb = highlight_cb;
     }
@@ -3808,12 +3810,12 @@
   struct input_event event;
   EVENT_INIT (event);
 
-  if (! f || ! f->n_tool_bar_items || NILP (f->tool_bar_items))
+  if (! f || ! f->n_tool_bar_items || NILP (FVAR (f, tool_bar_items)))
     return;
 
   idx *= TOOL_BAR_ITEM_NSLOTS;
 
-  key = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_KEY);
+  key = AREF (FVAR (f, tool_bar_items), idx + TOOL_BAR_ITEM_KEY);
   XSETFRAME (frame, f);
 
   /* We generate two events here.  The first one is to set the prefix
@@ -4084,16 +4086,16 @@
   FRAME_PTR f = (FRAME_PTR) g_object_get_data (G_OBJECT (w), XG_FRAME_DATA);
   Lisp_Object help, frame;
 
-  if (! f || ! f->n_tool_bar_items || NILP (f->tool_bar_items))
+  if (! f || ! f->n_tool_bar_items || NILP (FVAR (f, tool_bar_items)))
     return FALSE;
 
   if (event->type == GDK_ENTER_NOTIFY)
     {
       idx *= TOOL_BAR_ITEM_NSLOTS;
-      help = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_HELP);
+      help = AREF (FVAR (f, tool_bar_items), idx + TOOL_BAR_ITEM_HELP);
 
       if (NILP (help))
-        help = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_CAPTION);
+        help = AREF (FVAR (f, tool_bar_items), idx + TOOL_BAR_ITEM_CAPTION);
     }
   else
     help = Qnil;
@@ -4221,7 +4223,7 @@
 }
 
 
-#define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
+#define PROP(IDX) AREF (FVAR (f, tool_bar_items), i * TOOL_BAR_ITEM_NSLOTS + 
(IDX))
 
 /* Find the right-to-left image named by RTL in the tool bar images for F.
    Returns IMAGE if RTL is not found.  */
@@ -4704,7 +4706,7 @@
   if (f->n_tool_bar_items != 0)
     {
       if (pack_tool_bar)
-        xg_pack_tool_bar (f, f->tool_bar_position);
+        xg_pack_tool_bar (f, FVAR (f, tool_bar_position));
       gtk_widget_show_all (GTK_WIDGET (x->handlebox_widget));
       if (xg_update_tool_bar_sizes (f))
         xg_height_or_width_changed (f);

=== modified file 'src/keyboard.h'
--- a/src/keyboard.h    2012-07-09 16:38:45 +0000
+++ b/src/keyboard.h    2012-07-31 12:36:19 +0000
@@ -19,14 +19,9 @@
 #include "systime.h"           /* for EMACS_TIME, Time */
 #include "coding.h"             /* for ENCODE_UTF_8 and ENCODE_SYSTEM */
 
-/* Lisp fields in struct keyboard are hidden from most code and accessed
-   via the KVAR macro, below.  Only select pieces of code, like the GC,
-   are allowed to use KBOARD_INTERNAL_FIELD.  */
-#define KBOARD_INTERNAL_FIELD(field) field ## _
+/* Most code should use this macro to access Lisp fields in struct kboard.  */
 
-/* Most code should use this macro to access Lisp fields in struct
-   kboard.  */
-#define KVAR(kboard, field) ((kboard)->KBOARD_INTERNAL_FIELD (field))
+#define KVAR(kboard, field) ((kboard)->INTERNAL_FIELD (field))
 
 /* Each KBOARD represents one logical input stream from which Emacs
    gets input.  If we are using ordinary terminals, it has one KBOARD
@@ -79,32 +74,32 @@
        can effectively wait for input in the any-kboard state, and hence
        avoid blocking out the other KBOARDs.  See universal-argument in
        lisp/simple.el for an example.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Voverriding_terminal_local_map);
+    Lisp_Object INTERNAL_FIELD (Voverriding_terminal_local_map);
 
     /* Last command executed by the editor command loop, not counting
        commands that set the prefix argument.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vlast_command);
+    Lisp_Object INTERNAL_FIELD (Vlast_command);
 
     /* Normally same as last-command, but never modified by other commands.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vreal_last_command);
+    Lisp_Object INTERNAL_FIELD (Vreal_last_command);
 
     /* User-supplied table to translate input characters through.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vkeyboard_translate_table);
+    Lisp_Object INTERNAL_FIELD (Vkeyboard_translate_table);
 
     /* Last command that may be repeated by `repeat'.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vlast_repeatable_command);
+    Lisp_Object INTERNAL_FIELD (Vlast_repeatable_command);
 
     /* The prefix argument for the next command, in raw form.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vprefix_arg);
+    Lisp_Object INTERNAL_FIELD (Vprefix_arg);
 
     /* Saved prefix argument for the last command, in raw form.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vlast_prefix_arg);
+    Lisp_Object INTERNAL_FIELD (Vlast_prefix_arg);
 
     /* Unread events specific to this kboard.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (kbd_queue);
+    Lisp_Object INTERNAL_FIELD (kbd_queue);
 
     /* Non-nil while a kbd macro is being defined.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (defining_kbd_macro);
+    Lisp_Object INTERNAL_FIELD (defining_kbd_macro);
 
     /* The start of storage for the current keyboard macro.  */
     Lisp_Object *kbd_macro_buffer;
@@ -126,28 +121,28 @@
     ptrdiff_t kbd_macro_bufsize;
 
     /* Last anonymous kbd macro defined.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vlast_kbd_macro);
+    Lisp_Object INTERNAL_FIELD (Vlast_kbd_macro);
 
     /* Alist of system-specific X windows key symbols.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vsystem_key_alist);
+    Lisp_Object INTERNAL_FIELD (Vsystem_key_alist);
 
     /* Cache for modify_event_symbol.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (system_key_syms);
+    Lisp_Object INTERNAL_FIELD (system_key_syms);
 
     /* The kind of display: x, w32, ...  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vwindow_system);
+    Lisp_Object INTERNAL_FIELD (Vwindow_system);
 
     /* Keymap mapping keys to alternative preferred forms.
        See the DEFVAR for more documentation.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vlocal_function_key_map);
+    Lisp_Object INTERNAL_FIELD (Vlocal_function_key_map);
 
     /* Keymap mapping ASCII function key sequences onto their preferred
        forms.  Initialized by the terminal-specific lisp files.  See the
        DEFVAR for more documentation.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vinput_decode_map);
+    Lisp_Object INTERNAL_FIELD (Vinput_decode_map);
 
     /* Minibufferless frames on this display use this frame's minibuffer.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (Vdefault_minibuffer_frame);
+    Lisp_Object INTERNAL_FIELD (Vdefault_minibuffer_frame);
 
     /* Number of displays using this KBOARD.  Normally 1, but can be
        larger when you have multiple screens on a single X display.  */
@@ -155,7 +150,7 @@
 
     /* The text we're echoing in the modeline - partial key sequences,
        usually.  This is nil when not echoing.  */
-    Lisp_Object KBOARD_INTERNAL_FIELD (echo_string);
+    Lisp_Object INTERNAL_FIELD (echo_string);
 
     /* This flag indicates that events were put into kbd_queue
        while Emacs was running for some other KBOARD.

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2012-07-30 18:56:42 +0000
+++ b/src/lisp.h        2012-07-31 12:36:19 +0000
@@ -622,8 +622,13 @@
 #define CHECK_TYPE(ok, Qxxxp, x) \
   do { if (!(ok)) wrong_type_argument (Qxxxp, (x)); } while (0)
 
-
-
+/* Lisp fields are usually hidden from most code and accessed
+   via special macros.  Only select pieces of code, like the GC,
+   are allowed to use INTERNAL_FIELD directly.  Objects which
+   aren't using this convention should be fixed.  */
+
+#define INTERNAL_FIELD(field) field ## _
+
 /* See the macros in intervals.h.  */
 
 typedef struct interval *INTERVAL;

=== modified file 'src/minibuf.c'
--- a/src/minibuf.c     2012-07-11 07:19:44 +0000
+++ b/src/minibuf.c     2012-07-31 12:36:19 +0000
@@ -102,14 +102,14 @@
 {
   if (FRAMEP (selected_frame)
       && FRAME_LIVE_P (XFRAME (selected_frame))
-      && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
+      && !EQ (minibuf_window, FVAR (XFRAME (selected_frame), 
minibuffer_window)))
     {
       struct frame *sf = XFRAME (selected_frame);
       Lisp_Object buffer;
 
       /* I don't think that any frames may validly have a null minibuffer
         window anymore.  */
-      if (NILP (sf->minibuffer_window))
+      if (NILP (FVAR (sf, minibuffer_window)))
        abort ();
 
       /* Under X, we come here with minibuf_window being the
@@ -117,8 +117,8 @@
         init_window_once.  That window doesn't have a buffer.  */
       buffer = XWINDOW (minibuf_window)->buffer;
       if (BUFFERP (buffer))
-       Fset_window_buffer (sf->minibuffer_window, buffer, Qnil);
-      minibuf_window = sf->minibuffer_window;
+       Fset_window_buffer (FVAR (sf, minibuffer_window), buffer, Qnil);
+      minibuf_window = FVAR (sf, minibuffer_window);
     }
 
   /* Make sure no other frame has a minibuffer as its selected window,

=== modified file 'src/nsfns.m'
--- a/src/nsfns.m       2012-07-13 18:03:10 +0000
+++ b/src/nsfns.m       2012-07-31 12:36:19 +0000
@@ -586,12 +586,12 @@
 {
   NSTRACE (x_set_title);
   /* Don't change the title if it's already NAME.  */
-  if (EQ (name, f->title))
+  if (EQ (name, FVAR (f, title)))
     return;
 
   update_mode_lines = 1;
 
-  f->title = name;
+  FVAR (f, title) = name;
 
   if (NILP (name))
     name = f->name;

=== modified file 'src/nsterm.m'
--- a/src/nsterm.m      2012-07-31 05:56:36 +0000
+++ b/src/nsterm.m      2012-07-31 12:36:19 +0000
@@ -2125,8 +2125,8 @@
       int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
 
       /* Internal border is drawn below the tool bar.  */
-      if (WINDOWP (f->tool_bar_window)
-         && w == XWINDOW (f->tool_bar_window))
+      if (WINDOWP (FVAR (f, tool_bar_window))
+         && w == XWINDOW (FVAR (f, tool_bar_window)))
        y -= width;
       /* end copy from other terms */
 

=== modified file 'src/print.c'
--- a/src/print.c       2012-07-23 16:57:20 +0000
+++ b/src/print.c       2012-07-31 12:36:19 +0000
@@ -1897,7 +1897,7 @@
       else if (FRAMEP (obj))
        {
          int len;
-         Lisp_Object frame_name = XFRAME (obj)->name;
+         Lisp_Object frame_name = FVAR (XFRAME (obj), name);
 
          strout ((FRAME_LIVE_P (XFRAME (obj))
                   ? "#<frame " : "#<dead frame "),

=== modified file 'src/term.c'
--- a/src/term.c        2012-07-30 06:43:46 +0000
+++ b/src/term.c        2012-07-31 12:36:19 +0000
@@ -2192,7 +2192,7 @@
   Lisp_Object tty_color_mode_alist
     = Fintern_soft (build_string ("tty-color-mode-alist"), Qnil);
 
-  tem = assq_no_quit (Qtty_color_mode, f->param_alist);
+  tem = assq_no_quit (Qtty_color_mode, FVAR (f, param_alist));
   val = CONSP (tem) ? XCDR (tem) : Qnil;
 
   if (INTEGERP (val))

=== modified file 'src/w32fns.c'
--- a/src/w32fns.c      2012-07-30 17:07:33 +0000
+++ b/src/w32fns.c      2012-07-31 12:36:19 +0000
@@ -1489,7 +1489,7 @@
   else if (!NILP (arg) || NILP (oldval))
     return;
 
-  f->icon_name = arg;
+  FVAR (f, icon_name) = arg;
 
 #if 0
   if (f->output_data.w32->icon_bitmap != 0)
@@ -1498,11 +1498,11 @@
   BLOCK_INPUT;
 
   result = x_text_icon (f,
-                       SSDATA ((!NILP (f->icon_name)
-                                ? f->icon_name
-                                : !NILP (f->title)
-                                ? f->title
-                                : f->name)));
+                       SSDATA ((!NILP (FVAR (f, icon_name))
+                                ? FVAR (f, icon_name)
+                                : !NILP (FVAR (f, title))
+                                ? FVAR (f, title)
+                                : FVAR (f, name))));
 
   if (result)
     {
@@ -1631,8 +1631,8 @@
       }
       UNBLOCK_INPUT;
 
-      if (WINDOWP (f->tool_bar_window))
-       clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix);
+      if (WINDOWP (FVAR (f, tool_bar_window)))
+       clear_glyph_matrix (XWINDOW (FVAR (f, 
tool_bar_window))->current_matrix);
     }
 
   run_window_configuration_change_hook (f);
@@ -1674,7 +1674,7 @@
       /* Check for no change needed in this very common case
         before we do any consing.  */
       if (!strcmp (FRAME_W32_DISPLAY_INFO (f)->w32_id_name,
-                  SDATA (f->name)))
+                  SDATA (FVAR (f, name))))
        return;
       name = build_string (FRAME_W32_DISPLAY_INFO (f)->w32_id_name);
     }
@@ -1682,15 +1682,15 @@
     CHECK_STRING (name);
 
   /* Don't change the name if it's already NAME.  */
-  if (! NILP (Fstring_equal (name, f->name)))
+  if (! NILP (Fstring_equal (name, FVAR (f, name))))
     return;
 
-  f->name = name;
+  FVAR (f, name) = name;
 
   /* For setting the frame title, the title parameter should override
      the name parameter.  */
-  if (! NILP (f->title))
-    name = f->title;
+  if (! NILP (FVAR (f, title)))
+    name = FVAR (f, title);
 
   if (FRAME_W32_WINDOW (f))
     {
@@ -1728,15 +1728,15 @@
 x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
 {
   /* Don't change the title if it's already NAME.  */
-  if (EQ (name, f->title))
+  if (EQ (name, FVAR (f, title)))
     return;
 
   update_mode_lines = 1;
 
-  f->title = name;
+  FVAR (f, title) = name;
 
   if (NILP (name))
-    name = f->name;
+    name = FVAR (f, name);
 
   if (FRAME_W32_WINDOW (f))
     {
@@ -3896,8 +3896,8 @@
     int explicit = f->explicit_name;
 
     f->explicit_name = 0;
-    name = f->name;
-    f->name = Qnil;
+    name = FVAR (f, name);
+    FVAR (f, name) = Qnil;
     x_set_name (f, name, explicit);
   }
 
@@ -3944,9 +3944,9 @@
         ? IconicState
         : NormalState));
 
-  x_text_icon (f, SSDATA ((!NILP (f->icon_name)
-                          ? f->icon_name
-                          : f->name)));
+  x_text_icon (f, SSDATA ((!NILP (FVAR (f, icon_name))
+                          ? FVAR (f, icon_name)
+                          : FVAR (f, name))));
 #endif
 
   UNBLOCK_INPUT;
@@ -4146,11 +4146,11 @@
   f->output_data.w32 = xzalloc (sizeof (struct w32_output));
   FRAME_FONTSET (f) = -1;
 
-  f->icon_name
+  FVAR (f, icon_name)
     = x_get_arg (dpyinfo, parameters, Qicon_name, "iconName", "Title",
                    RES_TYPE_STRING);
-  if (! STRINGP (f->icon_name))
-    f->icon_name = Qnil;
+  if (! STRINGP (FVAR (f, icon_name)))
+    FVAR (f, icon_name) = Qnil;
 
 /*  FRAME_W32_DISPLAY_INFO (f) = dpyinfo; */
 
@@ -4179,12 +4179,12 @@
      be set.  */
   if (EQ (name, Qunbound) || NILP (name))
     {
-      f->name = build_string (dpyinfo->w32_id_name);
+      FVAR (f, name) = build_string (dpyinfo->w32_id_name);
       f->explicit_name = 0;
     }
   else
     {
-      f->name = name;
+      FVAR (f, name) = name;
       f->explicit_name = 1;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
@@ -4359,7 +4359,7 @@
      by x_get_arg and friends, now go in the misc. alist of the frame.  */
   for (tem = parameters; CONSP (tem); tem = XCDR (tem))
     if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
-      f->param_alist = Fcons (XCAR (tem), f->param_alist);
+      FVAR (f, param_alist) = Fcons (XCAR (tem), FVAR (f, param_alist));
 
   UNGCPRO;
 
@@ -5231,7 +5231,7 @@
   f->output_data.w32 = xzalloc (sizeof (struct w32_output));
 
   FRAME_FONTSET (f)  = -1;
-  f->icon_name = Qnil;
+  FVAR (f, icon_name) = Qnil;
 
 #ifdef GLYPH_DEBUG
   image_cache_refcount =
@@ -5246,12 +5246,12 @@
      be set.  */
   if (EQ (name, Qunbound) || NILP (name))
     {
-      f->name = build_string (dpyinfo->w32_id_name);
+      FVAR (f, name) = build_string (dpyinfo->w32_id_name);
       f->explicit_name = 0;
     }
   else
     {
-      f->name = name;
+      FVAR (f, name) = name;
       f->explicit_name = 1;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);

=== modified file 'src/w32menu.c'
--- a/src/w32menu.c     2012-07-29 08:18:29 +0000
+++ b/src/w32menu.c     2012-07-31 12:36:19 +0000
@@ -277,7 +277,7 @@
     return;
   entry = Qnil;
   subprefix_stack = (Lisp_Object *) alloca (f->menu_bar_items_used * sizeof 
(Lisp_Object));
-  vector = f->menu_bar_vector;
+  vector = FVAR (f, menu_bar_vector);
   prefix = Qnil;
   i = 0;
   while (i < f->menu_bar_items_used)
@@ -419,14 +419,14 @@
 
       /* Save the frame's previous menu bar contents data.  */
       if (previous_menu_items_used)
-       memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents,
+       memcpy (previous_items, XVECTOR (FVAR (f, menu_bar_vector))->contents,
                previous_menu_items_used * sizeof (Lisp_Object));
 
       /* Fill in menu_items with the current menu bar contents.
         This can evaluate Lisp code.  */
       save_menu_items ();
 
-      menu_items = f->menu_bar_vector;
+      menu_items = FVAR (f, menu_bar_vector);
       menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0;
       submenu_start = (int *) alloca (ASIZE (items) * sizeof (int));
       submenu_end = (int *) alloca (ASIZE (items) * sizeof (int));
@@ -500,7 +500,7 @@
          return;
        }
 
-      f->menu_bar_vector = menu_items;
+      FVAR (f, menu_bar_vector) = menu_items;
       f->menu_bar_items_used = menu_items_used;
 
       /* This undoes save_menu_items.  */
@@ -854,7 +854,7 @@
 
       wv_title->name = SSDATA (title);
       wv_title->enabled = TRUE;
-      wv_title->title = TRUE;
+      FVAR (wv_title, title) = TRUE;
       wv_title->button_type = BUTTON_TYPE_NONE;
       wv_title->help = Qnil;
       wv_title->next = wv_sep;

=== modified file 'src/w32term.c'
--- a/src/w32term.c     2012-07-30 17:07:33 +0000
+++ b/src/w32term.c     2012-07-31 12:36:19 +0000
@@ -4189,7 +4189,7 @@
                  /* We may get paint messages even though the client
                     area is clipped - these are not expose events. */
                  DebPrint (("clipped frame %p (%s) got WM_PAINT - ignored\n", 
f,
-                            SDATA (f->name)));
+                            SDATA (FVAR (f, name))));
                }
              else if (f->async_visible != 1)
                {
@@ -4198,7 +4198,7 @@
                  f->async_iconified = 0;
                  SET_FRAME_GARBAGED (f);
                  DebPrint (("frame %p (%s) reexposed by WM_PAINT\n", f,
-                            SDATA (f->name)));
+                            SDATA (FVAR (f, name))));
 
                  /* WM_PAINT serves as MapNotify as well, so report
                     visibility changes properly.  */
@@ -4254,7 +4254,7 @@
          if (f && !f->iconified)
            {
              if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
-                 && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
+                 && !EQ (FVAR (f, tool_bar_window), hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
                  hlinfo->mouse_face_hidden = 1;
@@ -4279,7 +4279,7 @@
          if (f && !f->iconified)
            {
              if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
-                 && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
+                 && !EQ (FVAR (f, tool_bar_window), hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
                  hlinfo->mouse_face_hidden = 1;
@@ -4357,7 +4357,7 @@
          if (f && !f->iconified)
            {
              if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
-                 && !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
+                 && !EQ (FVAR (f, tool_bar_window), hlinfo->mouse_face_window))
                {
                  clear_mouse_face (hlinfo);
                  hlinfo->mouse_face_hidden = 1;
@@ -4481,8 +4481,8 @@
                 construct_mouse_click (&inev, &msg, f);
 
                 /* Is this in the tool-bar?  */
-                if (WINDOWP (f->tool_bar_window)
-                    && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)))
+                if (WINDOWP (FVAR (f, tool_bar_window))
+                    && WINDOW_TOTAL_LINES (XWINDOW (FVAR (f, 
tool_bar_window))))
                   {
                     Lisp_Object window;
                    int x = XFASTINT (inev.x);
@@ -4490,7 +4490,7 @@
 
                     window = window_from_coordinates (f, x, y, 0, 1);
 
-                    if (EQ (window, f->tool_bar_window))
+                    if (EQ (window, FVAR (f, tool_bar_window)))
                       {
                         w32_handle_tool_bar_click (f, &inev);
                         tool_bar_p = 1;
@@ -4935,7 +4935,7 @@
                if (!FRAME_OBSCURED_P (f))
                  {
                    DebPrint (("frame %p (%s) obscured\n", f,
-                              SDATA (f->name)));
+                              SDATA (FVAR (f, name))));
                  }
              }
            else
@@ -4947,7 +4947,7 @@
                  {
                    SET_FRAME_GARBAGED (f);
                    DebPrint (("obscured frame %p (%s) found to be visible\n", 
f,
-                              SDATA (f->name)));
+                              SDATA (FVAR (f, name))));
 
                    /* Force a redisplay sooner or later.  */
                    record_asynch_buffer_change ();
@@ -5595,7 +5595,7 @@
   SET_FRAME_GARBAGED (f);
 
   /* If cursor was outside the new size, mark it as off.  */
-  mark_window_cursors_off (XWINDOW (f->root_window));
+  mark_window_cursors_off (XWINDOW (FVAR (f, root_window)));
 
   /* Clear out any recollection of where the mouse highlighting was,
      since it might be in a place that's outside the new frame size.

=== modified file 'src/window.c'
--- a/src/window.c      2012-07-23 16:57:20 +0000
+++ b/src/window.c      2012-07-31 12:36:19 +0000
@@ -191,13 +191,13 @@
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->root_window;
+    window = FVAR (SELECTED_FRAME (), root_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->root_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))), 
root_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->root_window;
+      window = FVAR (XFRAME (frame_or_window), root_window);
     }
 
   return window;
@@ -235,13 +235,13 @@
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->root_window;
+    window = FVAR (SELECTED_FRAME (), root_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->root_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))), 
root_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->root_window;
+      window = FVAR (XFRAME (frame_or_window), root_window);
     }
 
   while (NILP (XWINDOW (window)->buffer))
@@ -269,13 +269,14 @@
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->selected_window;
+    window = FVAR (SELECTED_FRAME (), selected_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW 
(frame_or_window)))->selected_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))),
+                  selected_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->selected_window;
+      window = FVAR (XFRAME (frame_or_window), selected_window);
     }
 
   return window;
@@ -303,7 +304,7 @@
   if (EQ (frame, selected_frame))
     return Fselect_window (window, norecord);
   else
-    return XFRAME (frame)->selected_window = window;
+    return FVAR (XFRAME (frame), selected_window) = window;
 }
 
 DEFUN ("selected-window", Fselected_window, Sselected_window, 0, 0, 0,
@@ -346,7 +347,7 @@
   sf = SELECTED_FRAME ();
   if (XFRAME (WINDOW_FRAME (w)) != sf)
     {
-      XFRAME (WINDOW_FRAME (w))->selected_window = window;
+      FVAR (XFRAME (WINDOW_FRAME (w)), selected_window) = window;
       /* Use this rather than Fhandle_switch_frame
         so that FRAME_FOCUS_FRAME is moved appropriately as we
         move around in the state where a minibuffer in a separate
@@ -357,7 +358,7 @@
       return window;
     }
   else
-    sf->selected_window = window;
+    FVAR (sf, selected_window) = window;
 
   /* Store the current buffer's actual point into the
      old selected window.  It belongs to that window,
@@ -1219,13 +1220,13 @@
      bar exists.  */
   if (NILP (window)
       && tool_bar_p
-      && WINDOWP (f->tool_bar_window)
-      && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)) > 0
-      && (coordinates_in_window (XWINDOW (f->tool_bar_window), x, y)
+      && WINDOWP (FVAR (f, tool_bar_window))
+      && WINDOW_TOTAL_LINES (XWINDOW (FVAR (f, tool_bar_window))) > 0
+      && (coordinates_in_window (XWINDOW (FVAR (f, tool_bar_window)), x, y)
          != ON_NOTHING))
     {
       *part = ON_TEXT;
-      window = f->tool_bar_window;
+      window = FVAR (f, tool_bar_window);
     }
 
   return window;
@@ -2319,7 +2320,7 @@
   (Lisp_Object frame, Lisp_Object minibuf, Lisp_Object window)
 {
   if (NILP (window))
-    window = FRAMEP (frame) ? XFRAME (frame)->selected_window : 
selected_window;
+    window = FRAMEP (frame) ? FVAR (XFRAME (frame), selected_window) : 
selected_window;
   CHECK_WINDOW (window);
   if (NILP (frame))
     frame = selected_frame;
@@ -3555,9 +3556,9 @@
 void
 resize_frame_windows (struct frame *f, int size, int horflag)
 {
-  Lisp_Object root = f->root_window;
+  Lisp_Object root = FVAR (f, root_window);
   struct window *r = XWINDOW (root);
-  Lisp_Object mini = f->minibuffer_window;
+  Lisp_Object mini = FVAR (f, minibuffer_window);
   struct window *m;
   /* new_size is the new size of the frame's root window.  */
   int new_size = (horflag
@@ -3603,7 +3604,7 @@
                {
                  /* We lost.  Delete all windows but the frame's
                     selected one.  */
-                 root = f->selected_window;
+                 root = FVAR (f, selected_window);
                  Fdelete_other_windows_internal (root, Qnil);
                  if (horflag)
                    XSETFASTINT (XWINDOW (root)->total_cols, new_size);
@@ -6464,8 +6465,8 @@
   struct frame *f = make_initial_frame ();
   XSETFRAME (selected_frame, f);
   Vterminal_frame = selected_frame;
-  minibuf_window = f->minibuffer_window;
-  selected_window = f->selected_window;
+  minibuf_window = FVAR (f, minibuffer_window);
+  selected_window = FVAR (f, selected_window);
   last_nonminibuf_frame = f;
 
   window_initialized = 1;

=== modified file 'src/window.h'
--- a/src/window.h      2012-07-05 15:20:12 +0000
+++ b/src/window.h      2012-07-31 12:36:19 +0000
@@ -460,14 +460,14 @@
 /* 1 if W is a menu bar window.  */
 
 #define WINDOW_MENU_BAR_P(W) \
-  (WINDOWP (WINDOW_XFRAME (W)->menu_bar_window) \
-   && (W) == XWINDOW (WINDOW_XFRAME (W)->menu_bar_window))
+  (WINDOWP (FVAR (WINDOW_XFRAME (W), menu_bar_window)) \
+   && (W) == XWINDOW (FVAR (WINDOW_XFRAME (W), menu_bar_window)))
 
 /* 1 if W is a tool bar window.  */
 
 #define WINDOW_TOOL_BAR_P(W) \
-  (WINDOWP (WINDOW_XFRAME (W)->tool_bar_window) \
-   && (W) == XWINDOW (WINDOW_XFRAME (W)->tool_bar_window))
+  (WINDOWP (FVAR (WINDOW_XFRAME (W), tool_bar_window)) \
+   && (W) == XWINDOW (FVAR (WINDOW_XFRAME (W), tool_bar_window)))
 
 /* Return the frame y-position at which window W starts.
    This includes a header line, if any.  */

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2012-07-30 18:56:42 +0000
+++ b/src/xdisp.c       2012-07-31 12:36:19 +0000
@@ -10892,7 +10892,7 @@
       /* Similarly to `with-selected-window', if the operation selects
         a window on another frame, we must restore that frame's
         selected window, and (for a tty) the top-frame.  */
-      ASET (vector, 8, target_frame->selected_window);
+      ASET (vector, 8, FVAR (target_frame, selected_window));
       if (FRAME_TERMCAP_P (target_frame))
        ASET (vector, 9, FRAME_TTY (target_frame)->top_frame);
     }
@@ -11052,13 +11052,13 @@
                             format_mode_line_unwind_data
                               (f, current_buffer, selected_window, 0));
 
-      Fselect_window (f->selected_window, Qt);
-      set_buffer_internal_1 (XBUFFER (XWINDOW (f->selected_window)->buffer));
+      Fselect_window (FVAR (f, selected_window), Qt);
+      set_buffer_internal_1 (XBUFFER (XWINDOW (FVAR (f, 
selected_window))->buffer));
       fmt = FRAME_ICONIFIED_P (f) ? Vicon_title_format : Vframe_title_format;
 
       mode_line_target = MODE_LINE_TITLE;
       title_start = MODE_LINE_NOPROP_LEN (0);
-      init_iterator (&it, XWINDOW (f->selected_window), -1, -1,
+      init_iterator (&it, XWINDOW (FVAR (f, selected_window)), -1, -1,
                     NULL, DEFAULT_FACE_ID);
       display_mode_element (&it, 0, -1, -1, fmt, Qnil, 0);
       len = MODE_LINE_NOPROP_LEN (title_start);
@@ -11070,9 +11070,9 @@
         already wasted too much time by walking through the list with
         display_mode_element, then we might need to optimize at a
         higher level than this.)  */
-      if (! STRINGP (f->name)
-         || SBYTES (f->name) != len
-         || memcmp (title, SDATA (f->name), len) != 0)
+      if (! STRINGP (FVAR (f, name))
+         || SBYTES (FVAR (f, name)) != len
+         || memcmp (title, SDATA (FVAR (f, name)), len) != 0)
        x_implicitly_set_name (f, make_string (title, len), Qnil);
     }
 }
@@ -11172,7 +11172,7 @@
           if (windows_or_buffers_changed
              && FRAME_NS_P (f))
             ns_set_doc_edited (f, Fbuffer_modified_p
-                              (XWINDOW (f->selected_window)->buffer));
+                              (XWINDOW (FVAR (f, selected_window))->buffer));
 #endif
          UNGCPRO;
        }
@@ -11413,8 +11413,8 @@
 #if defined (USE_GTK) || defined (HAVE_NS)
   int do_update = FRAME_EXTERNAL_TOOL_BAR (f);
 #else
-  int do_update = WINDOWP (f->tool_bar_window)
-    && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)) > 0;
+  int do_update = WINDOWP (FVAR (f, tool_bar_window))
+    && WINDOW_TOTAL_LINES (XWINDOW (FVAR (f, tool_bar_window))) > 0;
 #endif
 
   if (do_update)
@@ -11475,18 +11475,18 @@
          selected_frame = frame;
 
          /* Build desired tool-bar items from keymaps.  */
-          new_tool_bar = tool_bar_items (Fcopy_sequence (f->tool_bar_items),
-                                         &new_n_tool_bar);
+          new_tool_bar = tool_bar_items 
+           (Fcopy_sequence (FVAR (f, tool_bar_items)), &new_n_tool_bar);
 
          /* Redisplay the tool-bar if we changed it.  */
          if (new_n_tool_bar != f->n_tool_bar_items
-             || NILP (Fequal (new_tool_bar, f->tool_bar_items)))
+             || NILP (Fequal (new_tool_bar, FVAR (f, tool_bar_items))))
             {
               /* Redisplay that happens asynchronously due to an expose event
                  may access f->tool_bar_items.  Make sure we update both
                  variables within BLOCK_INPUT so no such event interrupts.  */
               BLOCK_INPUT;
-              f->tool_bar_items = new_tool_bar;
+              FVAR (f, tool_bar_items) = new_tool_bar;
               f->n_tool_bar_items = new_n_tool_bar;
               w->update_mode_line = 1;
               UNBLOCK_INPUT;
@@ -11519,22 +11519,22 @@
      Otherwise, make a new string.  */
 
   /* The size of the string we might be able to reuse.  */
-  size = (STRINGP (f->desired_tool_bar_string)
-         ? SCHARS (f->desired_tool_bar_string)
+  size = (STRINGP (FVAR (f, desired_tool_bar_string))
+         ? SCHARS (FVAR (f, desired_tool_bar_string))
          : 0);
 
   /* We need one space in the string for each image.  */
   size_needed = f->n_tool_bar_items;
 
   /* Reuse f->desired_tool_bar_string, if possible.  */
-  if (size < size_needed || NILP (f->desired_tool_bar_string))
-    f->desired_tool_bar_string = Fmake_string (make_number (size_needed),
-                                              make_number (' '));
+  if (size < size_needed || NILP (FVAR (f, desired_tool_bar_string)))
+    FVAR (f, desired_tool_bar_string)
+      = Fmake_string (make_number (size_needed), make_number (' '));
   else
     {
       props = list4 (Qdisplay, Qnil, Qmenu_item, Qnil);
       Fremove_text_properties (make_number (0), make_number (size),
-                              props, f->desired_tool_bar_string);
+                              props, FVAR (f, desired_tool_bar_string));
     }
 
   /* Put a `display' property on the string for the images to display,
@@ -11542,7 +11542,8 @@
      is the index of the item in F's tool-bar item vector.  */
   for (i = 0; i < f->n_tool_bar_items; ++i)
     {
-#define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
+#define PROP(IDX) \
+  AREF (FVAR (f, tool_bar_items), i * TOOL_BAR_ITEM_NSLOTS + (IDX))
 
       int enabled_p = !NILP (PROP (TOOL_BAR_ITEM_ENABLED_P));
       int selected_p = !NILP (PROP (TOOL_BAR_ITEM_SELECTED_P));
@@ -11651,11 +11652,11 @@
          string.  The string can be longer than needed when we reuse a
          previous string.  */
       if (i + 1 == f->n_tool_bar_items)
-       end = SCHARS (f->desired_tool_bar_string);
+       end = SCHARS (FVAR (f, desired_tool_bar_string));
       else
        end = i + 1;
       Fadd_text_properties (make_number (i), make_number (end),
-                           props, f->desired_tool_bar_string);
+                           props, FVAR (f, desired_tool_bar_string));
 #undef PROP
     }
 
@@ -11805,7 +11806,7 @@
 static int
 tool_bar_lines_needed (struct frame *f, int *n_rows)
 {
-  struct window *w = XWINDOW (f->tool_bar_window);
+  struct window *w = XWINDOW (FVAR (f, tool_bar_window));
   struct it it;
   /* tool_bar_lines_needed is called from redisplay_tool_bar after building
      the desired matrix, so use (unused) mode-line row as temporary row to
@@ -11817,7 +11818,7 @@
   init_iterator (&it, w, -1, -1, temp_row, TOOL_BAR_FACE_ID);
   it.first_visible_x = 0;
   it.last_visible_x = FRAME_TOTAL_COLS (f) * FRAME_COLUMN_WIDTH (f);
-  reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
+  reseat_to_string (&it, NULL, FVAR (f, desired_tool_bar_string), 0, 0, 0, -1);
   it.paragraph_embedding = L2R;
 
   while (!ITERATOR_AT_END_P (&it))
@@ -11851,8 +11852,8 @@
     CHECK_FRAME (frame);
   f = XFRAME (frame);
 
-  if (WINDOWP (f->tool_bar_window)
-      && (w = XWINDOW (f->tool_bar_window),
+  if (WINDOWP (FVAR (f, tool_bar_window))
+      && (w = XWINDOW (FVAR (f, tool_bar_window)),
          WINDOW_TOTAL_LINES (w) > 0))
     {
       update_tool_bar (f, 1);
@@ -11887,8 +11888,8 @@
      do anything.  This means you must start with tool-bar-lines
      non-zero to get the auto-sizing effect.  Or in other words, you
      can turn off tool-bars by specifying tool-bar-lines zero.  */
-  if (!WINDOWP (f->tool_bar_window)
-      || (w = XWINDOW (f->tool_bar_window),
+  if (!WINDOWP (FVAR (f, tool_bar_window))
+      || (w = XWINDOW (FVAR (f, tool_bar_window)),
           WINDOW_TOTAL_LINES (w) == 0))
     return 0;
 
@@ -11900,7 +11901,7 @@
 
   /* Build a string that represents the contents of the tool-bar.  */
   build_desired_tool_bar_string (f);
-  reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
+  reseat_to_string (&it, NULL, FVAR (f, desired_tool_bar_string), 0, 0, 0, -1);
   /* FIXME: This should be controlled by a user option.  But it
      doesn't make sense to have an R2L tool bar if the menu bar cannot
      be drawn also R2L, and making the menu bar R2L is tricky due
@@ -12057,14 +12058,14 @@
   /* This function can be called asynchronously, which means we must
      exclude any possibility that Fget_text_property signals an
      error.  */
-  charpos = min (SCHARS (f->current_tool_bar_string), glyph->charpos);
+  charpos = min (SCHARS (FVAR (f, current_tool_bar_string)), glyph->charpos);
   charpos = max (0, charpos);
 
   /* Get the text property `menu-item' at pos. The value of that
      property is the start index of this item's properties in
      F->tool_bar_items.  */
   prop = Fget_text_property (make_number (charpos),
-                            Qmenu_item, f->current_tool_bar_string);
+                            Qmenu_item, FVAR (f, current_tool_bar_string));
   if (INTEGERP (prop))
     {
       *prop_idx = XINT (prop);
@@ -12092,7 +12093,7 @@
                   int *hpos, int *vpos, int *prop_idx)
 {
   Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
-  struct window *w = XWINDOW (f->tool_bar_window);
+  struct window *w = XWINDOW (FVAR (f, tool_bar_window));
   int area;
 
   /* Find the glyph under X/Y.  */
@@ -12106,7 +12107,7 @@
     return -1;
 
   /* Is mouse on the highlighted item?  */
-  if (EQ (f->tool_bar_window, hlinfo->mouse_face_window)
+  if (EQ (FVAR (f, tool_bar_window), hlinfo->mouse_face_window)
       && *vpos >= hlinfo->mouse_face_beg_row
       && *vpos <= hlinfo->mouse_face_end_row
       && (*vpos > hlinfo->mouse_face_beg_row
@@ -12131,7 +12132,7 @@
                       int modifiers)
 {
   Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
-  struct window *w = XWINDOW (f->tool_bar_window);
+  struct window *w = XWINDOW (FVAR (f, tool_bar_window));
   int hpos, vpos, prop_idx;
   struct glyph *glyph;
   Lisp_Object enabled_p;
@@ -12142,7 +12143,7 @@
     return;
 
   /* If item is disabled, do nothing.  */
-  enabled_p = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_ENABLED_P);
+  enabled_p = AREF (FVAR (f, tool_bar_items), prop_idx + 
TOOL_BAR_ITEM_ENABLED_P);
   if (NILP (enabled_p))
     return;
 
@@ -12163,7 +12164,7 @@
       show_mouse_face (hlinfo, DRAW_IMAGE_RAISED);
       hlinfo->mouse_face_image_state = DRAW_IMAGE_RAISED;
 
-      key = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_KEY);
+      key = AREF (FVAR (f, tool_bar_items), prop_idx + TOOL_BAR_ITEM_KEY);
 
       XSETFRAME (frame, f);
       event.kind = TOOL_BAR_EVENT;
@@ -12188,7 +12189,7 @@
 static void
 note_tool_bar_highlight (struct frame *f, int x, int y)
 {
-  Lisp_Object window = f->tool_bar_window;
+  Lisp_Object window = FVAR (f, tool_bar_window);
   struct window *w = XWINDOW (window);
   Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
   Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
@@ -12234,7 +12235,7 @@
   draw = mouse_down_p ? DRAW_IMAGE_SUNKEN : DRAW_IMAGE_RAISED;
 
   /* If tool-bar item is not enabled, don't highlight it.  */
-  enabled_p = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_ENABLED_P);
+  enabled_p = AREF (FVAR (f, tool_bar_items), prop_idx + 
TOOL_BAR_ITEM_ENABLED_P);
   if (!NILP (enabled_p))
     {
       /* Compute the x-position of the glyph.  In front and past the
@@ -12268,9 +12269,9 @@
      XTread_socket does the rest.  */
   help_echo_object = help_echo_window = Qnil;
   help_echo_pos = -1;
-  help_echo_string = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_HELP);
+  help_echo_string = AREF (FVAR (f, tool_bar_items), prop_idx + 
TOOL_BAR_ITEM_HELP);
   if (NILP (help_echo_string))
-    help_echo_string = AREF (f->tool_bar_items, prop_idx + 
TOOL_BAR_ITEM_CAPTION);
+    help_echo_string = AREF (FVAR (f, tool_bar_items), prop_idx + 
TOOL_BAR_ITEM_CAPTION);
 }
 
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -12851,7 +12852,8 @@
   selected_frame = frame;
 
   do {
-    for (tail = XFRAME (frame)->param_alist; CONSP (tail); tail = XCDR (tail))
+    for (tail = FVAR (XFRAME (frame), param_alist);
+        CONSP (tail); tail = XCDR (tail))
       if (CONSP (XCAR (tail))
          && (tem = XCAR (XCAR (tail)),
              SYMBOLP (tem))
@@ -13424,7 +13426,7 @@
                  if (!f->already_hscrolled_p)
                    {
                      f->already_hscrolled_p = 1;
-                     if (hscroll_windows (f->root_window))
+                     if (hscroll_windows (FVAR (f, root_window)))
                        goto retry;
                    }
 
@@ -13437,7 +13439,7 @@
                  STOP_POLLING;
 
                  /* Update the display.  */
-                 set_window_update_flags (XWINDOW (f->root_window), 1);
+                 set_window_update_flags (XWINDOW (FVAR (f, root_window)), 1);
                  pending |= update_frame (f, 0, 0);
                  f->updated_p = 1;
                }
@@ -13450,7 +13452,8 @@
           and selected_window to be temporarily out-of-sync but let's make
           sure this stays contained.  */
        select_frame_for_redisplay (old_frame);
-      eassert (EQ (XFRAME (selected_frame)->selected_window, selected_window));
+      eassert (EQ (FVAR (XFRAME (selected_frame), selected_window),
+                  selected_window));
 
       if (!pending)
        {
@@ -13462,7 +13465,7 @@
              struct frame *f = XFRAME (frame);
               if (f->updated_p)
                 {
-                  mark_window_display_accurate (f->root_window, 1);
+                  mark_window_display_accurate (FVAR (f, root_window), 1);
                   if (FRAME_TERMINAL (f)->frame_up_to_date_hook)
                     FRAME_TERMINAL (f)->frame_up_to_date_hook (f);
                 }
@@ -16158,7 +16161,7 @@
          if (FRAME_EXTERNAL_TOOL_BAR (f))
            redisplay_tool_bar (f);
 #else
-         if (WINDOWP (f->tool_bar_window)
+         if (WINDOWP (FVAR (f, tool_bar_window))
              && (FRAME_TOOL_BAR_LINES (f) > 0
                  || !NILP (Vauto_resize_tool_bars))
              && redisplay_tool_bar (f))
@@ -18113,7 +18116,7 @@
   (Lisp_Object row, Lisp_Object glyphs)
 {
   struct frame *sf = SELECTED_FRAME ();
-  struct glyph_matrix *m = XWINDOW (sf->tool_bar_window)->current_matrix;
+  struct glyph_matrix *m = XWINDOW (FVAR (sf, 
tool_bar_window))->current_matrix;
   EMACS_INT vpos;
 
   CHECK_NUMBER (row);
@@ -20098,8 +20101,8 @@
       /* Menu bar lines are displayed in the desired matrix of the
         dummy window menu_bar_window.  */
       struct window *menu_w;
-      eassert (WINDOWP (f->menu_bar_window));
-      menu_w = XWINDOW (f->menu_bar_window);
+      eassert (WINDOWP (FVAR (f, menu_bar_window)));
+      menu_w = XWINDOW (FVAR (f, menu_bar_window));
       init_iterator (&it, menu_w, -1, -1, menu_w->desired_matrix->rows,
                     MENU_FACE_ID);
       it.first_visible_x = 0;
@@ -21403,10 +21406,10 @@
 
     case 'F':
       /* %F displays the frame name.  */
-      if (!NILP (f->title))
-       return SSDATA (f->title);
+      if (!NILP (FVAR (f, title)))
+       return SSDATA (FVAR (f, title));
       if (f->explicit_name || ! FRAME_WINDOW_P (f))
-       return SSDATA (f->name);
+       return SSDATA (FVAR (f, name));
       return "Emacs";
 
     case 'f':
@@ -25570,7 +25573,7 @@
     }
 
   /* Detect a nonselected window or nonselected frame.  */
-  else if (w != XWINDOW (f->selected_window)
+  else if (w != XWINDOW (FVAR (f, selected_window))
           || f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame)
     {
       *active_cursor = 0;
@@ -26112,7 +26115,7 @@
 void
 x_update_cursor (struct frame *f, int on_p)
 {
-  update_cursor_in_window_tree (XWINDOW (f->root_window), on_p);
+  update_cursor_in_window_tree (XWINDOW (FVAR (f, root_window)), on_p);
 }
 
 
@@ -26271,7 +26274,7 @@
   if (FRAME_WINDOW_P (f))
     {
       if (draw == DRAW_NORMAL_TEXT
-         && !EQ (hlinfo->mouse_face_window, f->tool_bar_window))
+         && !EQ (hlinfo->mouse_face_window, FVAR (f, tool_bar_window)))
        FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor);
       else if (draw == DRAW_MOUSE_FACE)
        FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor);
@@ -27627,7 +27630,7 @@
 #ifdef HAVE_WINDOW_SYSTEM
   /* Handle tool-bar window differently since it doesn't display a
      buffer.  */
-  if (EQ (window, f->tool_bar_window))
+  if (EQ (window, FVAR (f, tool_bar_window)))
     {
       note_tool_bar_highlight (f, x, y);
       return;
@@ -28537,18 +28540,18 @@
     }
 
   TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height));
-  mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r);
+  mouse_face_overwritten_p = expose_window_tree (XWINDOW (FVAR (f, 
root_window)), &r);
 
-  if (WINDOWP (f->tool_bar_window))
+  if (WINDOWP (FVAR (f, tool_bar_window)))
     mouse_face_overwritten_p
-      |= expose_window (XWINDOW (f->tool_bar_window), &r);
+      |= expose_window (XWINDOW (FVAR (f, tool_bar_window)), &r);
 
 #ifdef HAVE_X_WINDOWS
 #ifndef MSDOS
 #ifndef USE_X_TOOLKIT
-  if (WINDOWP (f->menu_bar_window))
+  if (WINDOWP (FVAR (f, menu_bar_window)))
     mouse_face_overwritten_p
-      |= expose_window (XWINDOW (f->menu_bar_window), &r);
+      |= expose_window (XWINDOW (FVAR (f, menu_bar_window)), &r);
 #endif /* not USE_X_TOOLKIT */
 #endif
 #endif

=== modified file 'src/xfaces.c'
--- a/src/xfaces.c      2012-07-30 06:43:46 +0000
+++ b/src/xfaces.c      2012-07-31 12:36:19 +0000
@@ -2051,7 +2051,7 @@
   Lisp_Object lface;
 
   if (f)
-    lface = assq_no_quit (face_name, f->face_alist);
+    lface = assq_no_quit (face_name, FVAR (f, face_alist));
   else
     lface = assq_no_quit (face_name, Vface_new_frame_defaults);
 
@@ -2678,7 +2678,8 @@
          lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE),
                                Qunspecified);
          ASET (lface, 0, Qface);
-         f->face_alist = Fcons (Fcons (face, lface), f->face_alist);
+         FVAR (f, face_alist) = Fcons (Fcons (face, lface), FVAR (f,
+                                                                 face_alist));
        }
       else
        for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
@@ -3357,7 +3358,7 @@
   /* If there are no faces yet, give up.  This is the case when called
      from Fx_create_frame, and we do the necessary things later in
      face-set-after-frame-defaults.  */
-  if (NILP (f->face_alist))
+  if (NILP (FVAR (f, face_alist)))
     return;
 
   if (EQ (param, Qforeground_color))
@@ -4043,7 +4044,7 @@
   (Lisp_Object frame)
 {
   struct frame *f = frame_or_selected_frame (frame, 0);
-  return f->face_alist;
+  return FVAR (f, face_alist);
 }
 
 
@@ -4334,7 +4335,7 @@
         matrices as invalid because they will reference faces freed
         above.  This function is also called when a frame is
         destroyed.  In this case, the root window of F is nil.  */
-      if (WINDOWP (f->root_window))
+      if (WINDOWP (FVAR (f, root_window)))
        {
          clear_current_matrices (f);
          ++windows_or_buffers_changed;
@@ -5107,7 +5108,7 @@
        {
          frame = XCAR (fl_tail);
          if (!NILP (Fequal (Fcdr (Fassq (Qdisplay,
-                                         XFRAME (frame)->param_alist)),
+                                         FVAR (XFRAME (frame), param_alist))),
                             display)))
            break;
        }
@@ -5403,7 +5404,7 @@
     {
       /* This function is called so early that colors are not yet
         set in the frame parameter list.  */
-      Lisp_Object color = Fassq (Qforeground_color, f->param_alist);
+      Lisp_Object color = Fassq (Qforeground_color, FVAR (f, param_alist));
 
       if (CONSP (color) && STRINGP (XCDR (color)))
        LFACE_FOREGROUND (lface) = XCDR (color);
@@ -5419,7 +5420,7 @@
     {
       /* This function is called so early that colors are not yet
         set in the frame parameter list.  */
-      Lisp_Object color = Fassq (Qbackground_color, f->param_alist);
+      Lisp_Object color = Fassq (Qbackground_color, FVAR (f, param_alist));
       if (CONSP (color) && STRINGP (XCDR (color)))
        LFACE_BACKGROUND (lface) = XCDR (color);
       else if (FRAME_WINDOW_P (f))

=== modified file 'src/xfns.c'
--- a/src/xfns.c        2012-07-31 11:37:38 +0000
+++ b/src/xfns.c        2012-07-31 12:36:19 +0000
@@ -665,7 +665,7 @@
 
 #ifdef USE_GTK
   if (xg_change_toolbar_position (f, new_value))
-    f->tool_bar_position = new_value;
+    FVAR (f, tool_bar_position) = new_value;
 #endif
 }
 
@@ -1123,9 +1123,9 @@
   BLOCK_INPUT;
   if (NILP (arg))
     result = x_text_icon (f,
-                         SSDATA ((!NILP (f->icon_name)
-                                  ? f->icon_name
-                                  : f->name)));
+                         SSDATA ((!NILP (FVAR (f, icon_name))
+                                  ? FVAR (f, icon_name)
+                                  : FVAR (f, name))));
   else
     result = x_bitmap_icon (f, arg);
 
@@ -1152,7 +1152,7 @@
   else if (!NILP (arg) || NILP (oldval))
     return;
 
-  f->icon_name = arg;
+  FVAR (f, icon_name) = arg;
 
   if (f->output_data.x->icon_bitmap != 0)
     return;
@@ -1160,11 +1160,11 @@
   BLOCK_INPUT;
 
   result = x_text_icon (f,
-                       SSDATA ((!NILP (f->icon_name)
-                                ? f->icon_name
-                                : !NILP (f->title)
-                                ? f->title
-                                : f->name)));
+                       SSDATA ((!NILP (FVAR (f, icon_name))
+                                ? FVAR (f, icon_name)
+                                : !NILP (FVAR (f, title))
+                                ? FVAR (f, title)
+                                : FVAR (f, name))));
 
   if (result)
     {
@@ -1352,8 +1352,8 @@
           UNBLOCK_INPUT;
         }
 
-      if (WINDOWP (f->tool_bar_window))
-       clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix);
+      if (WINDOWP (FVAR (f, tool_bar_window)))
+       clear_glyph_matrix (XWINDOW (FVAR (f, 
tool_bar_window))->current_matrix);
     }
 
     run_window_configuration_change_hook (f);
@@ -1548,7 +1548,7 @@
        if (text.nitems != bytes)
          error ("Window name too large");
 
-       if (!STRINGP (f->icon_name))
+       if (!STRINGP (FVAR (f, icon_name)))
          {
            icon = text;
            encoded_icon_name = encoded_name;
@@ -1556,7 +1556,7 @@
        else
          {
            /* See the above comment "Note: Encoding strategy".  */
-           icon.value = x_encode_text (f->icon_name, coding_system, 0,
+           icon.value = x_encode_text (FVAR (f, icon_name), coding_system, 0,
                                        &bytes, &stringp, &do_free_icon_value);
            icon.encoding = (stringp ? XA_STRING
                             : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
@@ -1565,7 +1565,7 @@
            if (icon.nitems != bytes)
              error ("Icon name too large");
 
-           encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
+           encoded_icon_name = ENCODE_UTF_8 (FVAR (f, icon_name));
          }
 
 #ifdef USE_GTK
@@ -1632,7 +1632,7 @@
       /* Check for no change needed in this very common case
         before we do any consing.  */
       if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name,
-                  SSDATA (f->name)))
+                  SSDATA (FVAR (f, name))))
        return;
       name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name);
     }
@@ -1640,15 +1640,15 @@
     CHECK_STRING (name);
 
   /* Don't change the name if it's already NAME.  */
-  if (! NILP (Fstring_equal (name, f->name)))
+  if (! NILP (Fstring_equal (name, FVAR (f, name))))
     return;
 
-  f->name = name;
+  FVAR (f, name) = name;
 
   /* For setting the frame title, the title parameter should override
      the name parameter.  */
-  if (! NILP (f->title))
-    name = f->title;
+  if (! NILP (FVAR (f, title)))
+    name = FVAR (f, title);
 
   x_set_name_internal (f, name);
 }
@@ -1678,15 +1678,15 @@
 x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
 {
   /* Don't change the title if it's already NAME.  */
-  if (EQ (name, f->title))
+  if (EQ (name, FVAR (f, title)))
     return;
 
   update_mode_lines = 1;
 
-  f->title = name;
+  FVAR (f, title) = name;
 
   if (NILP (name))
-    name = f->name;
+    name = FVAR (f, name);
   else
     CHECK_STRING (name);
 
@@ -2571,8 +2571,8 @@
     int explicit = f->explicit_name;
 
     f->explicit_name = 0;
-    name = f->name;
-    f->name = Qnil;
+    name = FVAR (f, name);
+    FVAR (f, name) = Qnil;
     x_set_name (f, name, explicit);
   }
 
@@ -2714,8 +2714,8 @@
     int explicit = f->explicit_name;
 
     f->explicit_name = 0;
-    name = f->name;
-    f->name = Qnil;
+    name = FVAR (f, name);
+    FVAR (f, name) = Qnil;
     x_set_name (f, name, explicit);
   }
 
@@ -2791,9 +2791,9 @@
         : NormalState));
 #endif
 
-  x_text_icon (f, SSDATA ((!NILP (f->icon_name)
-                          ? f->icon_name
-                          : f->name)));
+  x_text_icon (f, SSDATA ((!NILP (FVAR (f, icon_name))
+                          ? FVAR (f, icon_name)
+                          : FVAR (f, name))));
 
   UNBLOCK_INPUT;
 }
@@ -3135,11 +3135,11 @@
   f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
 #endif /* USE_TOOLKIT_SCROLL_BARS */
 
-  f->icon_name
+  FVAR (f, icon_name)
     = x_get_arg (dpyinfo, parms, Qicon_name, "iconName", "Title",
                 RES_TYPE_STRING);
-  if (! STRINGP (f->icon_name))
-    f->icon_name = Qnil;
+  if (! STRINGP (FVAR (f, icon_name)))
+    FVAR (f, icon_name) = Qnil;
 
   FRAME_X_DISPLAY_INFO (f) = dpyinfo;
 
@@ -3196,12 +3196,12 @@
      be set.  */
   if (EQ (name, Qunbound) || NILP (name))
     {
-      f->name = build_string (dpyinfo->x_id_name);
+      FVAR (f, name) = build_string (dpyinfo->x_id_name);
       f->explicit_name = 0;
     }
   else
     {
-      f->name = name;
+      FVAR (f, name) = name;
       f->explicit_name = 1;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);
@@ -3340,7 +3340,7 @@
   x_default_parameter (f, parms, Qfullscreen, Qnil,
                        "fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
   x_default_parameter (f, parms, Qtool_bar_position,
-                       f->tool_bar_position, 0, 0, RES_TYPE_SYMBOL);
+                       FVAR (f, tool_bar_position), 0, 0, RES_TYPE_SYMBOL);
 
   /* Compute the size of the X window.  */
   window_prompting = x_figure_window_size (f, parms, 1);
@@ -3468,7 +3468,7 @@
      by x_get_arg and friends, now go in the misc. alist of the frame.  */
   for (tem = parms; CONSP (tem); tem = XCDR (tem))
     if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
-      f->param_alist = Fcons (XCAR (tem), f->param_alist);
+      FVAR (f, param_alist) = Fcons (XCAR (tem), FVAR (f, param_alist));
 
   UNGCPRO;
 
@@ -4621,7 +4621,7 @@
   f->output_data.x->scroll_bar_top_shadow_pixel = -1;
   f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
 #endif /* USE_TOOLKIT_SCROLL_BARS */
-  f->icon_name = Qnil;
+  FVAR (f, icon_name) = Qnil;
   FRAME_X_DISPLAY_INFO (f) = dpyinfo;
   f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
   f->output_data.x->explicit_parent = 0;
@@ -4663,12 +4663,12 @@
      be set.  */
   if (EQ (name, Qunbound) || NILP (name))
     {
-      f->name = build_string (dpyinfo->x_id_name);
+      FVAR (f, name) = build_string (dpyinfo->x_id_name);
       f->explicit_name = 0;
     }
   else
     {
-      f->name = name;
+      FVAR (f, name) = name;
       f->explicit_name = 1;
       /* use the frame's title when getting resources for this frame.  */
       specbind (Qx_resource_name, name);

=== modified file 'src/xmenu.c'
--- a/src/xmenu.c       2012-07-19 11:39:38 +0000
+++ b/src/xmenu.c       2012-07-31 12:36:19 +0000
@@ -835,7 +835,7 @@
   if (!f)
     return;
   find_and_call_menu_selection (f, f->menu_bar_items_used,
-                                f->menu_bar_vector, client_data);
+                                FVAR (f, menu_bar_vector), client_data);
 }
 #endif /* not USE_GTK */
 
@@ -1014,14 +1014,14 @@
 
       /* Save the frame's previous menu bar contents data.  */
       if (previous_menu_items_used)
-       memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents,
+       memcpy (previous_items, XVECTOR (FVAR (f, menu_bar_vector))->contents,
                previous_menu_items_used * sizeof (Lisp_Object));
 
       /* Fill in menu_items with the current menu bar contents.
         This can evaluate Lisp code.  */
       save_menu_items ();
 
-      menu_items = f->menu_bar_vector;
+      menu_items = FVAR (f, menu_bar_vector);
       menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0;
       subitems = ASIZE (items) / 4;
       submenu_start = alloca ((subitems + 1) * sizeof *submenu_start);
@@ -1100,7 +1100,7 @@
        }
 
       /* The menu items are different, so store them in the frame.  */
-      f->menu_bar_vector = menu_items;
+      FVAR (f, menu_bar_vector) = menu_items;
       f->menu_bar_items_used = menu_items_used;
 
       /* This undoes save_menu_items.  */

=== modified file 'src/xterm.c'
--- a/src/xterm.c       2012-07-31 11:37:38 +0000
+++ b/src/xterm.c       2012-07-31 12:36:19 +0000
@@ -6357,7 +6357,7 @@
         mouse highlighting.  */
       if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
          && (f == 0
-             || !EQ (f->tool_bar_window, hlinfo->mouse_face_window)))
+             || !EQ (FVAR (f, tool_bar_window), hlinfo->mouse_face_window)))
         {
           clear_mouse_face (hlinfo);
           hlinfo->mouse_face_hidden = 1;
@@ -6904,15 +6904,15 @@
         if (f)
           {
             /* Is this in the tool-bar?  */
-            if (WINDOWP (f->tool_bar_window)
-                && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)))
+            if (WINDOWP (FVAR (f, tool_bar_window))
+                && WINDOW_TOTAL_LINES (XWINDOW (FVAR (f, tool_bar_window))))
               {
                 Lisp_Object window;
                 int x = event.xbutton.x;
                 int y = event.xbutton.y;
 
                 window = window_from_coordinates (f, x, y, 0, 1);
-                tool_bar_p = EQ (window, f->tool_bar_window);
+                tool_bar_p = EQ (window, FVAR (f, tool_bar_window));
 
                 if (tool_bar_p && event.xbutton.button < 4)
                   {
@@ -7503,7 +7503,7 @@
        }
 
 #ifdef HAVE_X_I18N
-      if (w == XWINDOW (f->selected_window))
+      if (w == XWINDOW (FVAR (f, selected_window)))
        if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition))
          xic_set_preeditarea (w, x, y);
 #endif
@@ -8154,7 +8154,7 @@
                  xic_set_statusarea (f);
                if (FRAME_XIC_STYLE (f) & XIMPreeditPosition)
                  {
-                   struct window *w = XWINDOW (f->selected_window);
+                   struct window *w = XWINDOW (FVAR (f, selected_window));
                    xic_set_preeditarea (w, w->cursor.x, w->cursor.y);
                  }
              }
@@ -8942,7 +8942,7 @@
 #endif /* not USE_GTK */
 
   /* If cursor was outside the new size, mark it as off.  */
-  mark_window_cursors_off (XWINDOW (f->root_window));
+  mark_window_cursors_off (XWINDOW (FVAR (f, root_window)));
 
   /* Clear out any recollection of where the mouse highlighting was,
      since it might be in a place that's outside the new frame size.
@@ -10399,13 +10399,10 @@
 
   connection = ConnectionNumber (dpyinfo->display);
   dpyinfo->connection = connection;
-
-  {
-    dpyinfo->gray
-      = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
-                                    gray_bits, gray_width, gray_height,
-                                    1, 0, 1);
-  }
+  dpyinfo->gray
+    = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
+                                  gray_bits, gray_width, gray_height,
+                                  1, 0, 1);
 
 #ifdef HAVE_X_I18N
   xim_initialize (dpyinfo, resource_name);


reply via email to

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