diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2022-12-23 15:47:33 -0800 |
---|---|---|
committer | Jordan Justen <jordan.l.justen@intel.com> | 2023-08-07 14:58:57 -0700 |
commit | 79a3a3a4ddc9d2a5753134fe47f269fae68f6955 (patch) | |
tree | a58aa26c882e6985f30cb50bbc16f780a4454e4e | |
parent | 76ec8a6651d6e9b61c67606553e71e4fefe0f379 (diff) |
intel/genxml: Convert gen_pack_header to use ElementTree
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-rw-r--r-- | src/intel/genxml/gen_pack_header.py | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/intel/genxml/gen_pack_header.py b/src/intel/genxml/gen_pack_header.py index 743b3b5fd74..20a15c90a71 100644 --- a/src/intel/genxml/gen_pack_header.py +++ b/src/intel/genxml/gen_pack_header.py @@ -2,7 +2,7 @@ import argparse import ast -import xml.parsers.expat +import xml.etree.ElementTree as et import re import sys import copy @@ -430,10 +430,6 @@ class Value(object): class Parser(object): def __init__(self): - self.parser = xml.parsers.expat.ParserCreate() - self.parser.StartElementHandler = self.start_element - self.parser.EndElementHandler = self.end_element - self.instruction = None self.structs = {} # Set of enum names we've seen. @@ -448,12 +444,12 @@ class Parser(object): def gen_guard(self): return self.gen_prefix("{0}_PACK_H".format(self.platform)) - def start_element(self, name, attrs): - if name == "genxml": - self.platform = attrs["name"] - self.gen = attrs["gen"].replace('.', '') - print(pack_header % {'license': license, 'platform': self.platform, 'guard': self.gen_guard()}) - elif name in ("instruction", "struct", "register"): + def process_item(self, item): + name = item.tag + assert name != "genxml" + attrs = item.attrib + + if name in ("instruction", "struct", "register"): if name == "instruction": self.instruction = safe_name(attrs["name"]) self.length_bias = int(attrs["bias"]) @@ -497,8 +493,12 @@ class Parser(object): self.prefix = None elif name == "value": self.values.append(Value(attrs)) + else: + assert False + + for child_item in item: + self.process_item(child_item) - def end_element(self, name): if name == "instruction": self.emit_instruction() self.instruction = None @@ -519,8 +519,10 @@ class Parser(object): elif name == "enum": self.emit_enum() self.enum = None - elif name == "genxml": - print('#endif /* %s */' % self.gen_guard()) + elif name == "value": + pass + else: + assert False def emit_template_struct(self, name, group): print("struct %s {" % self.gen_prefix(name)) @@ -612,9 +614,14 @@ class Parser(object): print('};\n') def parse(self, filename): - file = open(filename, "rb") - self.parser.ParseFile(file) - file.close() + xml = et.parse(filename) + root = xml.getroot() + self.platform = root.attrib["name"] + self.gen = root.attrib["gen"].replace('.', '') + print(pack_header % {'license': license, 'platform': self.platform, 'guard': self.gen_guard()}) + for item in root: + self.process_item(item) + print('#endif /* %s */' % self.gen_guard()) def parse_args(): p = argparse.ArgumentParser() |