diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2022-12-23 11:42:59 -0800 |
---|---|---|
committer | Jordan Justen <jordan.l.justen@intel.com> | 2023-08-07 14:58:57 -0700 |
commit | 76ec8a6651d6e9b61c67606553e71e4fefe0f379 (patch) | |
tree | 98308b3444a3a576becc65844032187d529afb46 | |
parent | df27f28c77df2760fedcabf905a8c2e3120617b2 (diff) |
intel/genxml: Convert gen_bits_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_bits_header.py | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/intel/genxml/gen_bits_header.py b/src/intel/genxml/gen_bits_header.py index f6ddc569ce1..f0c3ab9cbc7 100644 --- a/src/intel/genxml/gen_bits_header.py +++ b/src/intel/genxml/gen_bits_header.py @@ -21,7 +21,7 @@ import argparse import os -import xml.parsers.expat +import xml.etree.ElementTree as et from mako.template import Template from util import * @@ -240,43 +240,42 @@ class Field(object): class XmlParser(object): def __init__(self, containers): - self.parser = xml.parsers.expat.ParserCreate() - self.parser.StartElementHandler = self.start_element - self.parser.EndElementHandler = self.end_element - self.gen = None self.containers = containers self.container_stack = [] self.container_stack.append(None) def parse(self, filename): - with open(filename, 'rb') as f: - self.parser.ParseFile(f) - - def start_element(self, name, attrs): - if name == 'genxml': - self.gen = Gen(attrs['gen']) - elif name in ('instruction', 'struct', 'register'): + xml = et.parse(filename) + root = xml.getroot() + self.gen = Gen(root.attrib['gen']) + for item in root: + self.process_item(item) + + def process_item(self, item): + name = item.tag + attrs = item.attrib + if name in ('instruction', 'struct', 'register'): if name == 'instruction' and 'engine' in attrs: engines = set(attrs['engine'].split('|')) if not engines & self.engines: self.container_stack.append(None) return self.start_container(attrs) + for struct_item in item: + self.process_item(struct_item) + self.container_stack.pop() elif name == 'group': self.container_stack.append(None) + for group_item in item: + self.process_item(group_item) + self.container_stack.pop() elif name == 'field': - self.start_field(attrs) - else: + self.process_field(attrs) + elif name == 'enum': pass - - def end_element(self, name): - if name == 'genxml': - self.gen = None - elif name in ('instruction', 'struct', 'register', 'group'): - self.container_stack.pop() else: - pass + assert False def start_container(self, attrs): assert self.container_stack[-1] is None @@ -286,7 +285,7 @@ class XmlParser(object): self.container_stack.append(self.containers[name]) self.container_stack[-1].add_gen(self.gen, attrs) - def start_field(self, attrs): + def process_field(self, attrs): if self.container_stack[-1] is None: return |