Parse a function declaration and generate corresponding code.
(self, function_name: str, return_type: str, parameters: List[clang.cindex.Cursor])
| 123 | print(f"Found {len(self.driver_symbols)} symbols in {lib_path}") |
| 124 | |
| 125 | def parse_function(self, function_name: str, return_type: str, parameters: List[clang.cindex.Cursor]) -> None: |
| 126 | """Parse a function declaration and generate corresponding code.""" |
| 127 | params = list(parameters) |
| 128 | self.intercept_entry_str += f" DLSYM_INTERCEPT_ENTRY({function_name}),\n" |
| 129 | |
| 130 | # Generate typedefs for complex types |
| 131 | param_types = [] |
| 132 | for i, param in enumerate(params): |
| 133 | if TypeGenerator.is_complex_type(param.type): |
| 134 | typedef_name = TypeGenerator.generate_typedef_name(function_name, i) |
| 135 | typedef_str = TypeGenerator.generate_typedef(param.type, typedef_name) |
| 136 | if typedef_str: |
| 137 | self.typedefs_str += typedef_str + "\n" |
| 138 | param_types.append(f"{typedef_name}, {param.spelling}") |
| 139 | else: |
| 140 | param_types.append(f"{param.type.spelling}, {param.spelling}") |
| 141 | |
| 142 | if len(params) == 0: |
| 143 | self.driver_str += f" DEFINE_STATIC_ADDRESS_CALL(GetSymbol(\"{function_name}\"), {return_type}, {function_name[self.prefix_len:]});\n" |
| 144 | self.intercept_str += f"DEFINE_EXPORT_C_REDIRECT_CALL(Driver::{function_name[self.prefix_len:]}, {return_type}, {function_name});\n" |
| 145 | return |
| 146 | |
| 147 | self.driver_str += f" DEFINE_STATIC_ADDRESS_CALL(GetSymbol(\"{function_name}\"), {return_type}, {function_name[self.prefix_len:]}, {', '.join(param_types)});\n" |
| 148 | self.intercept_str += f"DEFINE_EXPORT_C_REDIRECT_CALL(Driver::{function_name[self.prefix_len:]}, {return_type}, {function_name}, {', '.join(param_types)});\n" |
| 149 | |
| 150 | def find_functions(self, node: clang.cindex.Cursor) -> None: |
| 151 | """Recursively find and process function declarations.""" |
no test coverage detected