[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 4d8af56 1/5: Speed up find_field when called from outside a field
From: |
Lars Ingebrigtsen |
Subject: |
master 4d8af56 1/5: Speed up find_field when called from outside a field |
Date: |
Mon, 20 Dec 2021 23:26:14 -0500 (EST) |
branch: master
commit 4d8af56c76ee20bc8e1ebdeef5c4100cea005974
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
Speed up find_field when called from outside a field
* src/editfns.c (find_field): Speed up the field functions when
called from outside a field (bug#52593). (In some cursory tests,
this makes the called-from-outside-a-field case about 3x faster.)
---
src/editfns.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/editfns.c b/src/editfns.c
index 5c9c34d..355a7a3 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -437,6 +437,27 @@ find_field (Lisp_Object pos, Lisp_Object merge_at_boundary,
after_field
= get_char_property_and_overlay (pos, Qfield, Qnil, NULL);
+
+ /* We're not in a field, so find the prev/next area with a field
+ property. */
+ if (NILP (after_field))
+ {
+ if (beg)
+ {
+ Lisp_Object p = Fprevious_single_char_property_change (pos, Qfield,
+ Qnil,
+ beg_limit);
+ *beg = NILP (p) ? BEGV : XFIXNAT (p);
+ }
+ if (end)
+ {
+ Lisp_Object p = Fnext_single_char_property_change (pos, Qfield, Qnil,
+ end_limit);
+ *end = NILP (p) ? ZV : XFIXNAT (p);
+ }
+ return;
+ }
+
before_field
= (XFIXNAT (pos) > BEGV
? get_char_property_and_overlay (make_fixnum (XFIXNUM (pos) - 1),