summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2022-12-23 11:42:59 -0800
committerJordan Justen <jordan.l.justen@intel.com>2023-08-07 14:58:57 -0700
commit76ec8a6651d6e9b61c67606553e71e4fefe0f379 (patch)
tree98308b3444a3a576becc65844032187d529afb46
parentdf27f28c77df2760fedcabf905a8c2e3120617b2 (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.py43
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