qapi: Tools for sets of special feature flags in generated code

New enum QapiSpecialFeature enumerates the special feature flags.

New helper gen_special_features() returns code to represent a
collection of special feature flags as a bitset.

The next few commits will put them to use.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Message-Id: <20211028102520.747396-5-armbru@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
Markus Armbruster 2021-10-28 12:25:15 +02:00
parent 9bafe07bc8
commit c67db1ed16
3 changed files with 15 additions and 0 deletions

View File

@ -11,6 +11,10 @@
#ifndef QAPI_UTIL_H
#define QAPI_UTIL_H
typedef enum {
QAPI_DEPRECATED,
} QapiSpecialFeature;
/* QEnumLookup flags */
#define QAPI_ENUM_DEPRECATED 1

View File

@ -18,6 +18,7 @@ from typing import (
Dict,
Iterator,
Optional,
Sequence,
Tuple,
)
@ -29,6 +30,7 @@ from .common import (
mcgen,
)
from .schema import (
QAPISchemaFeature,
QAPISchemaIfCond,
QAPISchemaModule,
QAPISchemaObjectType,
@ -37,6 +39,12 @@ from .schema import (
from .source import QAPISourceInfo
def gen_special_features(features: Sequence[QAPISchemaFeature]) -> str:
special_features = [f"1u << QAPI_{feat.name.upper()}"
for feat in features if feat.is_special()]
return ' | '.join(special_features) or '0'
class QAPIGen:
def __init__(self, fname: str):
self.fname = fname

View File

@ -725,6 +725,9 @@ class QAPISchemaEnumMember(QAPISchemaMember):
class QAPISchemaFeature(QAPISchemaMember):
role = 'feature'
def is_special(self):
return self.name in ('deprecated')
class QAPISchemaObjectTypeMember(QAPISchemaMember):
def __init__(self, name, info, typ, optional, ifcond=None, features=None):