summaryrefslogtreecommitdiffstats
path: root/scripts/qapi
diff options
context:
space:
mode:
authorMarc-André Lureau2021-08-04 10:31:05 +0200
committerMarkus Armbruster2021-08-26 13:53:56 +0200
commit8a9f1e1d9cc55f5eb0946cbf8fd1ef9a0e7d3dac (patch)
tree11ccd49b95bbad5e049e02d0283266dfb9f883dd /scripts/qapi
parentqapi: add 'not' condition operation (diff)
downloadqemu-8a9f1e1d9cc55f5eb0946cbf8fd1ef9a0e7d3dac.tar.gz
qemu-8a9f1e1d9cc55f5eb0946cbf8fd1ef9a0e7d3dac.tar.xz
qemu-8a9f1e1d9cc55f5eb0946cbf8fd1ef9a0e7d3dac.zip
qapi: make 'if' condition strings simple identifiers
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 <marcandre.lureau@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Tested-by: John Snow <jsnow@redhat.com> Message-Id: <20210804083105.97531-11-marcandre.lureau@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Rebased with semantic conflict in redefined-event.json] Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'scripts/qapi')
-rw-r--r--scripts/qapi/common.py2
-rw-r--r--scripts/qapi/expr.py4
2 files changed, 3 insertions, 3 deletions
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