From 8a9f1e1d9cc55f5eb0946cbf8fd1ef9a0e7d3dac Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Wed, 4 Aug 2021 12:31:05 +0400 Subject: qapi: make 'if' condition strings simple identifiers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the 'if' condition strings to be C-agnostic. It will accept '[A-Z][A-Z0-9_]*' identifiers. This allows to express configuration conditions in other languages (Rust or Python for ex) or other more suitable forms. Signed-off-by: Marc-André Lureau Reviewed-by: Stefan Hajnoczi Tested-by: John Snow Message-Id: <20210804083105.97531-11-marcandre.lureau@redhat.com> Reviewed-by: Markus Armbruster [Rebased with semantic conflict in redefined-event.json] Signed-off-by: Markus Armbruster --- scripts/qapi/common.py | 2 +- scripts/qapi/expr.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'scripts/qapi') diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 3fb2fbe7d4..1724ac32db 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -204,7 +204,7 @@ def cgen_ifcond(ifcond: Union[str, Dict[str, Any]]) -> str: if not ifcond: return '' if isinstance(ifcond, str): - return ifcond + return 'defined(' + ifcond + ')' oper, operands = next(iter(ifcond.items())) if oper == 'not': diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py index 120b31089f..019f4c97aa 100644 --- a/scripts/qapi/expr.py +++ b/scripts/qapi/expr.py @@ -275,10 +275,10 @@ def check_if(expr: _JSONObject, info: QAPISourceInfo, source: str) -> None: def _check_if(cond: Union[str, object]) -> None: if isinstance(cond, str): - if not cond.strip(): + if not re.match(r'^[A-Z][A-Z0-9_]*$', cond): raise QAPISemError( info, - "'if' condition '%s' of %s makes no sense" + "'if' condition '%s' of %s is not a valid identifier" % (cond, source)) return -- cgit 1.4.1