Skip to content
Snippets Groups Projects
Commit e6a34cd7 authored by John Snow's avatar John Snow Committed by Markus Armbruster
Browse files

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: default avatarJohn Snow <jsnow@redhat.com>
Reviewed-by: default avatarEduardo Habkost <ehabkost@redhat.com>
Reviewed-by: default avatarCleber Rosa <crosa@redhat.com>
Message-Id: <20201009161558.107041-18-jsnow@redhat.com>
Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 1cc7398d
No related branches found
No related tags found
No related merge requests found
......@@ -13,8 +13,13 @@
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 @@
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 @@
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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment