aboutsummaryrefslogtreecommitdiffstats
path: root/src/itree.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Merge from origin/emacs-29Eli Zaretskii2023-12-091-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 0f361cc985d ; Minor copyedits in description of ':box' face property 46fe7a17f53 Fix dragging mode line on text terminals with a mouse (bu... 12daf386f37 ; * doc/lispref/processes.texi (Network): Fix wording and... 037d858dc1a (rust-ts-mode): Set electric-indent-chars dc9b733ab88 js-ts-mode: Highlight function parameters inside destruct... 4a72f13bdfb js-ts-mode: Highlight property shorthands in assignments 83ed9018ede (js--treesit-font-lock-settings): Highlight parameters in... ad0f87bb4c3 (js--treesit-font-lock-settings): Remove some duplicates 71c5f3694fd ; Another fix of doc string of 'message-mail-user-agent' ... 04a39353bae ; * lisp/gnus/message.el (message-mail-user-agent): Doc f... 82ddcf37ec6 ; * doc/lispref/files.texi (Changing Files): Fix last cha... 89068516b3e Don't claim to signal an error when deleting a nonexistin... 4fd254e1830 * lisp/indent.el (indent-rigidly): Improve prompt (bug#67... 5f923ff1a6a ; Fix typos a1f88963f5d rust-ts-mode--comment-docstring: Handle block doc comments a547b0e2e83 rust-ts-mode--comment-docstring: Fix/improve the previous...
| * ; Fix typosStefan Kangas2023-12-031-1/+1
| |
* | ; Fix mistyped --enable-checking in docs.Basil L. Contovounesios2023-10-011-1/+1
| |
* | Pacify GCC 13 -Wnull-dereference in itree.cPaul Eggert2023-05-141-4/+2
| | | | | | | | | | | | * src/itree.c (itree_remove_fix): Simplify code and remove a couple of eassume calls. This works around GCC bug 109586. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109856
* | Merge from origin/emacs-29Eli Zaretskii2023-01-011-1/+1
|\ \ | |/ | | | | | | | | | | | | | | | | | | cae528457c ; Add 2023 to copyright years. b394359261 Improve documentation of 'isearch-open-overlay-temporary' ab3210e709 Document 'use-package' in the 2 main manuals # Conflicts: # etc/refcards/ru-refcard.tex # lib/explicit_bzero.c # m4/explicit_bzero.m4
| * ; Add 2023 to copyright years.Eli Zaretskii2023-01-011-1/+1
| |
| * ; Fix typosStefan Kangas2022-12-261-1/+1
| | | | | | | | (cherry picked from commit a5d39e11443fa30c8e8bc58254a1a59550dcd99e)
* | ; Fix typosStefan Kangas2022-12-231-1/+1
| |
* | Fix manual noverlay tests (again)Basil L. Contovounesios2022-12-111-1/+1
|/ | | | | | | | | | * src/itree.c (itree_iterator_start): Fix docstring typo. * test/manual/noverlay/itree-tests.c: Stop defining unused ITREE_DEBUG. Replace removed names and APIs with current ones, e.g. interval_tree_init is now called itree_init, and itree_iterator_finish no longer exists. Ensure preconditions of itree API are satisfied before use, e.g. by zero-initializing instances of itree_node before inserting them into a tree.
* ; Prefer HTTPS to HTTP in some URLsStefan Kangas2022-12-091-1/+1
|
* ; Fix typosStefan Kangas2022-11-201-1/+1
|
* itree: Make sure a deleted overlay has NULL pointer fieldsStefan Monnier2022-11-181-4/+13
| | | | | | | * src/buffer.c (delete_all_overlays): Use POST_ORDER to set the node's pointers to NULL, as god intended. * src/itree.c (itree_insert_node): Uncomment the assertion accordingly.
* Merge remote-tracking branch 'origin/scratch/noverlay'Stefan Monnier2022-11-171-231/+201
|\
| * itree.c: Get rid of the old iterator codescratch/noverlayStefan Monnier2022-11-171-183/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only use the new iterator which relies on a fixed size (and small) state in the iterator. This makes non-local exits safe within ITREE_FOREACH loops. * src/itree.c (make_nav, nav_nodeptr, nav_flag, itree_stack_clear) (itree_stack_push_flagged): Delete functions. (nodeptr_and_flag): Delete type. (struct itree_stack): Make the array hold plain pointers instead. (itree_stack_push): Inline the former code of `itree_stack_push_flagged`. (itree_stack_pop): Change return type. (itree_contains): Don't call `ITREE_FOREACH_ABORT` any more. (itree_insert_gap): Simplify access to the stack of nodes. (itree_delete_gap, itree_insert_gap): Adjust code to new return type of `itree_stack_pop`. (itree_iterator_finish): Delete function. (itree_iterator_start): Don't setup the `stack` field any more. (itree_iterator_next): Delete function. (itree_iter_next): Rename to `itree_iterator_next` and make it non-static. (itree_iterator_narrow): Don't check the `running` flag any more. * src/itree.h (itree_iterator_finish): Remove declaration. (struct itree_iterator): Remove the `stack` and `running` fields. (ITREE_FOREACH_ABORT): Delete macro. (ITREE_FOREACH): Don't call `itree_iterator_finish` any more. * src/xdisp.c (strings_with_newlines): * src/buffer.c (overlays_in, next_overlay_change, overlay_touches_p): Don't call `ITREE_FOREACH_ABORT` any more.
| * itree.c: Make the iterator reentrant (bug#59183)Stefan Monnier2022-11-171-79/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Get rid of the global iterator object and instead allocate a separate iterator for every loop. This still uses the "duplicate iterator" code, including the old iterator which needs a stack, make ITREE_FOREACH a bit more expensive than we'd like. * src/itree.h (init_itree, forget_itree, itree_iterator_busy_p): Delete declarations. (itree_iterator_start): Add iterator arg and remove `line` and `file` args. (struct itree_iterator): Move from `itree.c`. Remove `line` and `file` fields. (ITREE_FOREACH): Stack allocate an iterator object and pass it to `itree_iterator_start`. * src/itree.c (struct itree_iterator): Move to itree.h. (iter): Delete global variable. (itree_iterator_create, init_itree, forget_itree, itree_iterator_busy_p): Delete functions. (itree_contains): Adjust assertion. (itree_iterator_finish): Deallocate the iterator's stack. (itree_iterator_start): Take the (uninitialized) iterator as argument. Allocate a fresh new stack. Remove `file` and `line` arguments. Don't check `running` any more since the iterator is not expected to be initialized at all. * src/eval.c (signal_or_quit): * src/alloc.c (garbage_collect): Don't check `itree_iterator_busy_p` any more. * src/emacs.c (main): No need to `init_itree` any more. (Fdump_emacs): No need to `forget_itree` any more.
| * itree.c: Add new "stateless" iterator code and post-order traversalStefan Monnier2022-11-171-47/+251
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This still uses the old iterator code, but runs the new code alongside to make sure they behave identically. * src/itree.c (struct itree_iterator): New field `node`. (itree_iterator_create): Give it a sane default value. (itree_iterator_busy_p, itree_iterator_start, itree_iterator_finish): Move down to the "iterator" section of the file. (itree_iter_next_in_subtree, itree_iterator_first_node) (itree_iter_next): New functions. (itree_iterator_start): Initialize the new `node` field. (itree_iterator_next): Add post-order case. Call the new "stateless" `itree_iter_next` function and check that it agrees. * src/itree.h (enum itree_order): New value for post-order traversals.
* | ; Fix typos (duplicate words)Stefan Kangas2022-11-171-1/+1
|/
* * src/itree.c: Use more uniform names starting with `itree_`Stefan Monnier2022-11-161-114/+114
| | | | | | | | | | | | | (struct itree_stack, itree_stack_create, itree_stack_destroy) (itree_stack_clear, itree_stack_push_flagged, interval_stack_push) (itree_stack_pop): Rename from `interval_stack*`. (itree_max_height, itree_update_limit, itree_inherit_offset) (itree_propagate_limit, itree_validate, itree_init) (itree_rotate_left, itree_rotate_right, itree_insert_fix) (itree_contains, itree_subtree_min, itree_remove_fix) (itree_replace_child, itree_transplant): Rename from `interval_tree_*`. (itree_insert_node): Rename from `interval_tree_insert`. (itree_node_intersects): Rename from `interval_node_insert`.
* ; Fix typosStefan Kangas2022-11-111-3/+3
|
* (itree_insert_gap, itree_delete_gap): Minor optimizationStefan Monnier2022-11-071-4/+6
| | | | | | | | | | | | | | `limit` can get smaller in either of the two children of a node. It can also happen that the root node itself has a low enough limit that the loop can be interrupted right away. The previous code only checked `limit` when going down to a left child, which is not wrong, but tests suggest that it is also very common to reach this limit when going to a right child, so move the test accordingly. * src/itree.c (itree_insert_gap, itree_delete_gap): Check `limit` for all nodes, rather than only when following a `left` pointer.
* itree.c and buffer-tests.el: Incorporate code review feedbackMatt Armstrong2022-11-061-2/+2
| | | | | | | | * src/itree.c: Improve wording in `itree_insert_gap` comment. * test/src/buffer-tests.el (test-overlay-insert-before-markers-at-start): Don't rely on (point-min) being 1. (test-overlay-insert-before-markers-at-end): ditto. (test-overlay-insert-before-markers-empty): ditto.
* Minor tweaks to the fix for `insert-before-markers' overlay fixMatt Armstrong2022-11-051-1/+4
| | | | | | | | (bug#58928) * src/buffer.c (adjust_overlays_for_insert): wrap to less than 80 chars. * src/itree.c: document BEFORE_MARKERS.
* Fix the unexec buildEli Zaretskii2022-11-051-0/+8
| | | | | * src/itree.c (forget_itree): New function. * src/emacs.c (Fdump_emacs): Call 'forget_itree'.
* itree.c: Minor tighteningStefan Monnier2022-11-031-9/+14
| | | | | | * src/itree.c (iter): Initialize to NULL. (init_itree): Make sure it's not allocated before we overwrite it. (itree_insert_gap): Tweak the end-loop.
* itree: Reproduce markers's behavior more faithfully (bug#58928)Stefan Monnier2022-11-031-9/+16
| | | | | | | | | | | | | | | | | | | | | The most obvious problem was the lack of support for `insert-before-markers`, but the behavior was also different in a few other cases. * src/itree.h (itree_insert_gap): * src/itree.c (itree_insert_gap): Add `before_markers` arg. * src/lisp.h (adjust_overlays_for_insert): * src/buffer.c (adjust_overlays_for_insert): Add `before_markers` arg. * src/insdel.c (adjust_markers_for_replace, adjust_markers_for_insert) (adjust_markers_for_delete): Adjust overlays directly from here. (insert_1_both, insert_from_string_1, insert_from_gap) (insert_from_buffer_1, adjust_after_replace, replace_range) (replace_range_2, del_range_2): Don't adjust overlays explicitly here any more. * test/src/buffer-tests.el (test-overlay-insert-before-markers-empty) (test-overlay-insert-before-markers-non-empty): New tests.
* Port interval trees to --enable-checking=structsBasil L. Contovounesios2022-11-031-25/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some names under the interval_* namespace were renamed under the itree_* namespace in commits: 0. f421b58db5 of 2022-10-19 "Prefix all itree.h type names with itree_". 1. 37a1145410 of 2022-10-19 "Rename all exported itree.h functions with the itree_ prefix" Further, some values still referenced in commentary were removed in commits: 2. 258e618364 of 2022-10-17 "Delete the itree_null sentinel node, use NULL everywhere." 3. 2c4a3910b3 of 2022-10-02 "itree: Use a single iterator object" * src/emacs.c (main): Allocate global itree iterator once and for all. * src/alloc.c (mark_overlay): * src/buffer.c (set_overlays_multibyte): * src/itree.c (itree_destroy): Update commentary. (interval_stack_ensure_space, itree_insert_gap): Prefer unsigned-to-unsigned comparisons over signed-to-unsigned. (interval_stack_push_flagged, interval_tree_insert) (interval_tree_contains, itree_iterator_start) (itree_iterator_finish, itree_iterator_next, itree_iterator_narrow): Improve assertions. (itree_init): Rename... (init_itree): ...to this, for consistency with other global init functions. (itree_create): Stop leaking a global iterator allocation on each call. (interval_tree_init): Complete renames of interval_tree -> itree_tree and interval_tree_clear -> itree_clear. (interval_tree_remove_fix): Fix indentation. * src/itree.h: Declare init_itree. (ITREE_FOREACH): Fix typo in commentary. * src/pdumper.c [CHECK_STRUCTS] (dump_interval_node): Use the correct name in the HASH condition and #error message. (dump_overlay, dump_buffer): Update HASH (bug#58975).
* src/buffer.c: Fix interaction between overlays & indirect buffers (bug#58928)Stefan Monnier2022-11-011-2/+2
| | | | | | | | | | * src/buffer.c (adjust_overlays_for_insert) (adjust_overlays_for_delete): Repeat for all buffers sharing the same text. * src/itree.c (itree_insert_gap, itree_delete_gap): Allow an empty tree. * test/src/buffer-tests.el (buffer-tests--overlays-indirect-bug58928): New test.
* Fix last changePo Lu2022-10-291-4/+4
| | | | | * src/itree.c (struct itree_iterator): (itree_iterator_next): Fix some fields and const confusion.
* Fix coding style of latest feature branch mergePo Lu2022-10-291-200/+211
| | | | | | | | | | | | | | | | | * src/itree.c (interval_stack_ensure_space) (interval_stack_push_flagged, struct itree_iterator) (struct check_subtree_result, check_subtree, check_tree) (itree_newlimit, interval_tree_inherit_offset) (interval_tree_propagate_limit, itree_node_init, itree_node_begin) (itree_node_end, itree_create, interval_tree_rotate_left) (interval_tree_rotate_right, interval_tree_insert_fix) (interval_tree_insert, itree_insert, itree_node_set_region) (interval_tree_contains, interval_tree_subtree_min) (interval_tree_remove_fix, interval_tree_replace_child) (interval_tree_transplant, itree_remove, itree_iterator_start) (itree_insert_gap, itree_delete_gap, interval_node_intersects) (itree_iterator_next, itree_iterator_narrow): Tabify. Fix comment and code coding style.
* Fix compiler warning about possible null pointer dereferencefeature/noverlayMatt Armstrong2022-10-231-0/+2
| | | | | * src/itree.c (interval_tree_remove_fix): Use 'eassert' to both check for non-null and suppress a compiler warning.
* Rename all exported itree.h functions with the itree_ prefixMatt Armstrong2022-10-191-15/+15
| | | | | | | | | | | | For the most part, I replaced the interval_tree_ prefix with itree_, interval_node_ with itree_node_, etc. * src/alloc.c: Rename everywhere as appropriate. * src/alloc.c: ditto. * src/buffer.c: ditto. * src/buffer.h: ditto. * src/itree.c: ditto. * src/itree.h: ditto.
* Prefix all itree.h type names with itree_Matt Armstrong2022-10-191-80/+80
| | | | | | | | | | | | | | Rename interval_node -> itree_node, interval_tree -> itree_tree, interval_tree_order -> itree_order. * src/alloc.c: Renames. * src/buffer.c: ditto. * src/itree.c: ditto. * src/itree.h: ditto. * src/lisp.h: ditto. * src/pdumper.h: ditto. * src/textprop.h: ditto. * src/xdisp.h: ditto.
* Remove the ITREE_NULL macro and use NULL everywhere.Matt Armstrong2022-10-191-79/+79
| | | | | | * src/itree.h: Delete the ITREE_NULL macro. * src/itree.c (check_subtree): Use NULL everywhere. * src/pdumper.c (dump_buffer): ditto.
* * src/itree.c: Eliminate all prototypes for static functionsStefan Monnier2022-10-171-516/+492
| | | | | | | Massive code reorganization to move definitions of static functions before their first use, so as to remove the need for redundant prototypes. While at it, fix a few places where the used more than 80 column.
* Rename itree iterators with itree_iterator prefixMatt Armstrong2022-10-171-22/+21
| | | | | | | | | | | * src/itree.h: Rename struct interval_generator -> itree_iterator. Rename functions: itree_busy_p -> itree_iterator_busy_p, interval_tree_iter_start -> itree_iterator_start, interval_generator_narrow -> itree_iterator_narrow, interval_tree_iter_finish -> itree_iterator_finish, interval_generator_next -> itree_iterator_next. * src/itree.c: Use new names everywhere. * src/eval.c: ditto.
* ; * src/itree.c: remove 'inline' from functions with extern linkageMatt Armstrong2022-10-171-2/+2
|
* Delete the itree_null sentinel node, use NULL everywhere.Matt Armstrong2022-10-171-140/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This effort caught a few (already commited) places that were dereferencing through ITREE_NULL in a confusing way. It makes some functions have to check for NULL in more places, but in my experinece this is worth it from a code clarity point of view. In doing this I rewrote `interval_tree_remove` completely. There there was one final bug in that function that I simply could not find when I #define'd ITREE_NULL to NULL. I couldn't easily understand that function, so instead I rewrote it completely with a focus on code clarity. Bug went away. I have left the ITREE_NULL #define in code, to reduce code review noise. It is easily removed later, mechanically. * src/itree.h: #define ITREE_NULL to NULL and leave a FIXME. * src/itree.c (itree_null): Delete the itree_null static variable. (null_is_sane): Delete (and all callers). (interval_tree_insert): Insert the first node as black straight away. (itree_newlimit): Handle NULL children. (interval_tree_remove_fix): ditto. (interval_tree_insert_fix): ditto. (interval_tree_remove): Rewrite for clarity. (null_safe_is_red): New function. (null_safe_is_black): New function. (interval_tree_replace_child): Renamed from interval_tree_transplant. (interval_tree_transplant): New function that something I think is more like a full transplantation. (names are hard)
* ; * src/itree.c (check_subtree): fix logical error in eassertMatt Armstrong2022-10-121-1/+1
|
* ; * src/itree.c (check_tree): assert that the tree root is blackMatt Armstrong2022-10-111-0/+1
|
* itree.c (check_tree): SimplifyStefan Monnier2022-10-111-100/+32
| | | | | | | | | | | | | * src/itree.c (struct check_subtree_result): Remove `complete`. (check_subtree): Remove `max_depth` arg (and adjust callers). Use 0 as black-depth of empty tree. Remove redundant `node->parent` check (already performed by the caller). (check_tree): Replace with `check_tree_common` (update all callers). Check the root's `parent` field. (check_tree_no_rb): Delete function, inlined in its sole caller. (interval_tree_remove): Add call to `check_tree` (without RB checks) before `interval_tree_remove_fix`. Move update of `size` field accordingly.
* Stop reading and writing the itree_null.parent field entirely.Matt Armstrong2022-10-101-13/+7
| | | | | | | | | | | | | | | | | | | | | With this change all fields in the itree_null sentinel are read only. This makes accessing itree_null thread safe in an obvious way. Because it took two commits from two peole to get this right, I think we can call this design fragile and difficult to reason about. Another benefit of this commit is as preparation for removing sentinel node completely, and just using NULL. * src/itree.c (itree_null): Statically initialize itree_null.parent to NULL. It is never accessed. (null_is_sane): Assert parent == NULL. (interval_tree_remove_fix): Remove unecessary assignments to parent from node->parent. These were the last places itree_null.parent were read. (interval_tree_remove): Avoid an assignment to itree_null.parent through min->right->parent. (interval_tree_transplant): Avoid an assignment to itree_null.parent through source->parent.
* Simplify itree_null initializationMatt Armstrong2022-10-101-16/+36
| | | | | | | | | * src/itree.c (null_is_sane): call eassert directly, check REAR_ADVANCE, FRONT_ADVANCE. Add FIXME that PARENT is still read/write. (itree_null): initialize statically (itree_init): remove initialization code, call eassert(null_is_sane()) (check_tree_common): call eassert (null_is_sane())
* Check red-black invariants in most placesMatt Armstrong2022-10-101-34/+46
| | | | | | | | | | | | Stefan recently disabled this but I happened to want it back soon after. * src/itree.c (check_subtree): new arg: allow_red_red (check_tree_common): renamed from check_tree, pass allow_red_red through. (check_tree): new function, pass allow_red_red=false (interval_tree_insert): check_tree -> check_tree_common with allow_red_red=true.
* Improve check_subtreeMatt Armstrong2022-10-101-30/+126
| | | | | | | | | | * src/itree.c (struct check_subtree_result): new struct returned by check_subtree. (check_subtree): new function, renamed from recurse_check_tree. Add new black height assertions. (check_tree): assert that the tree has non-negative size, assert that limiting to interval_tree_max_height(tree) levels is enough to traverses the complete tree.
* Tighten up handling of `otick`Stefan Monnier2022-10-091-21/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Move args between `build_overlay` and `add_buffer_overlay`, to try and keep buffer positions together with their buffer. Be more strict in the `otick` values passed to `interval_tree_insert`. Move a few things around to try and reduce dependencies through `.h` files. Fix a thinko bug in `check_tree`. * src/alloc.c (build_overlay): Remove `begin` and `end` args. * src/buffer.c (add_buffer_overlay): Move from `buffer.h`. Add `begin` and `end` args. (copy_overlays): Adjust accordingly. (Fmake_overlay): Use BUF_BEG and BUF_Z; adjust call to `build_overlay` and `add_buffer_overlay`. (Fmove_overlay): Use BUF_BEG and BUF_Z; Use the new `begin` and `end` args of `add_buffer_overlay` so we don't need to use `interval_node_set_region` when moving to a new buffer. (remove_buffer_overlay, set_overlay_region): Move from `buffer.h`. * src/buffer.h (set_overlay_region, add_buffer_overlay) (remove_buffer_overlay): Move to `buffer.c`. (build_overlay): Move from `lisp.h`. (maybe_alloc_buffer_overlays): Delete function (inline into its only caller). * src/itree.c (interval_tree_insert): Move declaration `from buffer.h`. (check_tree): Fix initial offset in call to `recurse_check_tree`. Remove redundant check of the `limit` value. (interval_node_init): Remove `begin` and `end` args. (interval_tree_insert): Mark it as static. Assert that the new node's `otick` should already be uptodate and its new parent as well. (itree_insert_node): New function. (interval_tree_insert_gap): Assert the otick of the removed+added nodes were uptodate and mark them as uptodate again after adjusting their positions. (interval_tree_inherit_offset): Check that the parent is at least as uptodate as the child. * src/lisp.h (build_overlay): Move to `buffer.h`. * src/itree.h (interval_node_init): Adjust accordingly. (interval_tree_insert): Remove declaration. (itree_insert_node): New declaration.
* itree.c: Use `interval_tree_inherit_offset`Stefan Monnier2022-10-091-21/+11
| | | | | | | | | | | | The insertion code tried to manipulate the offset in its own way, and apparently there was a bug in it. Replace that with a call to `interval_tree_inherit_offset`, making the whole logic a bit simpler, and fixing a bug along the way (not sure where the bug was, to be honest). * src/itree.c (interval_tree_insert): Use `interval_tree_inherit_offset`. Check the tree before insert_fix. (recurse_check_tree): Don't check RB invariants. (itree_limits_are_stable): Delete function (subsumed by `check_tree`).
* Debug check overlay tree invariantsMatt Armstrong2022-10-081-1/+66
| | | | | | | | * src/itree.c (check_tree): (recurse_check_tree): new functions. (interval_tree_insert): call them. (interval_tree_remove): ditto. (interval_tree_insert_fix): ditto.
* Comment change: explain inheriting "dirty" offsetsMatt Armstrong2022-10-081-2/+11
| | | | | ; * src/itree.c (interval_generator_next): explain why the code handles inheriting offsets from dirty nodes.
* itree: Try and detect non-local exits during itree iterationsStefan Monnier2022-10-071-0/+6
| | | | | | * src/itree.c (itree_busy_p): New function. * src/eval.c (signal_or_quit): Use it. * src/itree.h (itree_busy_p): Declare it.
* ; * src/itree.c: Add comment describing when noverlay is O(N)Matt Armstrong2022-10-071-0/+34
|