mirror of
https://github.com/xemu-project/xemu.git
synced 2025-04-02 11:11:48 -04:00
qapi: Simplify QAPISchemaIfCond's interface for generating C
QAPISchemaIfCond.cgen() is only ever used like gen_if(ifcond.cgen()) and gen_endif(ifcond.cgen()) Simplify to ifcond.gen_if() and ifcond.gen_endif() Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210831123809.1107782-2-armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> [Import statements tidied up with isort]
This commit is contained in:
parent
3e038d7d7a
commit
1889e57a71
5 changed files with 31 additions and 38 deletions
|
@ -24,8 +24,6 @@ from typing import (
|
||||||
from .common import (
|
from .common import (
|
||||||
c_fname,
|
c_fname,
|
||||||
c_name,
|
c_name,
|
||||||
gen_endif,
|
|
||||||
gen_if,
|
|
||||||
guardend,
|
guardend,
|
||||||
guardstart,
|
guardstart,
|
||||||
mcgen,
|
mcgen,
|
||||||
|
@ -95,9 +93,9 @@ def _wrap_ifcond(ifcond: QAPISchemaIfCond, before: str, after: str) -> str:
|
||||||
if added[0] == '\n':
|
if added[0] == '\n':
|
||||||
out += '\n'
|
out += '\n'
|
||||||
added = added[1:]
|
added = added[1:]
|
||||||
out += gen_if(ifcond.cgen())
|
out += ifcond.gen_if()
|
||||||
out += added
|
out += added
|
||||||
out += gen_endif(ifcond.cgen())
|
out += ifcond.gen_endif()
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,7 @@ from typing import (
|
||||||
Union,
|
Union,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .common import (
|
from .common import c_name, mcgen
|
||||||
c_name,
|
|
||||||
gen_endif,
|
|
||||||
gen_if,
|
|
||||||
mcgen,
|
|
||||||
)
|
|
||||||
from .gen import QAPISchemaMonolithicCVisitor
|
from .gen import QAPISchemaMonolithicCVisitor
|
||||||
from .schema import (
|
from .schema import (
|
||||||
QAPISchema,
|
QAPISchema,
|
||||||
|
@ -124,10 +119,10 @@ def _tree_to_qlit(obj: JSONValue,
|
||||||
if obj.comment:
|
if obj.comment:
|
||||||
ret += indent(level) + f"/* {obj.comment} */\n"
|
ret += indent(level) + f"/* {obj.comment} */\n"
|
||||||
if obj.ifcond.is_present():
|
if obj.ifcond.is_present():
|
||||||
ret += gen_if(obj.ifcond.cgen())
|
ret += obj.ifcond.gen_if()
|
||||||
ret += _tree_to_qlit(obj.value, level)
|
ret += _tree_to_qlit(obj.value, level)
|
||||||
if obj.ifcond.is_present():
|
if obj.ifcond.is_present():
|
||||||
ret += '\n' + gen_endif(obj.ifcond.cgen())
|
ret += '\n' + obj.ifcond.gen_endif()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
ret = ''
|
ret = ''
|
||||||
|
|
|
@ -24,6 +24,8 @@ from .common import (
|
||||||
c_name,
|
c_name,
|
||||||
cgen_ifcond,
|
cgen_ifcond,
|
||||||
docgen_ifcond,
|
docgen_ifcond,
|
||||||
|
gen_endif,
|
||||||
|
gen_if,
|
||||||
)
|
)
|
||||||
from .error import QAPIError, QAPISemError, QAPISourceError
|
from .error import QAPIError, QAPISemError, QAPISourceError
|
||||||
from .expr import check_exprs
|
from .expr import check_exprs
|
||||||
|
@ -34,9 +36,15 @@ class QAPISchemaIfCond:
|
||||||
def __init__(self, ifcond=None):
|
def __init__(self, ifcond=None):
|
||||||
self.ifcond = ifcond or {}
|
self.ifcond = ifcond or {}
|
||||||
|
|
||||||
def cgen(self):
|
def _cgen(self):
|
||||||
return cgen_ifcond(self.ifcond)
|
return cgen_ifcond(self.ifcond)
|
||||||
|
|
||||||
|
def gen_if(self):
|
||||||
|
return gen_if(self._cgen())
|
||||||
|
|
||||||
|
def gen_endif(self):
|
||||||
|
return gen_endif(self._cgen())
|
||||||
|
|
||||||
def docgen(self):
|
def docgen(self):
|
||||||
return docgen_ifcond(self.ifcond)
|
return docgen_ifcond(self.ifcond)
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,7 @@ This work is licensed under the terms of the GNU GPL, version 2.
|
||||||
|
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from .common import (
|
from .common import c_enum_const, c_name, mcgen
|
||||||
c_enum_const,
|
|
||||||
c_name,
|
|
||||||
gen_endif,
|
|
||||||
gen_if,
|
|
||||||
mcgen,
|
|
||||||
)
|
|
||||||
from .gen import QAPISchemaModularCVisitor, ifcontext
|
from .gen import QAPISchemaModularCVisitor, ifcontext
|
||||||
from .schema import (
|
from .schema import (
|
||||||
QAPISchema,
|
QAPISchema,
|
||||||
|
@ -51,13 +45,13 @@ const QEnumLookup %(c_name)s_lookup = {
|
||||||
''',
|
''',
|
||||||
c_name=c_name(name))
|
c_name=c_name(name))
|
||||||
for memb in members:
|
for memb in members:
|
||||||
ret += gen_if(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_if()
|
||||||
index = c_enum_const(name, memb.name, prefix)
|
index = c_enum_const(name, memb.name, prefix)
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
[%(index)s] = "%(name)s",
|
[%(index)s] = "%(name)s",
|
||||||
''',
|
''',
|
||||||
index=index, name=memb.name)
|
index=index, name=memb.name)
|
||||||
ret += gen_endif(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_endif()
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
},
|
},
|
||||||
|
@ -81,12 +75,12 @@ typedef enum %(c_name)s {
|
||||||
c_name=c_name(name))
|
c_name=c_name(name))
|
||||||
|
|
||||||
for memb in enum_members:
|
for memb in enum_members:
|
||||||
ret += gen_if(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_if()
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
%(c_enum)s,
|
%(c_enum)s,
|
||||||
''',
|
''',
|
||||||
c_enum=c_enum_const(name, memb.name, prefix))
|
c_enum=c_enum_const(name, memb.name, prefix))
|
||||||
ret += gen_endif(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_endif()
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
} %(c_name)s;
|
} %(c_name)s;
|
||||||
|
@ -126,7 +120,7 @@ struct %(c_name)s {
|
||||||
def gen_struct_members(members: List[QAPISchemaObjectTypeMember]) -> str:
|
def gen_struct_members(members: List[QAPISchemaObjectTypeMember]) -> str:
|
||||||
ret = ''
|
ret = ''
|
||||||
for memb in members:
|
for memb in members:
|
||||||
ret += gen_if(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_if()
|
||||||
if memb.optional:
|
if memb.optional:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
bool has_%(c_name)s;
|
bool has_%(c_name)s;
|
||||||
|
@ -136,7 +130,7 @@ def gen_struct_members(members: List[QAPISchemaObjectTypeMember]) -> str:
|
||||||
%(c_type)s %(c_name)s;
|
%(c_type)s %(c_name)s;
|
||||||
''',
|
''',
|
||||||
c_type=memb.type.c_type(), c_name=c_name(memb.name))
|
c_type=memb.type.c_type(), c_name=c_name(memb.name))
|
||||||
ret += gen_endif(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_endif()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,7 +153,7 @@ def gen_object(name: str, ifcond: QAPISchemaIfCond,
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
||||||
''')
|
''')
|
||||||
ret += gen_if(ifcond.cgen())
|
ret += ifcond.gen_if()
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
struct %(c_name)s {
|
struct %(c_name)s {
|
||||||
''',
|
''',
|
||||||
|
@ -193,7 +187,7 @@ struct %(c_name)s {
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
};
|
};
|
||||||
''')
|
''')
|
||||||
ret += gen_endif(ifcond.cgen())
|
ret += ifcond.gen_endif()
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -220,13 +214,13 @@ def gen_variants(variants: QAPISchemaVariants) -> str:
|
||||||
for var in variants.variants:
|
for var in variants.variants:
|
||||||
if var.type.name == 'q_empty':
|
if var.type.name == 'q_empty':
|
||||||
continue
|
continue
|
||||||
ret += gen_if(var.ifcond.cgen())
|
ret += var.ifcond.gen_if()
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
%(c_type)s %(c_name)s;
|
%(c_type)s %(c_name)s;
|
||||||
''',
|
''',
|
||||||
c_type=var.type.c_unboxed_type(),
|
c_type=var.type.c_unboxed_type(),
|
||||||
c_name=c_name(var.name))
|
c_name=c_name(var.name))
|
||||||
ret += gen_endif(var.ifcond.cgen())
|
ret += var.ifcond.gen_endif()
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
} u;
|
} u;
|
||||||
|
|
|
@ -18,8 +18,6 @@ from typing import List, Optional
|
||||||
from .common import (
|
from .common import (
|
||||||
c_enum_const,
|
c_enum_const,
|
||||||
c_name,
|
c_name,
|
||||||
gen_endif,
|
|
||||||
gen_if,
|
|
||||||
indent,
|
indent,
|
||||||
mcgen,
|
mcgen,
|
||||||
)
|
)
|
||||||
|
@ -79,7 +77,7 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||||
|
|
||||||
for memb in members:
|
for memb in members:
|
||||||
deprecated = 'deprecated' in [f.name for f in memb.features]
|
deprecated = 'deprecated' in [f.name for f in memb.features]
|
||||||
ret += gen_if(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_if()
|
||||||
if memb.optional:
|
if memb.optional:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
if (visit_optional(v, "%(name)s", &obj->has_%(c_name)s)) {
|
if (visit_optional(v, "%(name)s", &obj->has_%(c_name)s)) {
|
||||||
|
@ -112,7 +110,7 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
ret += gen_endif(memb.ifcond.cgen())
|
ret += memb.ifcond.gen_endif()
|
||||||
|
|
||||||
if variants:
|
if variants:
|
||||||
tag_member = variants.tag_member
|
tag_member = variants.tag_member
|
||||||
|
@ -126,7 +124,7 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||||
for var in variants.variants:
|
for var in variants.variants:
|
||||||
case_str = c_enum_const(tag_member.type.name, var.name,
|
case_str = c_enum_const(tag_member.type.name, var.name,
|
||||||
tag_member.type.prefix)
|
tag_member.type.prefix)
|
||||||
ret += gen_if(var.ifcond.cgen())
|
ret += var.ifcond.gen_if()
|
||||||
if var.type.name == 'q_empty':
|
if var.type.name == 'q_empty':
|
||||||
# valid variant and nothing to do
|
# valid variant and nothing to do
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
@ -142,7 +140,7 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||||
case=case_str,
|
case=case_str,
|
||||||
c_type=var.type.c_name(), c_name=c_name(var.name))
|
c_type=var.type.c_name(), c_name=c_name(var.name))
|
||||||
|
|
||||||
ret += gen_endif(var.ifcond.cgen())
|
ret += var.ifcond.gen_endif()
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
|
@ -228,7 +226,7 @@ bool visit_type_%(c_name)s(Visitor *v, const char *name,
|
||||||
c_name=c_name(name))
|
c_name=c_name(name))
|
||||||
|
|
||||||
for var in variants.variants:
|
for var in variants.variants:
|
||||||
ret += gen_if(var.ifcond.cgen())
|
ret += var.ifcond.gen_if()
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
case %(case)s:
|
case %(case)s:
|
||||||
''',
|
''',
|
||||||
|
@ -254,7 +252,7 @@ bool visit_type_%(c_name)s(Visitor *v, const char *name,
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
break;
|
break;
|
||||||
''')
|
''')
|
||||||
ret += gen_endif(var.ifcond.cgen())
|
ret += var.ifcond.gen_endif()
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
case QTYPE_NONE:
|
case QTYPE_NONE:
|
||||||
|
|
Loading…
Add table
Reference in a new issue