# is allowed.
#
struct_nested_prefixes = [
- (re.compile(r"__cond_acquires\s*\("), ""),
- (re.compile(r"__cond_releases\s*\("), ""),
- (re.compile(r"__acquires\s*\("), ""),
- (re.compile(r"__releases\s*\("), ""),
- (re.compile(r"__must_hold\s*\("), ""),
- (re.compile(r"__must_not_hold\s*\("), ""),
- (re.compile(r"__must_hold_shared\s*\("), ""),
- (re.compile(r"__cond_acquires_shared\s*\("), ""),
- (re.compile(r"__acquires_shared\s*\("), ""),
- (re.compile(r"__releases_shared\s*\("), ""),
- (re.compile(r'\bSTRUCT_GROUP\('), r'\0'),
+ (NestedMatch(r"__cond_acquires\s*\("), ""),
+ (NestedMatch(r"__cond_releases\s*\("), ""),
+ (NestedMatch(r"__acquires\s*\("), ""),
+ (NestedMatch(r"__releases\s*\("), ""),
+ (NestedMatch(r"__must_hold\s*\("), ""),
+ (NestedMatch(r"__must_not_hold\s*\("), ""),
+ (NestedMatch(r"__must_hold_shared\s*\("), ""),
+ (NestedMatch(r"__cond_acquires_shared\s*\("), ""),
+ (NestedMatch(r"__acquires_shared\s*\("), ""),
+ (NestedMatch(r"__releases_shared\s*\("), ""),
+ (NestedMatch(r'\bSTRUCT_GROUP\('), r'\0'),
]
#
members = trim_private_members(members)
members = self.xforms.apply("struct", members)
- nested = NestedMatch()
for search, sub in struct_nested_prefixes:
- members = nested.sub(search, sub, members)
+ members = search.sub(search, sub, members)
#
# Deal with embedded struct and union members, and drop enums entirely.
#
#
# FOO(arg1, arg2, arg3)
- def _search(self, regex, line):
+ def __init__(self, regex):
+ self.regex = KernRe(regex)
+
+ def _search(self, line):
"""
Finds paired blocks for a regex that ends with a delimiter.
stack = []
- for match_re in regex.finditer(line):
+ for match_re in self.regex.finditer(line):
start = match_re.start()
offset = match_re.end()
string_char = None
yield start, offset, pos + 1
break
- def search(self, regex, line):
+ def search(self, line):
"""
This is similar to re.search:
returning occurrences only if all delimiters are paired.
"""
- for t in self._search(regex, line):
+ for t in self._search(line):
yield line[t[0]:t[2]]
- def sub(self, regex, sub, line, count=0):
- r"""
+ def sub(self, sub, line, count=0):
+ """
This is similar to re.sub:
It matches a regex that it is followed by a delimiter,
cur_pos = 0
n = 0
- for start, end, pos in self._search(regex, line):
+ for start, end, pos in self._search(line):
out += line[cur_pos:start]
# Value, ignoring start/end delimiters
out += line[cur_pos:l]
return out
+
+ def __repr__(self):
+ """
+ Returns a displayable version of the class init.
+ """
+
+ return f'NestedMatch("{self.regex.regex.pattern}")'