use dynwind_begin and dynwind_end
[bpt/emacs.git] / src / buffer.c
index 7b735ae..7f0f2cc 100644 (file)
@@ -1721,7 +1721,7 @@ cleaning up all windows currently displaying the buffer to be killed. */)
 
   /* Run hooks with the buffer to be killed the current buffer.  */
   {
-    ptrdiff_t count = SPECPDL_INDEX ();
+    dynwind_begin ();
     Lisp_Object arglist[1];
 
     record_unwind_protect (save_excursion_restore, save_excursion_save ());
@@ -1731,8 +1731,11 @@ cleaning up all windows currently displaying the buffer to be killed. */)
        don't kill the buffer.  */
     arglist[0] = Qkill_buffer_query_functions;
     tem = Frun_hook_with_args_until_failure (1, arglist);
-    if (NILP (tem))
-      return unbind_to (count, Qnil);
+    if (NILP (tem)){
+      
+        dynwind_end ();
+        return Qnil;
+      }
 
     /* Query if the buffer is still modified.  */
     if (INTERACTIVE && !NILP (BVAR (b, filename))
@@ -1742,17 +1745,23 @@ cleaning up all windows currently displaying the buffer to be killed. */)
         tem = do_yes_or_no_p (format2 ("Buffer %s modified; kill anyway? ",
                                       BVAR (b, name), make_number (0)));
        UNGCPRO;
-       if (NILP (tem))
-         return unbind_to (count, Qnil);
+       if (NILP (tem)){
+         
+           dynwind_end ();
+         return Qnil;
+         }
       }
 
     /* If the hooks have killed the buffer, exit now.  */
-    if (!BUFFER_LIVE_P (b))
-      return unbind_to (count, Qt);
+    if (!BUFFER_LIVE_P (b)){
+      
+        dynwind_end ();
+        return Qt;
+      }
 
     /* Then run the hooks.  */
     Frun_hooks (1, &Qkill_buffer_hook);
-    unbind_to (count, Qnil);
+    dynwind_end ();
   }
 
   /* If the hooks have killed the buffer, exit now.  */
@@ -2075,7 +2084,7 @@ the current buffer's major mode.  */)
   if (NILP (function) || EQ (function, Qfundamental_mode))
     return Qnil;
 
-  count = SPECPDL_INDEX ();
+  dynwind_begin ();
 
   /* To select a nonfundamental mode,
      select the buffer temporarily and then call the mode function.  */
@@ -2085,7 +2094,8 @@ the current buffer's major mode.  */)
   Fset_buffer (buffer);
   call0 (function);
 
-  return unbind_to (count, Qnil);
+  dynwind_end ();
+  return Qnil;
 }
 
 DEFUN ("current-buffer", Fcurrent_buffer, Scurrent_buffer, 0, 0, 0,
@@ -3980,7 +3990,7 @@ buffer.  */)
 {
   struct buffer *b, *ob = 0;
   Lisp_Object obuffer;
-  ptrdiff_t count = SPECPDL_INDEX ();
+  dynwind_begin ();
   ptrdiff_t n_beg, n_end, o_beg IF_LINT (= 0), o_end IF_LINT (= 0);
 
   CHECK_OVERLAY (overlay);
@@ -4052,8 +4062,12 @@ buffer.  */)
 
   /* Delete the overlay if it is empty after clipping and has the
      evaporate property.  */
-  if (n_beg == n_end && !NILP (Foverlay_get (overlay, Qevaporate)))
-    return unbind_to (count, Fdelete_overlay (overlay));
+  if (n_beg == n_end && !NILP (Foverlay_get (overlay, Qevaporate))){
+    
+      Lisp_Object tem0 = Fdelete_overlay (overlay);
+      dynwind_end ();
+      return tem0;
+    }
 
   /* Put the overlay into the new buffer's overlay lists, first on the
      wrong list.  */
@@ -4071,7 +4085,8 @@ buffer.  */)
   /* This puts it in the right list, and in the right order.  */
   recenter_overlay_lists (b, b->overlay_center);
 
-  return unbind_to (count, overlay);
+  dynwind_end ();
+  return overlay;
 }
 
 DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
@@ -4080,13 +4095,15 @@ DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
 {
   Lisp_Object buffer;
   struct buffer *b;
-  ptrdiff_t count = SPECPDL_INDEX ();
+  dynwind_begin ();
 
   CHECK_OVERLAY (overlay);
 
   buffer = Fmarker_buffer (OVERLAY_START (overlay));
-  if (NILP (buffer))
+  if (NILP (buffer)) {
+    dynwind_end ();
     return Qnil;
+  }
 
   b = XBUFFER (buffer);
   specbind (Qinhibit_quit, Qt);
@@ -4103,7 +4120,8 @@ DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
          || !NILP (Foverlay_get (overlay, Qafter_string))))
     b->prevent_redisplay_optimizations_p = 1;
 
-  return unbind_to (count, Qnil);
+  dynwind_end ();
+  return Qnil;
 }
 
 DEFUN ("delete-all-overlays", Fdelete_all_overlays, Sdelete_all_overlays, 0, 1, 0,