|
@@ -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):
|