unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Matt Armstrong <matt@rfc20.org>
To: Stefan Kangas <stefankangas@gmail.com>,
	Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Eli Zaretskii <eliz@gnu.org>, 59137@debbugs.gnu.org
Subject: bug#59137: [PATCH] To minor changes related to overlays
Date: Sat, 26 Nov 2022 11:37:18 -0800	[thread overview]
Message-ID: <87k03hpkwh.fsf@rfc20.org> (raw)
In-Reply-To: <CADwFkmn0cCtwOrjBxbLroQbkBwKujMmrS_YYULPr2PAa=Hz+zQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 672 bytes --]

Stefan Kangas <stefankangas@gmail.com> writes:

> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>>> Should these patches be installed?  Stefan?
>>
>> I don't have an opinion on the `itree_empty_p` patch, but the one about
>> `itree_iterator_finish` doesn't apply any more because
>> `itree_iterator_finish` has been removed in the mean time.
>
> Matt, if you think these patches are still relevant, could you please
> rebase them on top of current master?  Thanks in advance.

Hi Stefan and Stefan,

Attached is the rebased patch for the new helper function (it didn't
change much if at all).  As Stefan suggested, the patch for the iterator
is no longer relevant.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-itree_empty_p-for-clarity-and-reduced-coupling.patch --]
[-- Type: text/x-diff, Size: 2835 bytes --]

From 3e2c4cd143d51c66198dd606e18015eeae42f3ec Mon Sep 17 00:00:00 2001
From: Matt Armstrong <matt@rfc20.org>
Date: Tue, 8 Nov 2022 15:00:18 -0800
Subject: [PATCH] Add itree_empty_p for clarity and reduced coupling

* src/itree.h (itree_empty_p): New predicate.
* src/buffer.h (buffer_has_overlays): Call it.
* src/pdumper.c (dump_buffer): ditto.
* src/alloc.c (mark_buffer): ditto.
---
 src/alloc.c   | 2 +-
 src/buffer.h  | 3 +--
 src/itree.h   | 9 +++++++++
 src/pdumper.c | 2 +-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index 0653f2e0cc..526a25393f 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6553,7 +6553,7 @@ mark_buffer (struct buffer *buffer)
   if (!BUFFER_LIVE_P (buffer))
       mark_object (BVAR (buffer, undo_list));
 
-  if (buffer->overlays)
+  if (!itree_empty_p (buffer->overlays))
     mark_overlays (buffer->overlays->root);
 
   /* If this is an indirect buffer, mark its base buffer.  */
diff --git a/src/buffer.h b/src/buffer.h
index dded0cd98c..9ead875bcf 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -1277,8 +1277,7 @@ set_buffer_intervals (struct buffer *b, INTERVAL i)
 INLINE bool
 buffer_has_overlays (void)
 {
-  return current_buffer->overlays
-         && (current_buffer->overlays->root != NULL);
+  return !itree_empty_p (current_buffer->overlays);
 }
 \f
 /* Functions for accessing a character or byte,
diff --git a/src/itree.h b/src/itree.h
index 291fa53fd3..248ea9b84d 100644
--- a/src/itree.h
+++ b/src/itree.h
@@ -25,6 +25,8 @@ #define ITREE_H
 
 #include "lisp.h"
 
+INLINE_HEADER_BEGIN
+
 /* The tree and node structs are mainly here, so they can be
    allocated.
 
@@ -114,6 +116,11 @@ #define ITREE_H
 				   ptrdiff_t, ptrdiff_t);
 extern struct itree_tree *itree_create (void);
 extern void itree_destroy (struct itree_tree *);
+INLINE bool
+itree_empty_p (struct itree_tree *tree)
+{
+  return !tree || !tree->root;
+}
 extern intmax_t itree_size (struct itree_tree *);
 extern void itree_clear (struct itree_tree *);
 extern void itree_insert (struct itree_tree *, struct itree_node *,
@@ -178,4 +185,6 @@ #define ITREE_FOREACH(n, t, beg, end, order)                        \
 #define ITREE_FOREACH_NARROW(beg, end) \
   itree_iterator_narrow (itree_iter_, beg, end)
 
+INLINE_HEADER_END
+
 #endif
diff --git a/src/pdumper.c b/src/pdumper.c
index fedcd3e404..35e86d2b50 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2863,7 +2863,7 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer)
   DUMP_FIELD_COPY (out, buffer, inhibit_buffer_hooks);
   DUMP_FIELD_COPY (out, buffer, long_line_optimizations_p);
 
-  if (buffer->overlays && buffer->overlays->root != NULL)
+  if (!itree_empty_p (buffer->overlays))
     /* We haven't implemented the code to dump overlays.  */
     emacs_abort ();
   else
-- 
2.35.1


  reply	other threads:[~2022-11-26 19:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-08 23:14 bug#59137: [PATCH] To minor changes related to overlays Matt Armstrong
2022-11-10 10:38 ` Eli Zaretskii
2022-11-15 17:53   ` Matt Armstrong
2022-11-25  1:16     ` Stefan Kangas
2022-11-25 14:48       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-11-26 14:05         ` Stefan Kangas
2022-11-26 19:37           ` Matt Armstrong [this message]
2022-11-26 20:07             ` Stefan Kangas
2022-11-29 23:16               ` Matt Armstrong
2022-11-30  1:28                 ` Stefan Kangas
2022-11-30 13:25                   ` Eli Zaretskii
2022-11-30 17:34                     ` Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k03hpkwh.fsf@rfc20.org \
    --to=matt@rfc20.org \
    --cc=59137@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=stefankangas@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).