@@ -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+
219234def 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