[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen()
From: |
marcandre . lureau |
Subject: |
[RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen() |
Date: |
Tue, 7 Sep 2021 16:19:25 +0400 |
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Generate Rust #[cfg(...)] guards from QAPI 'if' conditions.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
scripts/qapi/common.py | 16 ++++++++++++++++
scripts/qapi/schema.py | 4 ++++
2 files changed, 20 insertions(+)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 5f8f76e5b2..6d22c66391 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -201,6 +201,22 @@ def guardend(name: str) -> str:
name=c_fname(name).upper())
+def rsgen_ifcond(ifcond: Union[str, Dict[str, Any]]) -> str:
+
+ def cfg(ifcond: Union[str, Dict[str, Any]]):
+ if isinstance(ifcond, str):
+ return ifcond
+ if isinstance(ifcond, list):
+ return ', '.join([cfg(c) for c in ifcond])
+ oper, operands = next(iter(ifcond.items()))
+ operands = cfg(operands)
+ return f'{oper}({operands})'
+
+ if not ifcond:
+ return ''
+ return '#[cfg(%s)]' % cfg(ifcond)
+
+
def gen_ifcond(ifcond: Optional[Union[str, Dict[str, Any]]],
cond_fmt: str, not_fmt: str,
all_operator: str, any_operator: str) -> str:
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 6455a8f425..c61f35e13f 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -26,6 +26,7 @@
docgen_ifcond,
gen_endif,
gen_if,
+ rsgen_ifcond,
)
from .error import QAPIError, QAPISemError, QAPISourceError
from .expr import check_exprs
@@ -48,6 +49,9 @@ def gen_endif(self):
def docgen(self):
return docgen_ifcond(self.ifcond)
+ def rsgen(self):
+ return rsgen_ifcond(self.ifcond)
+
def is_present(self):
return bool(self.ifcond)
--
2.33.0.113.g6c40894d24
- Re: [RFC v3 13/32] rust: use vendored-sources, (continued)
Re: [RFC v3 13/32] rust: use vendored-sources, Peter Maydell, 2021/09/09
Re: [RFC v3 13/32] rust: use vendored-sources, Paolo Bonzini, 2021/09/13
Re: [RFC v3 13/32] rust: use vendored-sources, Daniel P . Berrangé, 2021/09/09
Re: [RFC v3 13/32] rust: use vendored-sources, Ian Jackson, 2021/09/09
[RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen(),
marcandre . lureau <=
[RFC v3 15/32] scripts/qapi: strip trailing whitespaces, marcandre . lureau, 2021/09/07
[RFC v3 16/32] scripts/qapi: add Rust FFI bindings generation, marcandre . lureau, 2021/09/07
[RFC v3 17/32] scripts/qapi: learn to generate ABI dump for Rust FFI, marcandre . lureau, 2021/09/07
[RFC v3 18/32] tests: generate Rust bindings, marcandre . lureau, 2021/09/07
[RFC v3 19/32] tests: check Rust and C CABI diffs, marcandre . lureau, 2021/09/07
[RFC v3 20/32] scripts/qapi: generate high-level Rust bindings, marcandre . lureau, 2021/09/07
[RFC v3 22/32] qga: build qapi-cabi binary (ABI from C), marcandre . lureau, 2021/09/07
[RFC v3 21/32] tests/rust: build a common library, checking bindings compile, marcandre . lureau, 2021/09/07