]> git.eshelyaron.com Git - emacs.git/commitdiff
FOR_EACH_FRAME no longer assumes frame-list
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Dec 2017 17:07:52 +0000 (09:07 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Dec 2017 17:08:27 +0000 (09:08 -0800)
This cleans up a recent fix related to Bug#29661.
Suggested by Stefan Monnier in:
https://lists.gnu.org/r/emacs-devel/2017-12/msg00544.html
* src/frame.c (next_frame, prev_frame, delete_frame):
Restore debugging checks that Vframe_list is non-nil,
as FOR_EACH_FRAME no longer has these checks.
(delete_frame): Remove no-longer-needed checks that Vframe_list is
non-nil, as FOR_EACH_FRAME no longer assumes that.
* src/frame.h (FOR_EACH_FRAME): Do not assume Vframe_list is non-nil.

src/frame.c
src/frame.h

index 66d1b5c759e3a12d55364f8cc9fb1e6ccad83b78..63fa8abb7da9f10b01e8d55f1c8458a06a826cd7 100644 (file)
@@ -1607,6 +1607,8 @@ next_frame (Lisp_Object frame, Lisp_Object minibuf)
   Lisp_Object f, tail;
   int passed = 0;
 
+  eassume (CONSP (Vframe_list));
+
   while (passed < 2)
     FOR_EACH_FRAME (tail, f)
       {
@@ -1629,6 +1631,8 @@ prev_frame (Lisp_Object frame, Lisp_Object minibuf)
 {
   Lisp_Object f, tail, prev = Qnil;
 
+  eassume (CONSP (Vframe_list));
+
   FOR_EACH_FRAME (tail, f)
     {
       if (EQ (frame, f) && !NILP (prev))
@@ -1914,6 +1918,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
   if (f == sf)
     {
       Lisp_Object tail;
+      eassume (CONSP (Vframe_list));
 
       /* Look for another visible frame on the same terminal.
         Do not call next_frame here because it may loop forever.
@@ -2058,7 +2063,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
 
   /* If we've deleted the last_nonminibuf_frame, then try to find
      another one.  */
-  if (f == last_nonminibuf_frame && !NILP (Vframe_list))
+  if (f == last_nonminibuf_frame)
     {
       last_nonminibuf_frame = 0;
 
@@ -2076,7 +2081,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
 
   /* If there's no other frame on the same kboard, get out of
      single-kboard state if we're in it for this kboard.  */
-  if (kb != NULL && !NILP (Vframe_list))
+  if (kb != NULL)
     {
       /* Some frame we found on the same kboard, or nil if there are none.  */
       Lisp_Object frame_on_same_kboard = Qnil;
@@ -2093,9 +2098,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
   /* If we've deleted this keyboard's default_minibuffer_frame, try to
      find another one.  Prefer minibuffer-only frames, but also notice
      frames with other windows.  */
-  if (kb != NULL
-      && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame))
-      && !NILP (Vframe_list))
+  if (kb != NULL && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame)))
     {
       /* The last frame we saw with a minibuffer, minibuffer-only or not.  */
       Lisp_Object frame_with_minibuf = Qnil;
index a3b7763643589207f4c6de59b43dc726654619d3..a5d4e4fc88b56f916840fdc6e952aaecf38a72c7 100644 (file)
@@ -1149,8 +1149,7 @@ default_pixels_per_inch_y (void)
 /* FOR_EACH_FRAME (LIST_VAR, FRAME_VAR) followed by a statement is a
    `for' loop which iterates over the elements of Vframe_list.  The
    loop will set FRAME_VAR, a Lisp_Object, to each frame in
-   Vframe_list in succession and execute the statement.  Vframe_list
-   should be nonempty, so the body is executed at least once.  LIST_VAR
+   Vframe_list in succession and execute the statement.  LIST_VAR
    should be a Lisp_Object too; it is used to iterate through the
    Vframe_list.  Note that this macro walks over child frames and
    the tooltip frame as well.
@@ -1160,7 +1159,7 @@ default_pixels_per_inch_y (void)
    something which executes the statement once.  */
 
 #define FOR_EACH_FRAME(list_var, frame_var)    \
-  for ((list_var) = (eassume (CONSP (Vframe_list)), Vframe_list); \
+  for ((list_var) = Vframe_list;               \
        (CONSP (list_var)                       \
        && (frame_var = XCAR (list_var), true)); \
        list_var = XCDR (list_var))