Skip to content
Snippets Groups Projects
Commit f965e8fe authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qapi: New special feature flag "deprecated"


Unlike regular feature flags, the new special feature flag
"deprecated" is recognized by the QAPI generator.  For now, it's only
permitted with commands, events, and struct members.  It will be put
to use shortly.

Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <20200317115459.31821-26-armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
[Doc typo fixed]
parent 4a883738
No related branches found
No related tags found
No related merge requests found
......@@ -683,6 +683,12 @@ Intended use is to have each feature string signal that this build of
QEMU shows a certain behaviour.
==== Special features ====
Feature "deprecated" marks a command, event, or struct member as
deprecated. It is not supported elsewhere so far.
=== Naming rules and reserved names ===
All names must begin with a letter, and contain only ASCII letters,
......
......@@ -193,6 +193,12 @@ def doc_type(self):
return None
return self.name
def check(self, schema):
QAPISchemaEntity.check(self, schema)
if 'deprecated' in [f.name for f in self.features]:
raise QAPISemError(
self.info, "feature 'deprecated' is not supported for types")
def describe(self):
assert self.meta
return "%s type '%s'" % (self.meta, self.name)
......
......@@ -242,6 +242,7 @@ qapi-schema += event-case.json
qapi-schema += event-member-invalid-dict.json
qapi-schema += event-nest-struct.json
qapi-schema += features-bad-type.json
qapi-schema += features-deprecated-type.json
qapi-schema += features-duplicate-name.json
qapi-schema += features-if-invalid.json
qapi-schema += features-missing-name.json
......
features-deprecated-type.json: In struct 'S':
features-deprecated-type.json:2: feature 'deprecated' is not supported for types
# Feature 'deprecated' is not supported for types
{ 'struct': 'S', 'data': {},
'features': [ 'deprecated' ] }
......@@ -258,7 +258,7 @@
'data': { 'foo': 'int' },
'features': [] }
{ 'struct': 'FeatureStruct1',
'data': { 'foo': { 'type': 'int', 'features': [ 'member-feature1' ] } },
'data': { 'foo': { 'type': 'int', 'features': [ 'deprecated' ] } },
'features': [ 'feature1' ] }
{ 'struct': 'FeatureStruct2',
'data': { 'foo': 'int' },
......@@ -308,7 +308,7 @@
'features': [] }
{ 'command': 'test-command-features1',
'features': [ 'feature1' ] }
'features': [ 'deprecated' ] }
{ 'command': 'test-command-features3',
'features': [ 'feature1', 'feature2' ] }
......@@ -322,4 +322,4 @@
'defined(TEST_IF_COND_2)'] } ] }
{ 'event': 'TEST-EVENT-FEATURES1',
'features': [ 'feature1' ] }
'features': [ 'deprecated' ] }
......@@ -359,7 +359,7 @@ object FeatureStruct0
member foo: int optional=False
object FeatureStruct1
member foo: int optional=False
feature member-feature1
feature deprecated
feature feature1
object FeatureStruct2
member foo: int optional=False
......@@ -419,7 +419,7 @@ command test-features0 q_obj_test-features0-arg -> None
gen=True success_response=True boxed=False oob=False preconfig=False
command test-command-features1 None -> None
gen=True success_response=True boxed=False oob=False preconfig=False
feature feature1
feature deprecated
command test-command-features3 None -> None
gen=True success_response=True boxed=False oob=False preconfig=False
feature feature1
......@@ -440,7 +440,7 @@ command test-command-cond-features3 None -> None
if ['defined(TEST_IF_COND_1)', 'defined(TEST_IF_COND_2)']
event TEST-EVENT-FEATURES1 None
boxed=False
feature feature1
feature deprecated
module include/sub-module.json
include sub-sub-module.json
object SecondArrayRef
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment