• Paul Eggert's avatar
    Turn misc objects into pseudovectors · d614e4a8
    Paul Eggert authored
    Eliminate the category of miscellaneous objects, and turn all
    such objects into pseudovectors.  The immediate motivation
    for this change is to free up an enum Lisp_Type tag value, a
    scarce resource that can be better used elsewhere.  However,
    this change is worthwhile in its own right, as it improves
    performance slightly on my platform, 0.3% faster for 'make
    compile-always' on Fedora 28, and it simplifies the garbage
    collector and interpreter (Bug#32405).
    * doc/lispref/internals.texi (Garbage Collection):
    * etc/NEWS:
    Document change to garbage-collect return value.
    * src/alloc.c (total_markers, total_free_markers):
    (union aligned_Lisp_Misc, MARKER_BLOCK_SIZE)
    (struct marker_block, marker_block, marker_block_index)
    (misc_free_list, allocate_misc, live_misc_holding)
    (live_misc_p, sweep_misc):
    * src/lisp.h (lisp_h_MARKERP, lisp_h_MISCP, MARKERP, MISCP)
    (Lisp_Misc, enum Lisp_Misc_Type, Lisp_Misc_Free)
    (Lisp_Misc_Marker, Lisp_Misc_Overlay, Lisp_Misc_Finalizer)
    (Lisp_Misc_Ptr, Lisp_Misc_User_Ptr, Lisp_Misc_Limit)
    (Lisp_Misc_Bignum)
    (XSETMISC, struct Lisp_Misc_Any, XMISCANY, XMISCTYPE)
    (struct Lisp_Free, union Lisp_Misc, XMISC):
    Remove.  All uses removed.
    (cleanup_vector): Clean up objects that were formerly misc
    and are now pseudovectors.
    (make_misc_ptr, build_overlay, Fmake_marker, build_marker)
    (make_bignum_str, make_number, make_pure_bignum)
    (make_user_ptr, Fmake_finalizer):
    Build as pseudovectors, not as misc objects.
    (mark_finalizer_list, queue_doomed_finalizers)
    (compact_undo_list, mark_overlay, mark_object)
    (unchain_dead_markers):
    Mark as vector-like objects, not as misc objects.
    (mark_maybe_object, mark_maybe_pointer, valid_lisp_object_p)
    (total_bytes_of_live_objects, survives_gc_p):
    * src/fns.c (sxhash):
    No need to worry about misc objects.
    (garbage_collect_1): Do not generate a 'misc' component.
    (syms_of_alloc): No need for 'misc' symbol.
    * src/buffer.c (overlays_at, overlays_in, overlay_touches_p)
    (overlay_strings, recenter_overlay_lists)
    (fix_start_end_in_overlays, fix_overlays_before)
    (Foverlay_lists, report_overlay_modification)
    (evaporate_overlays):
    * src/editfns.c (overlays_around):
    * src/data.c (Ftype_of):
    * src/fns.c (internal_equal):
    * src/lisp.h (mint_ptrp, xmint_pointer, FINALIZERP)
    (XFINALIZER, MARKERP, XMARKER, OVERLAYP, XOVERLAY, USER_PTRP)
    (XUSER_PTR, BIGNUMP, XBIGNUM):
    * src/print.c (print_vectorlike, print_object):
    * src/undo.c (record_marker_adjustments):
    * src/xdisp.c (load_overlay_strings):
    Formerly misc objects are now pseudovectors.
    * src/lisp.h (PVEC_MARKER, PVEC_OVERLAY, PVEC_FINALIZER)
    (PVEC_BIGNUM, PVEC_MISC_PTR, PVEC_USER_PTR):
    New constants, replacing their misc versions.  All uses changed.
    (struct Lisp_Marker, struct Lisp_Overlay, struct Lisp_Misc_Ptr)
    (struct Lisp_Bignum, struct Lisp_User_Ptr, struct Lisp_Finalizer):
    Make usable as a pseudovector by using a pseudovector header,
    replacing any DIY components, and putting Lisp_Object members
    first.  All uses changed.
    d614e4a8
editfns.c 176 KB