[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#60953: The :match predicate with large regexp in tree-sitter font-lo
From: |
Eli Zaretskii |
Subject: |
bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient |
Date: |
Wed, 25 Jan 2023 14:49:59 +0200 |
> Cc: 60953@debbugs.gnu.org
> Date: Wed, 25 Jan 2023 05:48:13 +0200
> From: Dmitry Gutov <dgutov@yandex.ru>
>
> > We can probably match the regexp in-place, just limit the match to the
> > range of the node.
>
> That's what I tried to do in the patch attached to the first message:
> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60953#5
>
> But the effect on performance was surprisingly hard to notice. It also
> broke the actual highlighting, but that's probably because the regexp
> uses anchors \` and \', which don't really work for fast_looking_at
> calls inside a buffer.
The condition for a match in that patch is not correct, AFAIU:
if (val >= 0)
return true;
else
return false;
It should be "if (val > 0)" instead, since fast_looking_at returns the
number of characters that matched (unlike fast_string_match in the
original code, which returns the _index_ of the match).
Also, fast_string_match is capable of succeeding if the match begins
not at the first character, whereas fast_looking_at does an anchored
match. Do we expect the text to match from its beginning in this
case? If not, I think the replacement didn't do what the original
code does, and you should have used search_buffer or maybe
search_buffer_re instead.
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/19
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/23
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Yuan Fu, 2023/01/24
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/24
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient,
Eli Zaretskii <=
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/25
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Eli Zaretskii, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Yuan Fu, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Eli Zaretskii, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Eli Zaretskii, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Eli Zaretskii, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/26
- bug#60953: The :match predicate with large regexp in tree-sitter font-lock seems inefficient, Dmitry Gutov, 2023/01/29