fix: support identifying c/c++ member pointers.

This commit is contained in:
2025-01-30 03:43:35 +08:00
parent b0e517452b
commit cf88444eb3
2 changed files with 10 additions and 6 deletions

View File

@@ -163,12 +163,16 @@ def process(path_to_file: str, args: Options):
type_name = type_name[: type_name.find('[')]
var_name = f'{var_name}[{array_length}]'
fun_ptr_pos = type_name.find('(*)')
if -1 != fun_ptr_pos and not CppUtil.find_template_name(
type_name, '(*)', disable_regex_word_bound=True
): # is c-style function ptr
ptr_id_pos, ptr_id = StrUtil.find_m(type_name, '(*)', '::*)')
if -1 != ptr_id_pos and not CppUtil.find_template_name(
type_name, ptr_id, disable_regex_word_bound=True
): # is c-style function ptr or member ptr
# it's a trick, make sure `ptr` endswith '*)'
ptr_id_len = len(ptr_id) - 1
type_name = (
type_name[: fun_ptr_pos + 2] + var_name + type_name[fun_ptr_pos + 2 :]
type_name[: ptr_id_pos + ptr_id_len]
+ var_name
+ type_name[ptr_id_pos + ptr_id_len :]
)
var_name = ''

View File

@@ -15,4 +15,4 @@ def find_m(con: str, *args) -> int:
pos = con.find(arg)
if pos != -1:
return pos, arg
return -1
return -1, None