qapi/common.py: move build_params into gen.py
Including it in common.py creates a circular import dependency; schema relies on common, but common.build_params requires a type annotation from schema. To type this properly, it needs to be moved outside the cycle. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Cleber Rosa <crosa@redhat.com> Message-Id: <20201009161558.107041-18-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
1cc7398dfa
commit
e6a34cd7a4
@ -13,8 +13,13 @@ This work is licensed under the terms of the GNU GPL, version 2.
|
||||
See the COPYING file in the top-level directory.
|
||||
"""
|
||||
|
||||
from .common import build_params, c_name, mcgen
|
||||
from .gen import QAPIGenCCode, QAPISchemaModularCVisitor, ifcontext
|
||||
from .common import c_name, mcgen
|
||||
from .gen import (
|
||||
QAPIGenCCode,
|
||||
QAPISchemaModularCVisitor,
|
||||
build_params,
|
||||
ifcontext,
|
||||
)
|
||||
|
||||
|
||||
def gen_command_decl(name, arg_type, boxed, ret_type):
|
||||
|
@ -210,26 +210,3 @@ def gen_endif(ifcond: Sequence[str]) -> str:
|
||||
#endif /* %(cond)s */
|
||||
''', cond=ifc)
|
||||
return ret
|
||||
|
||||
|
||||
def build_params(arg_type,
|
||||
boxed: bool,
|
||||
extra: Optional[str] = None) -> str:
|
||||
ret = ''
|
||||
sep = ''
|
||||
if boxed:
|
||||
assert arg_type
|
||||
ret += '%s arg' % arg_type.c_param_type()
|
||||
sep = ', '
|
||||
elif arg_type:
|
||||
assert not arg_type.variants
|
||||
for memb in arg_type.members:
|
||||
ret += sep
|
||||
sep = ', '
|
||||
if memb.optional:
|
||||
ret += 'bool has_%s, ' % c_name(memb.name)
|
||||
ret += '%s %s' % (memb.type.c_param_type(),
|
||||
c_name(memb.name))
|
||||
if extra:
|
||||
ret += sep + extra
|
||||
return ret if ret else 'void'
|
||||
|
@ -12,13 +12,8 @@ This work is licensed under the terms of the GNU GPL, version 2.
|
||||
See the COPYING file in the top-level directory.
|
||||
"""
|
||||
|
||||
from .common import (
|
||||
build_params,
|
||||
c_enum_const,
|
||||
c_name,
|
||||
mcgen,
|
||||
)
|
||||
from .gen import QAPISchemaModularCVisitor, ifcontext
|
||||
from .common import c_enum_const, c_name, mcgen
|
||||
from .gen import QAPISchemaModularCVisitor, build_params, ifcontext
|
||||
from .schema import QAPISchemaEnumMember
|
||||
from .types import gen_enum, gen_enum_lookup
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# QAPI code generation
|
||||
#
|
||||
# Copyright (c) 2018-2019 Red Hat Inc.
|
||||
# Copyright (c) 2015-2019 Red Hat Inc.
|
||||
#
|
||||
# Authors:
|
||||
# Markus Armbruster <armbru@redhat.com>
|
||||
@ -15,16 +15,18 @@ from contextlib import contextmanager
|
||||
import errno
|
||||
import os
|
||||
import re
|
||||
from typing import Optional
|
||||
|
||||
from .common import (
|
||||
c_fname,
|
||||
c_name,
|
||||
gen_endif,
|
||||
gen_if,
|
||||
guardend,
|
||||
guardstart,
|
||||
mcgen,
|
||||
)
|
||||
from .schema import QAPISchemaVisitor
|
||||
from .schema import QAPISchemaObjectType, QAPISchemaVisitor
|
||||
|
||||
|
||||
class QAPIGen:
|
||||
@ -90,6 +92,29 @@ def _wrap_ifcond(ifcond, before, after):
|
||||
return out
|
||||
|
||||
|
||||
def build_params(arg_type: Optional[QAPISchemaObjectType],
|
||||
boxed: bool,
|
||||
extra: Optional[str] = None) -> str:
|
||||
ret = ''
|
||||
sep = ''
|
||||
if boxed:
|
||||
assert arg_type
|
||||
ret += '%s arg' % arg_type.c_param_type()
|
||||
sep = ', '
|
||||
elif arg_type:
|
||||
assert not arg_type.variants
|
||||
for memb in arg_type.members:
|
||||
ret += sep
|
||||
sep = ', '
|
||||
if memb.optional:
|
||||
ret += 'bool has_%s, ' % c_name(memb.name)
|
||||
ret += '%s %s' % (memb.type.c_param_type(),
|
||||
c_name(memb.name))
|
||||
if extra:
|
||||
ret += sep + extra
|
||||
return ret if ret else 'void'
|
||||
|
||||
|
||||
class QAPIGenCCode(QAPIGen):
|
||||
|
||||
def __init__(self, fname):
|
||||
|
Loading…
Reference in New Issue
Block a user