xml-parser-generator - iterate over sorted dict - #58975
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Sat, 29 Aug 2020 13:19:36 +0000 (15:19 +0200)
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>
Sat, 29 Aug 2020 13:19:36 +0000 (15:19 +0200)
I sort the dict before iteration because the normal
iterator over a dict is not reproducible and will generate
different code in each run. This will work but the
build is not reproducible.

Closes: https://savannah.gnu.org/bugs/index.php?58975
src/output/spv/xml-parser-generator

index a0d0081db3a79acc70abf0e5e6a4172f7c3c91df..9109d56f95ad3ce98a4e6d83bf8971f44f331214 100644 (file)
@@ -295,7 +295,7 @@ used_enums = set()
 def print_members(attributes, rhs, indent):
     attrs = []
     new_enums = set()
-    for unique_name, (xml_name, value, required) in attributes.items():
+    for unique_name, (xml_name, value, required) in sorted(attributes.items()):
         c_name = name_to_id(unique_name)
         if type(value) is set:
             if len(value) <= 1:
@@ -342,7 +342,7 @@ def print_members(attributes, rhs, indent):
         else:
             assert False
 
-    for enum_name in new_enums:
+    for enum_name in sorted(new_enums):
         used_enums.add(enum_name)
         c_name = name_to_id(enum_name)
         print('\nenum %s%s {' % (prefix, c_name))
@@ -900,7 +900,7 @@ void
                 name += '%d' % i
             if type(value[1]) is set:
                 print('    static const struct spvxml_node_class *const %s[] = {' % name)
-                for ref_type in value[1]:
+                for ref_type in sorted(value[1]):
                     print('        &%(prefix)s%(ref_type)s_class,'
                          % {'prefix': prefix,
                             'ref_type': name_to_id(ref_type)})