/* Keyboard macros.
-Copyright (C) 1985-1986, 1993, 2000-2011 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993, 2000-2012 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include "lisp.h"
#include "macros.h"
#include "commands.h"
+#include "character.h"
#include "buffer.h"
#include "window.h"
#include "keyboard.h"
if (!current_kboard->kbd_macro_buffer)
{
- current_kboard->kbd_macro_buffer
- = (Lisp_Object *)xmalloc (30 * sizeof (Lisp_Object));
+ current_kboard->kbd_macro_buffer = xmalloc (30 * word_size);
current_kboard->kbd_macro_bufsize = 30;
}
update_mode_lines++;
if (current_kboard->kbd_macro_bufsize > 200)
{
current_kboard->kbd_macro_buffer
- = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
- 30 * sizeof (Lisp_Object));
+ = xrealloc (current_kboard->kbd_macro_buffer,
+ 30 * word_size);
current_kboard->kbd_macro_bufsize = 30;
}
current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_buffer;
has put another macro there. */
if (current_kboard->kbd_macro_bufsize < len + 30)
{
- if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof (Lisp_Object) - 30
- < current_kboard->kbd_macro_bufsize)
+ if (PTRDIFF_MAX < MOST_POSITIVE_FIXNUM + 30
+ && PTRDIFF_MAX < len + 30)
memory_full (SIZE_MAX);
- current_kboard->kbd_macro_buffer
- = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer,
- (len + 30) * sizeof (Lisp_Object));
- current_kboard->kbd_macro_bufsize = len + 30;
+ current_kboard->kbd_macro_buffer =
+ xpalloc (current_kboard->kbd_macro_buffer,
+ ¤t_kboard->kbd_macro_bufsize,
+ len + 30 - current_kboard->kbd_macro_bufsize, -1,
+ sizeof *current_kboard->kbd_macro_buffer);
}
/* Must convert meta modifier when copying string to vector. */
< kb->kbd_macro_bufsize)
memory_full (SIZE_MAX);
nbytes = kb->kbd_macro_bufsize * (2 * sizeof *kb->kbd_macro_buffer);
- kb->kbd_macro_buffer
- = (Lisp_Object *) xrealloc (kb->kbd_macro_buffer, nbytes);
+ kb->kbd_macro_buffer = xrealloc (kb->kbd_macro_buffer, nbytes);
kb->kbd_macro_bufsize *= 2;
kb->kbd_macro_ptr = kb->kbd_macro_buffer + ptr_offset;
kb->kbd_macro_end = kb->kbd_macro_buffer + end_offset;
from before this macro started. */
Vthis_command = KVAR (current_kboard, Vlast_command);
/* C-x z after the macro should repeat the macro. */
- real_this_command = KVAR (current_kboard, Vlast_kbd_macro);
+ Vreal_this_command = KVAR (current_kboard, Vlast_kbd_macro);
if (! NILP (KVAR (current_kboard, defining_kbd_macro)))
error ("Can't execute anonymous macro while defining one");
Vexecuting_kbd_macro = XCAR (info);
tem = XCDR (info);
executing_kbd_macro_index = XINT (XCAR (tem));
- real_this_command = XCDR (tem);
+ Vreal_this_command = XCDR (tem);
Frun_hooks (1, &Qkbd_macro_termination_hook);
return Qnil;
}
{
Lisp_Object final;
Lisp_Object tem;
- int pdlcount = SPECPDL_INDEX ();
+ ptrdiff_t pdlcount = SPECPDL_INDEX ();
EMACS_INT repeat = 1;
struct gcpro gcpro1, gcpro2;
EMACS_INT success_count = 0;
tem = Fcons (Vexecuting_kbd_macro,
Fcons (make_number (executing_kbd_macro_index),
- real_this_command));
+ Vreal_this_command));
record_unwind_protect (pop_kbd_macro, tem);
GCPRO2 (final, loopfunc);
executing_kbd_macro = Qnil;
- real_this_command = Vexecuting_kbd_macro;
+ Vreal_this_command = Vexecuting_kbd_macro;
UNGCPRO;
return unbind_to (pdlcount, Qnil);