+class Using(Processable):
+ type = "Using"
+
+ def __init__(self, name, flags, alias):
+ self.name = name
+ self.vla = False
+ self.block = []
+ self.manual_print = True
+ self.manual_endian = True
+
+ self.manual_print = False
+ self.manual_endian = False
+ for f in flags:
+ if f == "manual_print":
+ self.manual_print = True
+ elif f == "manual_endian":
+ self.manual_endian = True
+
+ if isinstance(alias, Array):
+ a = {"type": alias.fieldtype, "length": alias.length}
+ else:
+ a = {"type": alias.fieldtype}
+ self.alias = a
+ self.using = alias
+
+ #
+ # Should have been:
+ # self.crc = str(alias).encode()
+ # but to be backwards compatible use the block ([])
+ #
+ self.crc = str(self.block).encode()
+ global_type_add(name, self)
+
+ def process(self, result): # -> Dict
+ result["types"].append(self)
+
+ def __repr__(self):
+ return self.name + str(self.alias)
+
+
+class Union(Processable):
+ type = "Union"
+
+ def __init__(self, name, flags, block):
+ self.manual_print = False
+ self.manual_endian = False
+ self.name = name
+
+ for f in flags:
+ if f == "manual_print":
+ self.manual_print = True
+ elif f == "manual_endian":
+ self.manual_endian = True
+
+ self.block = block
+ self.crc = str(block).encode()
+ self.vla = vla_is_last_check(name, block)
+
+ global_type_add(name, self)
+
+ def process(self, result):
+ result["types"].append(self)
+
+ def __repr__(self):
+ return str(self.block)
+
+
+class Define(Processable):
+ type = "Define"
+