qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen()


From: Markus Armbruster
Subject: Re: [RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen()
Date: Wed, 08 Sep 2021 14:33:31 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)

marcandre.lureau@redhat.com writes:

> 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:

Can we generalize gen_ifcond() to work for rsgen_ifcond(), too?

> 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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]