[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 07/12] qapi/schema: make QAPISourceInfo mandatory
From: |
John Snow |
Subject: |
[PATCH v2 07/12] qapi/schema: make QAPISourceInfo mandatory |
Date: |
Wed, 16 Dec 2020 20:59:22 -0500 |
Signed-off-by: John Snow <jsnow@redhat.com>
---
The event_enum_members change might become irrelevant after a
forthcoming (?) patch by Markus, but didn't have it in-hand at time of
publishing.
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qapi/events.py | 2 +-
scripts/qapi/schema.py | 25 ++++++++++++++-----------
scripts/qapi/types.py | 9 +++++----
scripts/qapi/visit.py | 6 +++---
4 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 9851653b9d1..9ba4f109028 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 720449feee4..0449771dfe5 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 built-in types (and their arrays), info is a
+ # special object 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 []
@@ -68,7 +69,7 @@ def check_doc(self):
def _set_module(self, schema, info):
assert self._checked
- self._module = schema.module_by_fname(info and info.fname)
+ self._module = schema.module_by_fname(info.fname if info else None)
self._module.add_entity(self)
def set_module(self, schema):
@@ -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')
@@ -897,7 +898,7 @@ 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):
for t in [('str', 'string', 'char' + POINTER_SUFFIX),
@@ -917,16 +918,18 @@ 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', QAPISourceInfo.builtin(),
+ 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], QAPISourceInfo.builtin())
- self._def_entity(QAPISchemaEnumType('QType', None, None, None, None,
- qtype_values, 'QTYPE'))
+ self._def_entity(QAPISchemaEnumType(
+ 'QType', QAPISourceInfo.builtin(), None,
+ None, None, qtype_values, 'QTYPE'))
def _make_features(self, features, info):
if features is None:
diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py
index 2b4916cdaa1..a3a16284006 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 339f1521524..3f49c307c56 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
- [PATCH v2 00/12] qapi: static typing conversion, pt1.5, John Snow, 2020/12/16
- [PATCH v2 01/12] qapi/commands: assert arg_type is not None, John Snow, 2020/12/16
- [PATCH v2 02/12] qapi/events: fix visit_event typing, John Snow, 2020/12/16
- [PATCH v2 03/12] qapi/main: handle theoretical None-return from re.match(), John Snow, 2020/12/16
- [PATCH v2 10/12] tests/qapi-schema: Add quotes to module name in test output, John Snow, 2020/12/16
- [PATCH v2 04/12] qapi/gen: assert that _start_if is not None in _wrap_ifcond, John Snow, 2020/12/16
- [PATCH v2 08/12] qapi/gen: write _genc/_genh access shims, John Snow, 2020/12/16
- [PATCH v2 12/12] qapi: enable strict-optional checks, John Snow, 2020/12/16
- [PATCH v2 07/12] qapi/schema: make QAPISourceInfo mandatory,
John Snow <=
- [PATCH v2 05/12] qapi/gen: use './builtin' for the built-in module name, John Snow, 2020/12/16
- [PATCH v2 09/12] qapi/gen: move write method to QAPIGenC, make fname a str, John Snow, 2020/12/16
- [PATCH v2 06/12] qapi/source: Add builtin null-object sentinel, John Snow, 2020/12/16
- [PATCH v2 11/12] qapi/schema: Name the builtin module "" instead of None, John Snow, 2020/12/16