summaryrefslogtreecommitdiff
path: root/amqp_codegen.py
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@lshift.net>2010-06-21 14:44:33 +1200
committerTony Garnock-Jones <tonyg@lshift.net>2010-06-21 14:44:33 +1200
commit5d34d17f9cc2dccf2ad5477b0f1d1ca882697d72 (patch)
treed8cb6bab6e91d18cfe041aaeedb3abc5b7517233 /amqp_codegen.py
parente6d80604e3f55b5d126bd8551a0d9bc6e54740ef (diff)
downloadrabbitmq-codegen-5d34d17f9cc2dccf2ad5477b0f1d1ca882697d72.tar.gz
Preserve ordering of constants, methods and classes
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r--amqp_codegen.py35
1 files changed, 18 insertions, 17 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py
index f2df2ad..a1eeeb3 100644
--- a/amqp_codegen.py
+++ b/amqp_codegen.py
@@ -77,21 +77,20 @@ def domains_merger(key, old, new):
o[k] = v
return [[k, v] for (k, v) in o.iteritems()]
-def constants_merger(key, old, new):
- o = dict((v["name"], v) for v in old)
+def merge_dict_lists_by(dict_key, old, new, description):
+ old_index = set(v[dict_key] for v in old)
+ result = list(old) # shallow copy
for v in new:
- if o.has_key(v["name"]):
- raise AmqpSpecFileMergeConflict(key, old, new)
- o[v["name"]] = v
- return list(o.values())
+ if v[dict_key] in old_index:
+ raise AmqpSpecFileMergeConflict(description, old, new)
+ result.append(v)
+ return result
+
+def constants_merger(key, old, new):
+ return merge_dict_lists_by("name", old, new, key)
def methods_merger(classname, old, new):
- o = dict((v["name"], v) for v in old)
- for v in new:
- if o.has_key(v["name"]):
- raise AmqpSpecFileMergeConflict(("class-methods", classname), old, new)
- o[v["name"]] = v
- return list(o.values())
+ return merge_dict_lists_by("name", old, new, ("class-methods", classname))
def properties_merger(classname, old, new):
oldnames = set(v["name"] for v in old)
@@ -109,13 +108,15 @@ def class_merger(old, new):
return old
def classes_merger(key, old, new):
- o = dict((v["name"], v) for v in old)
+ old_index = dict(zip((v["name"] for v in old), range(len(old))))
+ result = list(old) # shallow copy
for v in new:
- if o.has_key(v["name"]):
- o[v["name"]] = class_merger(o[v["name"]], v)
+ if v["name"] in old_index:
+ pos = old_index[v["name"]]
+ result[pos] = class_merger(result[pos], v)
else:
- o[v["name"]] = v
- return list(o.values())
+ result.append(v)
+ return result
mergers = {
"extension": (extension_info_merger, []),