+
+ enum_variants = []
+ tag_field_lines = union_enum_items["field_lines"]
+ for idx, struct_line in enumerate(tag_field_lines):
+ if idx == 0:
+ assert(struct_line == "typedef enum %s_Tag {" % struct_name)
+ elif idx == len(tag_field_lines) - 3:
+ assert(struct_line.endswith("_Sentinel,"))
+ elif idx == len(tag_field_lines) - 2:
+ assert(struct_line == "} %s_Tag;" % struct_name)
+ elif idx == len(tag_field_lines) - 1:
+ assert(struct_line == "")
+ else:
+ variant_name = struct_line.strip(' ,')[len(struct_name) + 1:]
+ fields = []
+ if "LDK" + variant_name in union_enum_items:
+ enum_var_lines = union_enum_items["LDK" + variant_name]
+ for idx, field in enumerate(enum_var_lines):
+ if idx != 0 and idx < len(enum_var_lines) - 2:
+ fields.append(map_type(field.strip(' ;'), False, None, False, True))
+ else:
+ # TODO: Assert line format
+ pass
+ else:
+ # TODO: Assert line format
+ pass
+ enum_variants.append(ComplexEnumVariantInfo(variant_name, fields))
+