From ea8daec9bb8ebf3cbca35edec4e4ef7b6edac3de Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 28 Sep 2022 19:05:16 -0400 Subject: itree.[ch]: Add sanity checks, comments, and minor tweaks * src/alloc.c (mark_overlay): Add sanity check. * src/buffer.c (next_overlay_change, previous_overlay_change): Tweak code to keep the same vars for the bounds. * src/itree.c (interval_tree_clear, interval_tree_insert) (interval_tree_remove, interval_tree_insert_fix, interval_tree_remove_fix): Adjust to the `color` -> `red` change. (interval_tree_clear): Prefer `true/false` for booleans. (interval_generator_create): Use an actual `interval_tree_order` value rather than 0. (interval_generator_next): Simplify a tiny bit. Add comment. (interval_generator_narrow): Add sanity check. * src/itree.h (struct interval_node): Replace `color` field with boolean `red` field. (enum interval_tree_order): Remove unused `ITREE_DEFLT_ORDER` value. * src/pdumper.c (dump_interval_node): Adjust to the `color` -> `red` change. --- src/alloc.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/alloc.c') diff --git a/src/alloc.c b/src/alloc.c index 20b8981bd66..be55dcf8dfd 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -6505,6 +6505,9 @@ mark_char_table (struct Lisp_Vector *ptr, enum pvec_type pvectype) static void mark_overlay (struct Lisp_Overlay *ov) { + /* We don't mark the `interval_node` object, because it is managed manually + rather than by the GC. */ + eassert (BASE_EQ (ov->interval->data, make_lisp_ptr (ov, Lisp_Vectorlike))); set_vectorlike_marked (&ov->header); mark_object (ov->plist); } -- cgit v1.2.1