From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>
Subject: [PATCH 08/12] qapi/schema: make QAPISourceInfo mandatory
Date: Mon, 14 Dec 2020 18:53:23 -0500 [thread overview]
Message-ID: <20201214235327.1007124-9-jsnow@redhat.com> (raw)
In-Reply-To: <20201214235327.1007124-1-jsnow@redhat.com>
--
events.py had an info to route, was it by choice that it wasn't before?
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qapi/events.py | 2 +-
scripts/qapi/schema.py | 23 +++++++++++++----------
scripts/qapi/types.py | 9 +++++----
scripts/qapi/visit.py | 6 +++---
4 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 9851653b9d11..9ba4f109028d 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -225,7 +225,7 @@ def visit_event(self,
self._event_emit_name))
# Note: we generate the enum member regardless of @ifcond, to
# keep the enumeration usable in target-independent code.
- self._event_enum_members.append(QAPISchemaEnumMember(name, None))
+ self._event_enum_members.append(QAPISchemaEnumMember(name, info))
def gen_events(schema: QAPISchema,
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 720449feee4d..d5f19732b516 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -23,6 +23,7 @@
from .error import QAPIError, QAPISemError
from .expr import check_exprs
from .parser import QAPISchemaParser
+from .source import QAPISourceInfo
class QAPISchemaEntity:
@@ -36,10 +37,10 @@ def __init__(self, name, info, doc, ifcond=None, features=None):
self.name = name
self._module = None
# For explicitly defined entities, info points to the (explicit)
- # definition. For builtins (and their arrays), info is None.
- # For implicitly defined entities, info points to a place that
- # triggered the implicit definition (there may be more than one
- # such place).
+ # definition. For builtins (and their arrays), info is a null-object
+ # sentinel that evaluates to False. For implicitly defined entities,
+ # info points to a place that triggered the implicit definition
+ # (there may be more than one such place).
self.info = info
self.doc = doc
self._ifcond = ifcond or []
@@ -209,7 +210,7 @@ class QAPISchemaBuiltinType(QAPISchemaType):
meta = 'built-in'
def __init__(self, name, json_type, c_type):
- super().__init__(name, None, None)
+ super().__init__(name, QAPISourceInfo.builtin(), None)
assert not c_type or isinstance(c_type, str)
assert json_type in ('string', 'number', 'int', 'boolean', 'null',
'value')
@@ -871,7 +872,7 @@ def resolve_type(self, name, info, what):
return typ
def _module_name(self, fname):
- if fname is None:
+ if not fname:
return None
return os.path.relpath(fname, self._schema_dir)
@@ -897,9 +898,11 @@ def _def_builtin_type(self, name, json_type, c_type):
# be nice, but we can't as long as their generated code
# (qapi-builtin-types.[ch]) may be shared by some other
# schema.
- self._make_array_type(name, None)
+ self._make_array_type(name, QAPISourceInfo.builtin())
def _def_predefineds(self):
+ info = QAPISourceInfo.builtin()
+
for t in [('str', 'string', 'char' + POINTER_SUFFIX),
('number', 'number', 'double'),
('int', 'int', 'int64_t'),
@@ -917,15 +920,15 @@ def _def_predefineds(self):
('null', 'null', 'QNull' + POINTER_SUFFIX)]:
self._def_builtin_type(*t)
self.the_empty_object_type = QAPISchemaObjectType(
- 'q_empty', None, None, None, None, None, [], None)
+ 'q_empty', info, None, None, None, None, [], None)
self._def_entity(self.the_empty_object_type)
qtypes = ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist',
'qbool']
qtype_values = self._make_enum_members(
- [{'name': n} for n in qtypes], None)
+ [{'name': n} for n in qtypes], info)
- self._def_entity(QAPISchemaEnumType('QType', None, None, None, None,
+ self._def_entity(QAPISchemaEnumType('QType', info, None, None, None,
qtype_values, 'QTYPE'))
def _make_features(self, features, info):
diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
index 2b4916cdaa1b..a3a16284006b 100644
--- a/scripts/qapi/types.py
+++ b/scripts/qapi/types.py
@@ -71,7 +71,8 @@ def gen_enum(name: str,
members: List[QAPISchemaEnumMember],
prefix: Optional[str] = None) -> str:
# append automatically generated _MAX value
- enum_members = members + [QAPISchemaEnumMember('_MAX', None)]
+ enum_members = members + [
+ QAPISchemaEnumMember('_MAX', QAPISourceInfo.builtin())]
ret = mcgen('''
@@ -306,7 +307,7 @@ def _gen_type_cleanup(self, name: str) -> None:
def visit_enum_type(self,
name: str,
- info: Optional[QAPISourceInfo],
+ info: QAPISourceInfo,
ifcond: List[str],
features: List[QAPISchemaFeature],
members: List[QAPISchemaEnumMember],
@@ -317,7 +318,7 @@ def visit_enum_type(self,
def visit_array_type(self,
name: str,
- info: Optional[QAPISourceInfo],
+ info: QAPISourceInfo,
ifcond: List[str],
element_type: QAPISchemaType) -> None:
with ifcontext(ifcond, self._genh, self._genc):
@@ -327,7 +328,7 @@ def visit_array_type(self,
def visit_object_type(self,
name: str,
- info: Optional[QAPISourceInfo],
+ info: QAPISourceInfo,
ifcond: List[str],
features: List[QAPISchemaFeature],
base: Optional[QAPISchemaObjectType],
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index 339f1521524c..3f49c307c566 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -336,7 +336,7 @@ def _begin_user_module(self, name: str) -> None:
def visit_enum_type(self,
name: str,
- info: QAPISourceInfo,
+ info: Optional[QAPISourceInfo],
ifcond: List[str],
features: List[QAPISchemaFeature],
members: List[QAPISchemaEnumMember],
@@ -347,7 +347,7 @@ def visit_enum_type(self,
def visit_array_type(self,
name: str,
- info: Optional[QAPISourceInfo],
+ info: QAPISourceInfo,
ifcond: List[str],
element_type: QAPISchemaType) -> None:
with ifcontext(ifcond, self._genh, self._genc):
@@ -356,7 +356,7 @@ def visit_array_type(self,
def visit_object_type(self,
name: str,
- info: Optional[QAPISourceInfo],
+ info: QAPISourceInfo,
ifcond: List[str],
features: List[QAPISchemaFeature],
base: Optional[QAPISchemaObjectType],
--
2.26.2
next prev parent reply other threads:[~2020-12-15 0:02 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-14 23:53 [PATCH 00/12] qapi: static typing conversion, pt1.5 John Snow
2020-12-14 23:53 ` [PATCH 01/12] qapi/commands: assert arg_type is not None John Snow
2020-12-14 23:53 ` [PATCH 02/12] qapi/events: fix visit_event typing John Snow
2020-12-14 23:53 ` [PATCH 03/12] qapi/main: handle theoretical None-return from re.match() John Snow
2020-12-16 8:23 ` Markus Armbruster
2020-12-16 17:11 ` John Snow
2020-12-14 23:53 ` [PATCH 04/12] qapi/gen: assert that _start_if is not None in _wrap_ifcond John Snow
2020-12-16 8:26 ` Markus Armbruster
2020-12-16 17:13 ` John Snow
2020-12-17 7:24 ` Markus Armbruster
2020-12-14 23:53 ` [PATCH 05/12] qapi/gen: use './builtin' for the built-in module name John Snow
2020-12-16 8:35 ` Markus Armbruster
2020-12-16 17:27 ` John Snow
2020-12-14 23:53 ` [PATCH 06/12] qapi/source: Add builtin null-object sentinel John Snow
2020-12-16 9:22 ` Markus Armbruster
2020-12-16 17:53 ` John Snow
2020-12-17 12:33 ` Markus Armbruster
2020-12-18 19:14 ` John Snow
2020-12-16 19:11 ` John Snow
2020-12-17 11:56 ` Markus Armbruster
2020-12-18 19:22 ` John Snow
2020-12-14 23:53 ` [PATCH 07/12] qapi/gen: write _genc/_genh access shims John Snow
2020-12-14 23:53 ` John Snow [this message]
2020-12-16 10:18 ` [PATCH 08/12] qapi/schema: make QAPISourceInfo mandatory Markus Armbruster
2020-12-16 18:41 ` John Snow
2020-12-17 8:02 ` Markus Armbruster
2020-12-17 17:02 ` John Snow
2020-12-18 5:24 ` Markus Armbruster
2020-12-18 19:17 ` John Snow
2020-12-18 20:57 ` Markus Armbruster
2020-12-18 21:30 ` John Snow
2020-12-14 23:53 ` [PATCH 09/12] qapi/gen: move write method to QAPIGenC, make fname a str John Snow
2020-12-16 10:31 ` Markus Armbruster
2020-12-14 23:53 ` [PATCH 10/12] tests/qapi-schema: Add quotes to module name in test output John Snow
2020-12-14 23:53 ` [PATCH 11/12] qapi/schema: Name the builtin module "" instead of None John Snow
2020-12-16 10:42 ` Markus Armbruster
2020-12-16 18:57 ` John Snow
2020-12-17 11:09 ` Markus Armbruster
2020-12-17 21:07 ` John Snow
2020-12-18 5:31 ` Markus Armbruster
2020-12-14 23:53 ` [PATCH 12/12] qapi: enable strict-optional checks John Snow
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=20201214235327.1007124-9-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=marcandre.lureau@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).