mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
qapi: introduce QAPISchemaIfCond.cgen()
Instead of building prepocessor conditions from a list of string, use the result generated from QAPISchemaIfCond.cgen() and hide the implementation details. Note: this patch introduces a minor regression, generating a redundant pair of parenthesis. This is mostly fixed in a later patch in this series ("qapi: replace if condition list with dict [..]") Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20210804083105.97531-5-marcandre.lureau@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message tweaked] Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
33aa3267ba
commit
6cc2e4817f
6 changed files with 46 additions and 34 deletions
|
@ -12,7 +12,12 @@
|
|||
# See the COPYING file in the top-level directory.
|
||||
|
||||
import re
|
||||
from typing import Match, Optional, Sequence
|
||||
from typing import (
|
||||
List,
|
||||
Match,
|
||||
Optional,
|
||||
Union,
|
||||
)
|
||||
|
||||
|
||||
#: Magic string that gets removed along with all space to its right.
|
||||
|
@ -194,22 +199,26 @@ def guardend(name: str) -> str:
|
|||
name=c_fname(name).upper())
|
||||
|
||||
|
||||
def gen_if(ifcond: Sequence[str]) -> str:
|
||||
ret = ''
|
||||
for ifc in ifcond:
|
||||
ret += mcgen('''
|
||||
def cgen_ifcond(ifcond: Union[str, List[str]]) -> str:
|
||||
if not ifcond:
|
||||
return ''
|
||||
return '(' + ') && ('.join(ifcond) + ')'
|
||||
|
||||
|
||||
def gen_if(cond: str) -> str:
|
||||
if not cond:
|
||||
return ''
|
||||
return mcgen('''
|
||||
#if %(cond)s
|
||||
''', cond=ifc)
|
||||
return ret
|
||||
''', cond=cond)
|
||||
|
||||
|
||||
def gen_endif(ifcond: Sequence[str]) -> str:
|
||||
ret = ''
|
||||
for ifc in reversed(ifcond):
|
||||
ret += mcgen('''
|
||||
def gen_endif(cond: str) -> str:
|
||||
if not cond:
|
||||
return ''
|
||||
return mcgen('''
|
||||
#endif /* %(cond)s */
|
||||
''', cond=ifc)
|
||||
return ret
|
||||
''', cond=cond)
|
||||
|
||||
|
||||
def must_match(pattern: str, string: str) -> Match[str]:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue