All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: Michael Roth <michael.roth@amd.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Markus Armbruster <armbru@redhat.com>,
	John Snow <jsnow@redhat.com>
Subject: [PATCH v2 19/19] qapi/schema: remove unnecessary asserts
Date: Fri, 12 Jan 2024 17:29:45 -0500	[thread overview]
Message-ID: <20240112222945.3033854-20-jsnow@redhat.com> (raw)
In-Reply-To: <20240112222945.3033854-1-jsnow@redhat.com>

With strict typing enabled, these runtime statements aren't necessary
anymore; we can prove them statically.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 scripts/qapi/schema.py | 27 ---------------------------
 1 file changed, 27 deletions(-)

diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 8aa27ddb1fe..c1f030fce25 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -127,10 +127,8 @@ def __init__(
         ifcond: Optional[QAPISchemaIfCond] = None,
         features: Optional[List[QAPISchemaFeature]] = None,
     ):
-        assert isinstance(name, str)
         super().__init__(info)
         for f in features or []:
-            assert isinstance(f, QAPISchemaFeature)
             f.set_defined_in(name)
         self.name = name
         self.doc = doc
@@ -171,7 +169,6 @@ def is_implicit(self) -> bool:
         return not self.info
 
     def describe(self) -> str:
-        assert self.meta
         return "%s '%s'" % (self.meta, self.name)
 
 
@@ -385,7 +382,6 @@ def check(self, schema: QAPISchema) -> None:
                     f"feature '{feat.name}' is not supported for types")
 
     def describe(self) -> str:
-        assert self.meta
         return "%s type '%s'" % (self.meta, self.name)
 
 
@@ -394,7 +390,6 @@ class QAPISchemaBuiltinType(QAPISchemaType):
 
     def __init__(self, name: str, json_type: str, c_type: str):
         super().__init__(name, None, None)
-        assert not c_type or isinstance(c_type, str)
         assert json_type in ('string', 'number', 'int', 'boolean', 'null',
                              'value')
         self._json_type_name = json_type
@@ -437,9 +432,7 @@ def __init__(
     ):
         super().__init__(name, info, doc, ifcond, features)
         for m in members:
-            assert isinstance(m, QAPISchemaEnumMember)
             m.set_defined_in(name)
-        assert prefix is None or isinstance(prefix, str)
         self.members = members
         self.prefix = prefix
 
@@ -482,7 +475,6 @@ def __init__(
         self, name: str, info: Optional[QAPISourceInfo], element_type: str
     ):
         super().__init__(name, info, None)
-        assert isinstance(element_type, str)
         self._element_type_name = element_type
         self.element_type: QAPISchemaType
 
@@ -527,7 +519,6 @@ def visit(self, visitor: QAPISchemaVisitor) -> None:
                                  self.element_type)
 
     def describe(self) -> str:
-        assert self.meta
         return "%s type ['%s']" % (self.meta, self._element_type_name)
 
 
@@ -547,12 +538,9 @@ def __init__(
         # union has base, variants, and no local_members
         super().__init__(name, info, doc, ifcond, features)
         self.meta = 'union' if variants else 'struct'
-        assert base is None or isinstance(base, str)
         for m in local_members:
-            assert isinstance(m, QAPISchemaObjectTypeMember)
             m.set_defined_in(name)
         if variants is not None:
-            assert isinstance(variants, QAPISchemaVariants)
             variants.set_defined_in(name)
         self._base_name = base
         self.base = None
@@ -632,11 +620,9 @@ def is_implicit(self) -> bool:
         return self.name.startswith('q_')
 
     def is_empty(self) -> bool:
-        assert self.members is not None
         return not self.members and not self.variants
 
     def has_conditional_members(self) -> bool:
-        assert self.members is not None
         return any(m.ifcond.is_present() for m in self.members)
 
     def c_name(self) -> str:
@@ -676,7 +662,6 @@ def __init__(
         variants: QAPISchemaVariants,
     ):
         super().__init__(name, info, doc, ifcond, features)
-        assert isinstance(variants, QAPISchemaVariants)
         assert variants.tag_member
         variants.set_defined_in(name)
         variants.tag_member.set_defined_in(self.name)
@@ -752,8 +737,6 @@ def __init__(
         assert bool(tag_member) != bool(tag_name)
         assert (isinstance(tag_name, str) or
                 isinstance(tag_member, QAPISchemaObjectTypeMember))
-        for v in variants:
-            assert isinstance(v, QAPISchemaVariant)
         self._tag_name = tag_name
         self.info = info
         self._tag_member = tag_member
@@ -867,7 +850,6 @@ def __init__(
         info: Optional[QAPISourceInfo],
         ifcond: Optional[QAPISchemaIfCond] = None,
     ):
-        assert isinstance(name, str)
         self.name = name
         self.info = info
         self.ifcond = ifcond or QAPISchemaIfCond()
@@ -935,7 +917,6 @@ def __init__(
     ):
         super().__init__(name, info, ifcond)
         for f in features or []:
-            assert isinstance(f, QAPISchemaFeature)
             f.set_defined_in(name)
         self.features = features or []
 
@@ -964,10 +945,7 @@ def __init__(
         features: Optional[List[QAPISchemaFeature]] = None,
     ):
         super().__init__(name, info, ifcond)
-        assert isinstance(typ, str)
-        assert isinstance(optional, bool)
         for f in features or []:
-            assert isinstance(f, QAPISchemaFeature)
             f.set_defined_in(name)
         self._type_name = typ
         self.type: QAPISchemaType  # set during check()
@@ -975,7 +953,6 @@ def __init__(
         self.features = features or []
 
     def need_has(self) -> bool:
-        assert self.type
         return self.optional and self.type.need_has_if_optional()
 
     def check(self, schema: QAPISchema) -> None:
@@ -1026,8 +1003,6 @@ def __init__(
         coroutine: bool,
     ):
         super().__init__(name, info, doc, ifcond, features)
-        assert not arg_type or isinstance(arg_type, str)
-        assert not ret_type or isinstance(ret_type, str)
         self._arg_type_name = arg_type
         self.arg_type: Optional[QAPISchemaObjectType] = None
         self._ret_type_name = ret_type
@@ -1067,7 +1042,6 @@ def check(self, schema: QAPISchema) -> None:
             if self.name not in self.info.pragma.command_returns_exceptions:
                 typ = self.ret_type
                 if isinstance(typ, QAPISchemaArrayType):
-                    assert typ
                     typ = typ.element_type
                 if not isinstance(typ, QAPISchemaObjectType):
                     raise QAPISemError(
@@ -1105,7 +1079,6 @@ def __init__(
         boxed: bool,
     ):
         super().__init__(name, info, doc, ifcond, features)
-        assert not arg_type or isinstance(arg_type, str)
         self._arg_type_name = arg_type
         self.arg_type: Optional[QAPISchemaObjectType] = None
         self.boxed = boxed
-- 
2.43.0



      parent reply	other threads:[~2024-01-12 22:32 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-12 22:29 [PATCH v2 00/19] qapi: statically type schema.py John Snow
2024-01-12 22:29 ` [PATCH v2 01/19] qapi: sort pylint suppressions John Snow
2024-01-15 12:18   ` Markus Armbruster
2024-01-15 19:58     ` John Snow
2024-01-16  6:48       ` Markus Armbruster
2024-01-12 22:29 ` [PATCH v2 02/19] qapi/schema: add " John Snow
2024-01-12 22:29 ` [PATCH v2 03/19] qapi: create QAPISchemaDefinition John Snow
2024-01-15 13:16   ` Markus Armbruster
2024-01-15 21:23     ` John Snow
2024-01-16  7:22       ` Markus Armbruster
2024-01-16 15:49         ` John Snow
2024-01-12 22:29 ` [PATCH v2 04/19] qapi/schema: declare type for QAPISchemaObjectTypeMember.type John Snow
2024-01-15 13:53   ` Markus Armbruster
2024-01-16 15:55     ` John Snow
2024-01-12 22:29 ` [PATCH v2 05/19] qapi/schema: declare type for QAPISchemaArrayType.element_type John Snow
2024-01-15 13:59   ` Markus Armbruster
2024-01-17 16:06     ` John Snow
2024-01-12 22:29 ` [PATCH v2 06/19] qapi/schema: make c_type() and json_type() abstract methods John Snow
2024-01-15 14:03   ` Markus Armbruster
2024-01-17 16:11     ` John Snow
2024-01-12 22:29 ` [PATCH v2 07/19] qapi/schema: adjust type narrowing for mypy's benefit John Snow
2024-01-12 22:29 ` [PATCH v2 08/19] qapi/schema: add type narrowing to lookup_type() John Snow
2024-01-12 22:29 ` [PATCH v2 09/19] qapi/schema: allow resolve_type to be used for built-in types John Snow
2024-01-16 11:09   ` Markus Armbruster
2024-01-17 16:44     ` John Snow
2024-01-22 13:12       ` Markus Armbruster
2024-01-31 22:28         ` John Snow
2024-01-31 23:04         ` John Snow
2024-01-12 22:29 ` [PATCH v2 10/19] qapi: use schema.resolve_type instead of schema.lookup_type John Snow
2024-01-12 22:29 ` [PATCH v2 11/19] qapi/schema: fix QAPISchemaArrayType.check's call to resolve_type John Snow
2024-01-16 12:17   ` Markus Armbruster
2024-01-17 16:48     ` John Snow
2024-01-17 20:00       ` Markus Armbruster
2024-01-12 22:29 ` [PATCH v2 12/19] qapi/schema: assert info is present when necessary John Snow
2024-01-16 13:37   ` Markus Armbruster
2024-01-12 22:29 ` [PATCH v2 13/19] qapi/schema: split "checked" field into "checking" and "checked" John Snow
2024-01-16 14:58   ` Markus Armbruster
2024-02-01 19:41     ` John Snow
2024-02-01 19:57       ` John Snow
2024-01-12 22:29 ` [PATCH v2 14/19] qapi/schema: fix typing for QAPISchemaVariants.tag_member John Snow
2024-01-17  8:22   ` Markus Armbruster
2024-01-12 22:29 ` [PATCH v2 15/19] qapi/schema: assert inner type of QAPISchemaVariants in check_clash() John Snow
2024-01-12 22:29 ` [PATCH v2 16/19] qapi/parser: demote QAPIExpression to Dict[str, Any] John Snow
2024-01-12 22:29 ` [PATCH v2 17/19] qapi/schema: add type hints John Snow
2024-01-12 22:29 ` [PATCH v2 18/19] qapi/schema: turn on mypy strictness John Snow
2024-01-12 22:29 ` John Snow [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240112222945.3033854-20-jsnow@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.