* macros.c (Fend_kbd_macro): Don't use XFASTINT to check if arg is
authorJim Blandy <jimb@redhat.com>
Sat, 12 Dec 1992 15:35:41 +0000 (15:35 +0000)
committerJim Blandy <jimb@redhat.com>
Sat, 12 Dec 1992 15:35:41 +0000 (15:35 +0000)
negative; XFASTINT only works on values known to be positive.
(Fexecute_kbd_macro): Check QUIT in the repetition loop.  If the
macro is null, no characters are actually being read, so this
matters.

src/macros.c

index 64e9177..194219b 100644 (file)
@@ -115,8 +115,8 @@ An argument of zero means repeat until error.")
     Fexecute_kbd_macro (Vlast_kbd_macro, arg);
   else
     {
-      XFASTINT (arg)--;
-      if (XFASTINT (arg) > 0)
+      XSETINT (arg, XINT (arg)-1);
+      if (XINT (arg) > 0)
        Fexecute_kbd_macro (Vlast_kbd_macro, arg);
     }
   return Qnil;
@@ -217,6 +217,8 @@ COUNT is a repeat count, or nil for once, or 0 for infinite loop.")
       executing_macro_index = 0;
 
       command_loop_1 ();
+
+      QUIT;
     }
   while (--repeat && (XTYPE (Vexecuting_macro) == Lisp_String
                      || XTYPE (Vexecuting_macro) == Lisp_Vector));