diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index df92cff852..c7ccc7cec7 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -205,24 +205,26 @@ def gen_ifcond(ifcond: Optional[Union[str, Dict[str, Any]]], cond_fmt: str, not_fmt: str, all_operator: str, any_operator: str) -> str: - def do_gen(ifcond: Union[str, Dict[str, Any]]): + def do_gen(ifcond: Union[str, Dict[str, Any]], need_parens: bool): if isinstance(ifcond, str): return cond_fmt % ifcond assert isinstance(ifcond, dict) and len(ifcond) == 1 if 'not' in ifcond: - return not_fmt % do_gen(ifcond['not']) + return not_fmt % do_gen(ifcond['not'], True) if 'all' in ifcond: gen = gen_infix(all_operator, ifcond['all']) else: gen = gen_infix(any_operator, ifcond['any']) + if need_parens: + gen = '(' + gen + ')' return gen def gen_infix(operator: str, operands: Sequence[Any]) -> str: - return '(' + operator.join([do_gen(o) for o in operands]) + ')' + return operator.join([do_gen(o, True) for o in operands]) if not ifcond: return '' - return do_gen(ifcond) + return do_gen(ifcond, False) def cgen_ifcond(ifcond: Optional[Union[str, Dict[str, Any]]]) -> str: diff --git a/tests/qapi-schema/doc-good.txt b/tests/qapi-schema/doc-good.txt index 85a370831f..75f51a6fc1 100644 --- a/tests/qapi-schema/doc-good.txt +++ b/tests/qapi-schema/doc-good.txt @@ -79,7 +79,7 @@ Members If ~~ -"(IFALL1 and IFALL2)" +"IFALL1 and IFALL2" "Variant1" (Object) @@ -120,8 +120,8 @@ Members The members of "Base" The members of "Variant1" when "base1" is ""one"" -The members of "Variant2" when "base1" is ""two"" (**If: **"(IFONE or -IFTWO)") +The members of "Variant2" when "base1" is ""two"" (**If: **"IFONE or +IFTWO") Features ~~~~~~~~