[PATCH 17/38] docs: kdoc_re: don't recompile NestedMatch regex every time

Mauro Carvalho Chehab
2026-02-18T10:13:24Z

Store delimiters and its regex-compiled version as const vars.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
tools/lib/python/kdoc/kdoc_re.py | 35 ++++++++++++++++++++------------
1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/tools/lib/python/kdoc/kdoc_re.py b/tools/lib/python/kdoc/kdoc_re.py
index 0a7f12616f9f..00afa5bccd6d 100644
--- a/tools/lib/python/kdoc/kdoc_re.py
+++ b/tools/lib/python/kdoc/kdoc_re.py
@@ -99,6 +99,13 @@ class KernRe:
self.last_match = self.regex.search(string)
return self.last_match

+ def finditer(self, string):
+ """
+ Alias to re.finditer.
+ """
+
+ return self.regex.finditer(string)
+
def findall(self, string):
"""
Alias to re.findall.
@@ -134,6 +141,16 @@ class KernRe:

return self.last_match.groups()

+#: Nested delimited pairs (brackets and parenthesis)
+DELIMITER_PAIRS = {
+ '{': '}',
+ '(': ')',
+ '[': ']',
+}
+
+#: compiled delimiters
+RE_DELIM = KernRe(r'[\{\}\[\]\(\)]')
+

class NestedMatch:
"""
@@ -183,14 +200,6 @@ class NestedMatch:
#
# FOO(arg1, arg2, arg3)

- DELIMITER_PAIRS = {
- '{': '}',
- '(': ')',
- '[': ']',
- }
-
- RE_DELIM = re.compile(r'[\{\}\[\]\(\)]')
-
def _search(self, regex, line):
"""
Finds paired blocks for a regex that ends with a delimiter.
@@ -220,13 +229,13 @@ class NestedMatch:
escape = False

d = line[offset - 1]
- if d not in self.DELIMITER_PAIRS:
+ if d not in DELIMITER_PAIRS:
continue

- end = self.DELIMITER_PAIRS[d]
+ end = DELIMITER_PAIRS[d]
stack.append(end)

- for match in self.RE_DELIM.finditer(line[offset:]):
+ for match in RE_DELIM.finditer(line[offset:]):
pos = match.start() + offset

d = line[pos]
@@ -247,8 +256,8 @@ class NestedMatch:
string_char = d
continue

- if d in self.DELIMITER_PAIRS:
- end = self.DELIMITER_PAIRS[d]
+ if d in DELIMITER_PAIRS:
+ end = DELIMITER_PAIRS[d]

stack.append(end)
continue
--
2.52.0