From: Markus Armbruster <arm...@redhat.com> A long time ago, commit 23a4b2c6f1 "qapi: Eliminate QAPISchemaObjectType.check() variable members" replaced the manual building of the list of members by seen.values(), where @seen is an OrderedDict mapping names to members. The list is then stored in self.members.
With Python 2, this is an innocent change: seen.values() returns "a copy of the dictionary’s list of values". With Python 3, it returns a dictionary view object instad. These "provide a dynamic view on the dictionary’s entries, which means that when the dictionary changes, the view reflects these changes." Commit 23a4b2c6f1 predates the first mention of Python 3 in scripts/qapi/ by years. If we had wanted a view object then, we'd have used seen.viewvalues(). The accidental change of self.members from list to view object keeps @seen alive longer. Not wanted, but harmless enough. I believe that's all. However, the change is in the next commit's way, which wants to mess with self.members. Revert it. All other uses of .values() in scripts/qapi/ are of the form for ... in dict.values(): where the change to view object is just fine. Same for .keys() and .items(). Signed-off-by: Markus Armbruster <arm...@redhat.com> Signed-off-by: Kevin Wolf <kw...@redhat.com> --- scripts/qapi/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py index 3d72c7dfc9..87f80f8de2 100644 --- a/scripts/qapi/schema.py +++ b/scripts/qapi/schema.py @@ -440,7 +440,7 @@ def check(self, schema): for m in self.local_members: m.check(schema) m.check_clash(self.info, seen) - members = seen.values() + members = list(seen.values()) if self.variants: self.variants.check(schema, seen) -- 2.31.1