mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
qapi: Add feature flags to enum members
This is quite similar to commit 84ab008687
"qapi: Add feature flags to
struct members", only for enums instead of structs.
Special feature flag 'deprecated' is silently ignored there. This is
okay only because it will be implemented shortly.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20211025042405.3762351-3-armbru@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
75ecee7262
commit
b6c18755e4
13 changed files with 57 additions and 14 deletions
|
@ -472,7 +472,7 @@ def check_enum(expr: _JSONObject, info: QAPISourceInfo) -> None:
|
|||
for m in members]
|
||||
for member in members:
|
||||
source = "'data' member"
|
||||
check_keys(member, info, source, ['name'], ['if'])
|
||||
check_keys(member, info, source, ['name'], ['if', 'features'])
|
||||
member_name = member['name']
|
||||
check_name_is_str(member_name, info, source)
|
||||
source = "%s '%s'" % (source, member_name)
|
||||
|
@ -483,6 +483,7 @@ def check_enum(expr: _JSONObject, info: QAPISourceInfo) -> None:
|
|||
permit_upper=permissive,
|
||||
permit_underscore=permissive)
|
||||
check_if(member, info, source)
|
||||
check_features(member.get('features'), info)
|
||||
|
||||
|
||||
def check_struct(expr: _JSONObject, info: QAPISourceInfo) -> None:
|
||||
|
|
|
@ -275,12 +275,13 @@ const QLitObject %(c_name)s = %(c_string)s;
|
|||
obj['features'] = self._gen_features(features)
|
||||
self._trees.append(Annotated(obj, ifcond, comment))
|
||||
|
||||
@staticmethod
|
||||
def _gen_enum_member(member: QAPISchemaEnumMember
|
||||
def _gen_enum_member(self, member: QAPISchemaEnumMember
|
||||
) -> Annotated[SchemaInfoEnumMember]:
|
||||
obj: SchemaInfoEnumMember = {
|
||||
'name': member.name,
|
||||
}
|
||||
if member.features:
|
||||
obj['features'] = self._gen_features(member.features)
|
||||
return Annotated(obj, member.ifcond)
|
||||
|
||||
def _gen_object_member(self, member: QAPISchemaObjectTypeMember
|
||||
|
|
|
@ -708,6 +708,19 @@ class QAPISchemaMember:
|
|||
class QAPISchemaEnumMember(QAPISchemaMember):
|
||||
role = 'value'
|
||||
|
||||
def __init__(self, name, info, ifcond=None, features=None):
|
||||
super().__init__(name, info, ifcond)
|
||||
for f in features or []:
|
||||
assert isinstance(f, QAPISchemaFeature)
|
||||
f.set_defined_in(name)
|
||||
self.features = features or []
|
||||
|
||||
def connect_doc(self, doc):
|
||||
super().connect_doc(doc)
|
||||
if doc:
|
||||
for f in self.features:
|
||||
doc.connect_feature(f)
|
||||
|
||||
|
||||
class QAPISchemaFeature(QAPISchemaMember):
|
||||
role = 'feature'
|
||||
|
@ -980,9 +993,14 @@ class QAPISchema:
|
|||
QAPISchemaIfCond(f.get('if')))
|
||||
for f in features]
|
||||
|
||||
def _make_enum_member(self, name, ifcond, features, info):
|
||||
return QAPISchemaEnumMember(name, info,
|
||||
QAPISchemaIfCond(ifcond),
|
||||
self._make_features(features, info))
|
||||
|
||||
def _make_enum_members(self, values, info):
|
||||
return [QAPISchemaEnumMember(v['name'], info,
|
||||
QAPISchemaIfCond(v.get('if')))
|
||||
return [self._make_enum_member(v['name'], v.get('if'),
|
||||
v.get('features'), info)
|
||||
for v in values]
|
||||
|
||||
def _make_array_type(self, element_type, info):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue