• Ken Raeburn's avatar
    Stop assuming interval pointers and lisp objects can be distinguished by · e0b8c689
    Ken Raeburn authored
    inspection.  Beginnings of support for expensive internal consistency checks.
    
    * config.in (ENABLE_CHECKING): Undef.
    
    * lisp.h (struct interval): Replace "parent" field with a union of interval
    pointer and Lisp_Object; add new bitfield to use as discriminant.  Change other
    flag fields to bitfields.
    (CHECK): New macro for consistency checking.  If ENABLE_CHECKING is defined and
    the supplied test fails, print a message and abort.
    (eassert): New macro.  Use CHECK to provide an assert-like facility.
    
    * intervals.h (NULL_INTERVAL_P): Now applies only to real interval pointers;
    abort if the value looks like a lisp object.
    (NULL_INTERVAL_P, NULL_PARENT, HAS_PARENT, HAS_OBJECT, SET_PARENT, SET_OBJECT,
    INTERVAL_PARENT, GET_INTERVAL_OBJECT, COPY_PARENT): Modify for new interval
    parent definition.
    
    * alloc.c (mark_interval_tree, MARK_INTERVAL_TREE, UNMARK_BALANCE_INTERVALS):
    Update references that need an addressable lisp object in the interval
    structure.
    (die): New function.
    (suppress_checking): New variable.
    
    * intervals.c (interval_start_pos): Just return 0 if there's no parent object.
    e0b8c689
alloc.c 121 KB