• Paul Eggert's avatar
    Avoid allocating Lisp_Save_Value for excursions · aca938d1
    Paul Eggert authored
    * src/editfns.c (save_excursion_save): New arg PDL,
    specifying where to save the state.  All uses changed.
    (save_excursion_restore): Args are now the marker and info
    rather than a pointer to a Lisp_Save_Value containing them.
    All uses changed.
    * src/eval.c (default_toplevel_binding, Fbacktrace__locals):
    Treat excursions like other miscellaneous pdl types.
    (record_unwind_protect_excursion): Save data directly
    into the pdl rather than creating an object on the heap.
    This avoids the need to allocate and free an object.
    (do_one_unbind, backtrace_eval_unrewind):
    Unwind excursions directly.
    (mark_specpdl): Mark excursions directly.
    * src/lisp.h (SPECPDL_UNWIND_EXCURSION): New constant.
    (union specbinding): New member unwind_excursion.
editfns.c 172 KB