From cd0855cbd81b5fd3866c9a3242f0490c938b6d4d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Sun, 14 Jan 2024 12:50:36 +0100 Subject: [PATCH] Make object-intervals linear instead of quadratic * src/fns.c (collect_interval, Fobject_intervals): Build the returned list in reverse instead of appending single elements. --- src/fns.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fns.c b/src/fns.c index 07bb5115b6c..acfedbfa922 100644 --- a/src/fns.c +++ b/src/fns.c @@ -5255,11 +5255,11 @@ static void collect_interval (INTERVAL interval, void *arg) { Lisp_Object *collector = arg; - *collector = - nconc2 (*collector, - list1(list3 (make_fixnum (interval->position), - make_fixnum (interval->position + LENGTH (interval)), - interval->plist))); + *collector = Fcons (list3 (make_fixnum (interval->position), + make_fixnum (interval->position + + LENGTH (interval)), + interval->plist), + *collector); } @@ -6312,7 +6312,6 @@ Altering this copy does not change the layout of the text properties in OBJECT. */) (register Lisp_Object object) { - Lisp_Object collector = Qnil; INTERVAL intervals; if (STRINGP (object)) @@ -6325,8 +6324,9 @@ in OBJECT. */) if (! intervals) return Qnil; + Lisp_Object collector = Qnil; traverse_intervals (intervals, 0, collect_interval, &collector); - return collector; + return Fnreverse (collector); } DEFUN ("line-number-at-pos", Fline_number_at_pos, -- 2.39.2