Skip to content

Commit 1f40413

Browse files
Merge pull request #64 from tiagocoutinho/codegen
codegen: handle typedef
2 parents 5fbb8fb + 7e6c3be commit 1f40413

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

linuxpy/codegen/base.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ def find_xml_base_type(etree, context, type_id):
194194
if node is None:
195195
return
196196
if node.tag == "Struct":
197-
return node.get("name"), node.get("id")
197+
return get_node_name(etree, node), node.get("id")
198198
elif node.tag == "FundamentalType":
199199
return CTYPES_MAP[node.get("name")], node.get("id")
200200
elif node.tag == "PointerType":
@@ -216,6 +216,21 @@ def find_xml_base_type(etree, context, type_id):
216216
type_id = node.get("type")
217217

218218

219+
def get_node_name(etree, node):
220+
name = node.get("name")
221+
if name:
222+
return name
223+
node_id = node.get("id")
224+
etype = etree.find(f"ElaboratedType[@type='{node_id}']")
225+
if etype is None:
226+
return None
227+
etype_id = etype.get("id")
228+
typedef = etree.find(f"Typedef[@type='{etype_id}']")
229+
if typedef is None:
230+
return None
231+
return typedef.get("name")
232+
233+
219234
def get_structs(header_filename, xml_filename, decode_name):
220235
etree = xml.etree.ElementTree.parse(xml_filename)
221236
header_tag = etree.find(f"File[@name='{header_filename}']")
@@ -239,7 +254,7 @@ def get_structs(header_filename, xml_filename, decode_name):
239254
pack = False
240255
else:
241256
pack = int(align) == 8
242-
name = node.get("name")
257+
name = get_node_name(etree, node)
243258
if name:
244259
name = decode_name(name)
245260
struct = CStruct(node, name, fields, pack)

0 commit comments

Comments
 (0)