123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """
- QAPI features generator
- Copyright 2024 Red Hat
- This work is licensed under the terms of the GNU GPL, version 2.
- # See the COPYING file in the top-level directory.
- """
- from typing import ValuesView
- from .common import c_enum_const, c_name
- from .gen import QAPISchemaMonolithicCVisitor
- from .schema import QAPISchema, QAPISchemaFeature
- class QAPISchemaGenFeatureVisitor(QAPISchemaMonolithicCVisitor):
- def __init__(self, prefix: str):
- super().__init__(
- prefix, 'qapi-features',
- ' * Schema-defined QAPI features',
- __doc__)
- self.features: ValuesView[QAPISchemaFeature]
- def visit_begin(self, schema: QAPISchema) -> None:
- self.features = schema.features()
- self._genh.add("#include \"qapi/util.h\"\n\n")
- def visit_end(self) -> None:
- self._genh.add("typedef enum {\n")
- for f in self.features:
- self._genh.add(f" {c_enum_const('qapi_feature', f.name)}")
- if f.name in QAPISchemaFeature.SPECIAL_NAMES:
- self._genh.add(f" = {c_enum_const('qapi', f.name)},\n")
- else:
- self._genh.add(",\n")
- self._genh.add("} " + c_name('QapiFeature') + ";\n")
- def gen_features(schema: QAPISchema,
- output_dir: str,
- prefix: str) -> None:
- vis = QAPISchemaGenFeatureVisitor(prefix)
- schema.visit(vis)
- vis.write(output_dir)
|