• Alan Mackenzie's avatar
    Enhance struct Lisp_Subr to hold the alternative "BC_" function. · b071398b
    Alan Mackenzie authored
    Also fix a GC bug, where symbols with position were not being disabled.
    
    * src/lisp.h (union Lisp_Function): New type.
    (struct Lisp_Subr): Add fields normal_function, BC_function, and next.
    (DEFUN): Setup all three function fields to the subr (BC_function is still a
    dummy), set field next to NULL.
    
    * src/alloc.c (Fgarbage_collect): Move the binding of
    Qsymbols_with_pos_enabled to garbage_collect_1 so that it gets bound when GC
    is invoked via garbage_collect.
    
    * src/lread.c (subr_ptr, using_BC_subrs): New static variables.
    (Fswitch_to_BC_subrs, Fswitch_to_normal_subrs): New defuns.
    (defsubr): Chain new subr to previous using field next and variable subr_ptr.
    (init_lread): Initialise subr_ptr to NULL.
    (syms_of_lread): Create subrs Sswitch_to_BC_subrs and Sswitch_to_normal_subrs.
    
    * src/pdumper.c (dump_subr): Enhance to dump struct Lisp_Subr's new fields.
    Update the expected value of HASH_Lisp_Subr_xxxxxxxxxx.
    (dump_vectorlike): Also dump PVEC_SYMBOL_WITH_POSes.
    b071398b
lread.c 154 KB