On Thu, Sep 21, 2017 at 10:34 AM, Dylan Baker <dy...@pnwbakers.com> wrote:
> Quoting Jason Ekstrand (2017-09-21 08:32:22) > > While using iterparse is potentially a little more efficient, the Vulkan > > registry XML is not large and using regular element tree simplifies the > > parsing logic substantially. > > --- > > src/vulkan/util/gen_enum_to_str.py | 41 +++++++++++++++--------------- > -------- > > 1 file changed, 16 insertions(+), 25 deletions(-) > > > > diff --git a/src/vulkan/util/gen_enum_to_str.py > b/src/vulkan/util/gen_enum_to_str.py > > index 8f32102..e5f8964 100644 > > --- a/src/vulkan/util/gen_enum_to_str.py > > +++ b/src/vulkan/util/gen_enum_to_str.py > > @@ -157,31 +157,22 @@ def parse_xml(enum_factory, ext_factory, filename): > > of VkEnum objects. > > """ > > > > - with open(filename, 'rb') as f: > > - context = iter(et.iterparse(f, events=('start', 'end'))) > > - > > - # This gives the root element, since goal is to iterate over the > > - # elements without building a tree, this allows the root to be > cleared > > - # (erase the elements) after the children have been processed. > > - _, root = next(context) > > - > > - for event, elem in context: > > - if event == 'end' and elem.tag == 'enums': > > - type_ = elem.attrib.get('type') > > - if type_ == 'enum': > > - enum = enum_factory(elem.attrib['name']) > > - enum.values.extend([e.attrib['name'] for e in elem > > - if e.tag == 'enum']) > > - elif event == 'start' and elem.tag == 'extension': > > - ext_factory(elem.attrib['name'], > int(elem.attrib['number'])) > > - elif event == 'end' and elem.tag == 'extension': > > - if elem.attrib['supported'] != 'vulkan': > > - continue > > - for e in elem.findall('.//enum[@extends][@offset]'): > > - enum = enum_factory(e.attrib['extends']) > > - enum.values.append(e.attrib['name'],) > > - > > - root.clear() > > + xml = et.parse(filename) > > + > > + for enum_type in xml.findall('./enums'): > > + if enum_type.attrib.get('type') != 'enum': > > + continue > > please do not use continue for iterating xlm. xpath is more than capable of > representing this in less code, and it's implemented in C so it will be > much > faster. > > for enum_type in xml.findall('./enums[@type="enum"]') > Done. > > + > > + enum = enum_factory(enum_type.attrib['name']) > > + for value in enum_type.findall('./enum'): > > + enum.values.append(value.attrib['name']) > > + > > + for ext_elem in xml.findall('./extension'): > > + if ext_elem.attrib['supported'] != 'vulkan': > > + continue > > please do the same thing here. > Done. > > + > > + ext_factory(ext_elem.attrib['name'], > > + int(ext_elem.attrib['number'])) > > > > def main(): > > parser = argparse.ArgumentParser() > > -- > > 2.5.0.400.gff86faf > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev