From: Po Lu <luangruo@yahoo.com>
To: emacs-devel@gnu.org
Cc: Dmitry Gutov <dgutov@yandex.ru>
Subject: Re: emacs-29 f711f4e99f7: (Ftreesit_query_capture): Cache list of predicates for given pattern index
Date: Wed, 01 Feb 2023 11:48:14 +0800 [thread overview]
Message-ID: <87a61yxczl.fsf@yahoo.com> (raw)
In-Reply-To: <20230201014614.30165C00613@vcs2.savannah.gnu.org> (Dmitry Gutov's message of "Tue, 31 Jan 2023 20:46:11 -0500 (EST)")
Dmitry Gutov <dgutov@yandex.ru> writes:
> branch: emacs-29
> commit f711f4e99f7f2b213e70d14c808261b93ed10c36
> Author: Dmitry Gutov <dgutov@yandex.ru>
> Commit: Dmitry Gutov <dgutov@yandex.ru>
>
> (Ftreesit_query_capture): Cache list of predicates for given pattern index
>
> * src/treesit.c (Ftreesit_query_capture):
> Cache list of predicates for given pattern index (bug#60953).
> ---
> src/treesit.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/src/treesit.c b/src/treesit.c
> index b210ec0923a..a5815903b4d 100644
> --- a/src/treesit.c
> +++ b/src/treesit.c
> @@ -2720,8 +2720,10 @@ the query. */)
> every for loop and nconc it to RESULT every time. That is indeed
> the initial implementation in which Yoav found nconc being the
> bottleneck (98.4% of the running time spent on nconc). */
> + uint32_t patterns_count = ts_query_pattern_count (treesit_query);
> Lisp_Object result = Qnil;
> Lisp_Object prev_result = result;
> + Lisp_Object predicates_table = make_vector (patterns_count, Qt);
> while (ts_query_cursor_next_match (cursor, &match))
> {
> /* Record the checkpoint that we may roll back to. */
> @@ -2750,9 +2752,12 @@ the query. */)
> result = Fcons (cap, result);
> }
> /* Get predicates. */
> - Lisp_Object predicates
> - = treesit_predicates_for_pattern (treesit_query,
> - match.pattern_index);
> + Lisp_Object predicates = AREF (predicates_table, match.pattern_index);
> + if (EQ (predicates, Qt))
> + {
> + predicates = treesit_predicates_for_pattern (treesit_query, 0);
> + ASET (predicates_table, match.pattern_index, predicates);
> + }
>
> /* captures_lisp = Fnreverse (captures_lisp); */
> struct capture_range captures_range = { result, prev_result };
Is this not a rather big change for the release branch, so close to the
pretest?
next parent reply other threads:[~2023-02-01 3:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <167521597129.3087.11030300860591714532@vcs2.savannah.gnu.org>
[not found] ` <20230201014614.30165C00613@vcs2.savannah.gnu.org>
2023-02-01 3:48 ` Po Lu [this message]
2023-02-01 10:18 ` emacs-29 f711f4e99f7: (Ftreesit_query_capture): Cache list of predicates for given pattern index Dmitry Gutov
2023-02-01 23:20 ` Yuan Fu
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=87a61yxczl.fsf@yahoo.com \
--to=luangruo@yahoo.com \
--cc=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
/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).