From 3042f0f9649e8595e8f317ea1844decf971305f1 Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Wed, 6 Apr 2016 22:53:07 +0100 Subject: [PATCH] Fix inconsistent emission of Java enumeration files. The ordering of emitted enum values is not consistent between python 2 or 3. The root cause of the problem was a dictionary's keys being iterated over which has no defined order. This has been fixed by iterating over the dictionary's items and ordering by values. We could order by key rather than the values but seeing as these represent an enum, ordering by value makes more sense. --- scripts/mk_genfile_common.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/mk_genfile_common.py b/scripts/mk_genfile_common.py index d747baee8..b8d6ac5e1 100644 --- a/scripts/mk_genfile_common.py +++ b/scripts/mk_genfile_common.py @@ -330,13 +330,13 @@ def mk_z3consts_java_internal(api_files, package_name, output_dir): efile.write('public enum %s {\n' % name) efile.write first = True - for k in decls: - i = decls[k] + # Iterate over key-value pairs ordered by value + for k, v in sorted(decls.items(), key=lambda pair: pair[1]): if first: first = False else: efile.write(',\n') - efile.write(' %s (%s)' % (k, i)) + efile.write(' %s (%s)' % (k, v)) efile.write(";\n") efile.write('\n private final int intValue;\n\n') efile.write(' %s(int v) {\n' % name)