MCPcopy Create free account
hub / github.com/XpuOS/xsched / parse_function

Method parse_function

tools/autogen/gen.py:125–148  ·  view source on GitHub ↗

Parse a function declaration and generate corresponding code.

(self, function_name: str, return_type: str, parameters: List[clang.cindex.Cursor])

Source from the content-addressed store, hash-verified

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."""

Callers 1

find_functionsMethod · 0.95

Calls 3

is_complex_typeMethod · 0.80
generate_typedef_nameMethod · 0.80
generate_typedefMethod · 0.80

Tested by

no test coverage detected