1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-28 01:00:52 -07:00

Trace kboards as exact roots

* src/igc.h (igc_alloc_kboard): New.
* src/igc.c (igc_alloc_kboard): Implement it.
(scan_kbdoard): New helper.
* src/keyboard.c (init_kboard): Use igc_alloc_kboard instead of
igc_xzalloc_ambig.
This commit is contained in:
Helmut Eller 2025-06-25 10:28:46 +02:00 committed by Pip Cet
parent 7233fcef07
commit d33c6d0044
4 changed files with 48 additions and 5 deletions

View file

@ -1752,6 +1752,40 @@ scan_kbd_buffer_ambig (mps_ss_t ss, void *start, void *end, void *closure)
}
}
static mps_res_t
scan_kboard (mps_ss_t ss, void *start, void *end, void *closure)
{
struct kboard *kb = start;
MPS_SCAN_BEGIN (ss)
{
IGC_FIX12_OBJ (ss, &KVAR (kb, Voverriding_terminal_local_map));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vlast_command));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vreal_last_command));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vkeyboard_translate_table));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vlast_repeatable_command));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vprefix_arg));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vlast_prefix_arg));
IGC_FIX12_OBJ (ss, &KVAR (kb, kbd_queue));
IGC_FIX12_OBJ (ss, &KVAR (kb, defining_kbd_macro));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vlast_kbd_macro));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vsystem_key_alist));
IGC_FIX12_OBJ (ss, &KVAR (kb, system_key_syms));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vwindow_system));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vinput_decode_map));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vlocal_function_key_map));
IGC_FIX12_OBJ (ss, &KVAR (kb, Vdefault_minibuffer_frame));
IGC_FIX12_OBJ (ss, &KVAR (kb, echo_string));
IGC_FIX12_OBJ (ss, &KVAR (kb, echo_prompt));
}
MPS_SCAN_END (ss);
return MPS_RES_OK;
}
static int _Noreturn foo(void)
{
return 1;
}
/***********************************************************************
Default pad, fwd, ...
***********************************************************************/
@ -3538,6 +3572,14 @@ igc_xnrealloc_lisp_objs_exact (ptrdiff_t nitems_old,
return new;
}
struct kboard *
igc_alloc_kboard (void)
{
struct kboard *kb = xzalloc (sizeof *kb);
root_create_exact (global_igc, kb, kb + 1, scan_kboard, "kboard");
return kb;
}
static void
finalize_bignum (struct Lisp_Bignum *n)
{

View file

@ -117,6 +117,7 @@ void igc_xpalloc_exact (void **pa_cell, ptrdiff_t *nitems,
void *closure);
void *igc_xnrealloc_ambig (void *pa, ptrdiff_t nitems, ptrdiff_t item_size);
struct kboard *igc_alloc_kboard (void);
struct Lisp_Vector *igc_alloc_pseudovector (size_t nwords_mem,
size_t nwords_lisp,

View file

@ -12841,7 +12841,7 @@ KBOARD *
allocate_kboard (Lisp_Object type)
{
#ifdef HAVE_MPS
KBOARD *kb = igc_xzalloc_ambig (sizeof *kb);
KBOARD *kb = igc_alloc_kboard ();
#else
KBOARD *kb = xmalloc (sizeof *kb);
#endif

View file

@ -210,10 +210,10 @@ store_kbd_macro_char (Lisp_Object c)
ptrdiff_t ptr_offset = kb->kbd_macro_ptr - kb->kbd_macro_buffer;
ptrdiff_t end_offset = kb->kbd_macro_end - kb->kbd_macro_buffer;
#ifdef HAVE_MPS
kb->kbd_macro_buffer =
igc_xpalloc_lisp_objs_exact (kb->kbd_macro_buffer,
&kb->kbd_macro_bufsize,
1, -1, "kbd-macro-buffer");
kb->kbd_macro_buffer
= igc_xpalloc_lisp_objs_exact (kb->kbd_macro_buffer,
&kb->kbd_macro_bufsize,
1, -1, "kbd-macro-buffer");
#else
kb->kbd_macro_buffer = xpalloc (kb->kbd_macro_buffer,
&kb->kbd_macro_bufsize,