Stop assuming interval pointers and lisp objects can be distinguished by
authorKen Raeburn <raeburn@raeburn.org>
Wed, 29 Mar 2000 22:14:34 +0000 (22:14 +0000)
committerKen Raeburn <raeburn@raeburn.org>
Wed, 29 Mar 2000 22:14:34 +0000 (22:14 +0000)
commite0b8c689e2b1d80da6ed235ae400ad10d117b706
treef54bb195d821f61b0f7c3fbf4eae79b72978fdbe
parent141384bdd2a332b79b36d118cd13becaf0b326b9
Stop assuming interval pointers and lisp objects can be distinguished by
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.
src/ChangeLog
src/alloc.c
src/config.in
src/intervals.c
src/intervals.h
src/lisp.h