aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2024-03-15 16:22:54 +0100
committerMarkus Armbruster <armbru@redhat.com>2024-04-24 10:03:54 +0200
commit7e09dd686f9dc8ee75453fc400e0366cd4c9d3e2 (patch)
treed3e59aa8548a311a4da05982790253f1d682f94d /scripts/qapi
parent583f4d6fdd96f0f25f39018a9b160654e3f9aa01 (diff)
qapi/schema: assert inner type of QAPISchemaVariants in check_clash()
QAPISchemaVariant's "variants" field is typed as List[QAPISchemaVariant], where the typing for QAPISchemaVariant allows its type field to be any QAPISchemaType. However, QAPISchemaVariant expects that all of its variants contain the narrower QAPISchemaObjectType. This relationship is enforced at runtime in QAPISchemaVariants.check(). This relationship is not embedded in the type system though, so QAPISchemaVariants.check_clash() needs to re-assert this property in order to call QAPISchemaVariant.type.check_clash(). Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20240315152301.3621858-19-armbru@redhat.com>
Diffstat (limited to 'scripts/qapi')
-rw-r--r--scripts/qapi/schema.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 9c138badb0..177bfa0d11 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -716,7 +716,10 @@ class QAPISchemaVariants:
def check_clash(self, info, seen):
for v in self.variants:
# Reset seen map for each variant, since qapi names from one
- # branch do not affect another branch
+ # branch do not affect another branch.
+ #
+ # v.type's typing is enforced in check() above.
+ assert isinstance(v.type, QAPISchemaObjectType)
v.type.check_clash(info, dict(seen))