mirror of https://gitee.com/openkylin/qemu.git
qapi: Rename 'fields' to 'members' in generator
C types and JSON objects don't have fields, but members. We shouldn't gratuitously invent terminology. This patch is a strict renaming of generator code internals (including testsuite comments), before later patches rename C interfaces. No change to generated code with this patch. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1457021813-10704-2-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
96a1616c85
commit
14f00c6c49
|
@ -111,7 +111,7 @@ def gen_marshal_input_visit(arg_type, dealloc=False):
|
||||||
v = qmp_input_get_visitor(qiv);
|
v = qmp_input_get_visitor(qiv);
|
||||||
''')
|
''')
|
||||||
|
|
||||||
ret += gen_visit_fields(arg_type.members, skiperr=dealloc)
|
ret += gen_visit_members(arg_type.members, skiperr=dealloc)
|
||||||
|
|
||||||
if dealloc:
|
if dealloc:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
@ -175,7 +175,7 @@ def gen_marshal(name, arg_type, ret_type):
|
||||||
ret += gen_marshal_input_visit(arg_type)
|
ret += gen_marshal_input_visit(arg_type)
|
||||||
ret += gen_call(name, arg_type, ret_type)
|
ret += gen_call(name, arg_type, ret_type)
|
||||||
|
|
||||||
# 'goto out' produced by gen_marshal_input_visit->gen_visit_fields()
|
# 'goto out' produced by gen_marshal_input_visit->gen_visit_members()
|
||||||
# for each arg_type member, and by gen_call() for ret_type
|
# for each arg_type member, and by gen_call() for ret_type
|
||||||
if (arg_type and arg_type.members) or ret_type:
|
if (arg_type and arg_type.members) or ret_type:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
|
@ -67,7 +67,7 @@ def gen_event_send(name, arg_type):
|
||||||
''',
|
''',
|
||||||
name=name)
|
name=name)
|
||||||
ret += gen_err_check()
|
ret += gen_err_check()
|
||||||
ret += gen_visit_fields(arg_type.members, need_cast=True,
|
ret += gen_visit_members(arg_type.members, need_cast=True,
|
||||||
label='out_obj')
|
label='out_obj')
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
out_obj:
|
out_obj:
|
||||||
|
|
|
@ -38,7 +38,7 @@ def gen_array(name, element_type):
|
||||||
c_name=c_name(name), c_type=element_type.c_type())
|
c_name=c_name(name), c_type=element_type.c_type())
|
||||||
|
|
||||||
|
|
||||||
def gen_struct_fields(members):
|
def gen_struct_members(members):
|
||||||
ret = ''
|
ret = ''
|
||||||
for memb in members:
|
for memb in members:
|
||||||
if memb.optional:
|
if memb.optional:
|
||||||
|
@ -77,16 +77,16 @@ def gen_object(name, base, members, variants):
|
||||||
/* Members inherited from %(c_name)s: */
|
/* Members inherited from %(c_name)s: */
|
||||||
''',
|
''',
|
||||||
c_name=base.c_name())
|
c_name=base.c_name())
|
||||||
ret += gen_struct_fields(base.members)
|
ret += gen_struct_members(base.members)
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
/* Own members: */
|
/* Own members: */
|
||||||
''')
|
''')
|
||||||
ret += gen_struct_fields(members)
|
ret += gen_struct_members(members)
|
||||||
|
|
||||||
if variants:
|
if variants:
|
||||||
ret += gen_variants(variants)
|
ret += gen_variants(variants)
|
||||||
|
|
||||||
# Make sure that all structs have at least one field; this avoids
|
# Make sure that all structs have at least one member; this avoids
|
||||||
# potential issues with attempting to malloc space for zero-length
|
# potential issues with attempting to malloc space for zero-length
|
||||||
# structs in C, and also incompatibility with C++ (where an empty
|
# structs in C, and also incompatibility with C++ (where an empty
|
||||||
# struct is size 1).
|
# struct is size 1).
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
from qapi import *
|
from qapi import *
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# visit_type_FOO_fields() is always emitted; track if a forward declaration
|
# visit_type_FOO_members() is always emitted; track if a forward declaration
|
||||||
# or implementation has already been output.
|
# or implementation has already been output.
|
||||||
struct_fields_seen = set()
|
object_members_seen = set()
|
||||||
|
|
||||||
|
|
||||||
def gen_visit_decl(name, scalar=False):
|
def gen_visit_decl(name, scalar=False):
|
||||||
|
@ -30,10 +30,10 @@ def gen_visit_decl(name, scalar=False):
|
||||||
c_name=c_name(name), c_type=c_type)
|
c_name=c_name(name), c_type=c_type)
|
||||||
|
|
||||||
|
|
||||||
def gen_visit_fields_decl(typ):
|
def gen_visit_members_decl(typ):
|
||||||
if typ.name in struct_fields_seen:
|
if typ.name in object_members_seen:
|
||||||
return ''
|
return ''
|
||||||
struct_fields_seen.add(typ.name)
|
object_members_seen.add(typ.name)
|
||||||
return mcgen('''
|
return mcgen('''
|
||||||
|
|
||||||
static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s *obj, Error **errp);
|
static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s *obj, Error **errp);
|
||||||
|
@ -41,18 +41,18 @@ def gen_visit_fields_decl(typ):
|
||||||
c_type=typ.c_name())
|
c_type=typ.c_name())
|
||||||
|
|
||||||
|
|
||||||
def gen_visit_struct_fields(name, base, members, variants):
|
def gen_visit_object_members(name, base, members, variants):
|
||||||
ret = ''
|
ret = ''
|
||||||
|
|
||||||
if base:
|
if base:
|
||||||
ret += gen_visit_fields_decl(base)
|
ret += gen_visit_members_decl(base)
|
||||||
if variants:
|
if variants:
|
||||||
for var in variants.variants:
|
for var in variants.variants:
|
||||||
# Ugly special case for simple union TODO get rid of it
|
# Ugly special case for simple union TODO get rid of it
|
||||||
if not var.simple_union_type():
|
if not var.simple_union_type():
|
||||||
ret += gen_visit_fields_decl(var.type)
|
ret += gen_visit_members_decl(var.type)
|
||||||
|
|
||||||
struct_fields_seen.add(name)
|
object_members_seen.add(name)
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
||||||
static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s *obj, Error **errp)
|
static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||||
|
@ -69,7 +69,7 @@ def gen_visit_struct_fields(name, base, members, variants):
|
||||||
c_type=base.c_name())
|
c_type=base.c_name())
|
||||||
ret += gen_err_check()
|
ret += gen_err_check()
|
||||||
|
|
||||||
ret += gen_visit_fields(members, prefix='obj->')
|
ret += gen_visit_members(members, prefix='obj->')
|
||||||
|
|
||||||
if variants:
|
if variants:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
@ -108,7 +108,7 @@ def gen_visit_struct_fields(name, base, members, variants):
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
# 'goto out' produced for base, by gen_visit_fields() for each member,
|
# 'goto out' produced for base, by gen_visit_members() for each member,
|
||||||
# and if variants were present
|
# and if variants were present
|
||||||
if base or members or variants:
|
if base or members or variants:
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
@ -174,7 +174,7 @@ def gen_visit_alternate(name, variants):
|
||||||
if var.type.alternate_qtype() == 'QTYPE_QINT':
|
if var.type.alternate_qtype() == 'QTYPE_QINT':
|
||||||
promote_int = 'false'
|
promote_int = 'false'
|
||||||
if isinstance(var.type, QAPISchemaObjectType):
|
if isinstance(var.type, QAPISchemaObjectType):
|
||||||
ret += gen_visit_fields_decl(var.type)
|
ret += gen_visit_members_decl(var.type)
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
||||||
|
@ -235,10 +235,10 @@ def gen_visit_alternate(name, variants):
|
||||||
|
|
||||||
|
|
||||||
def gen_visit_object(name, base, members, variants):
|
def gen_visit_object(name, base, members, variants):
|
||||||
ret = gen_visit_struct_fields(name, base, members, variants)
|
ret = gen_visit_object_members(name, base, members, variants)
|
||||||
|
|
||||||
# FIXME: if *obj is NULL on entry, and visit_start_struct() assigns to
|
# FIXME: if *obj is NULL on entry, and visit_start_struct() assigns to
|
||||||
# *obj, but then visit_type_FOO_fields() fails, we should clean up *obj
|
# *obj, but then visit_type_FOO_members() fails, we should clean up *obj
|
||||||
# rather than leaving it non-NULL. As currently written, the caller must
|
# rather than leaving it non-NULL. As currently written, the caller must
|
||||||
# call qapi_free_FOO() to avoid a memory leak of the partial FOO.
|
# call qapi_free_FOO() to avoid a memory leak of the partial FOO.
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
|
@ -326,7 +326,7 @@ def get_expr(self, nested):
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
def find_base_fields(base):
|
def find_base_members(base):
|
||||||
base_struct_define = find_struct(base)
|
base_struct_define = find_struct(base)
|
||||||
if not base_struct_define:
|
if not base_struct_define:
|
||||||
return None
|
return None
|
||||||
|
@ -355,11 +355,11 @@ def discriminator_find_enum_define(expr):
|
||||||
if not (discriminator and base):
|
if not (discriminator and base):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
base_fields = find_base_fields(base)
|
base_members = find_base_members(base)
|
||||||
if not base_fields:
|
if not base_members:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
discriminator_type = base_fields.get(discriminator)
|
discriminator_type = base_members.get(discriminator)
|
||||||
if not discriminator_type:
|
if not discriminator_type:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -567,14 +567,14 @@ def check_union(expr, expr_info):
|
||||||
raise QAPIExprError(expr_info,
|
raise QAPIExprError(expr_info,
|
||||||
"Flat union '%s' must have a base"
|
"Flat union '%s' must have a base"
|
||||||
% name)
|
% name)
|
||||||
base_fields = find_base_fields(base)
|
base_members = find_base_members(base)
|
||||||
assert base_fields
|
assert base_members
|
||||||
|
|
||||||
# The value of member 'discriminator' must name a non-optional
|
# The value of member 'discriminator' must name a non-optional
|
||||||
# member of the base struct.
|
# member of the base struct.
|
||||||
check_name(expr_info, "Discriminator of flat union '%s'" % name,
|
check_name(expr_info, "Discriminator of flat union '%s'" % name,
|
||||||
discriminator)
|
discriminator)
|
||||||
discriminator_type = base_fields.get(discriminator)
|
discriminator_type = base_members.get(discriminator)
|
||||||
if not discriminator_type:
|
if not discriminator_type:
|
||||||
raise QAPIExprError(expr_info,
|
raise QAPIExprError(expr_info,
|
||||||
"Discriminator '%s' is not a member of base "
|
"Discriminator '%s' is not a member of base "
|
||||||
|
@ -969,7 +969,7 @@ def check(self, schema):
|
||||||
assert self.variants.tag_member in self.members
|
assert self.variants.tag_member in self.members
|
||||||
self.variants.check_clash(schema, self.info, seen)
|
self.variants.check_clash(schema, self.info, seen)
|
||||||
|
|
||||||
# Check that the members of this type do not cause duplicate JSON fields,
|
# Check that the members of this type do not cause duplicate JSON members,
|
||||||
# and update seen to track the members seen so far. Report any errors
|
# and update seen to track the members seen so far. Report any errors
|
||||||
# on behalf of info, which is not necessarily self.info
|
# on behalf of info, which is not necessarily self.info
|
||||||
def check_clash(self, schema, info, seen):
|
def check_clash(self, schema, info, seen):
|
||||||
|
@ -1647,7 +1647,7 @@ def gen_err_check(label='out', skiperr=False):
|
||||||
label=label)
|
label=label)
|
||||||
|
|
||||||
|
|
||||||
def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False,
|
def gen_visit_members(members, prefix='', need_cast=False, skiperr=False,
|
||||||
label='out'):
|
label='out'):
|
||||||
ret = ''
|
ret = ''
|
||||||
if skiperr:
|
if skiperr:
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
'base': 'UserDefZero',
|
'base': 'UserDefZero',
|
||||||
'data': { 'string': 'str', 'enum1': 'QEnumTwo' } }
|
'data': { 'string': 'str', 'enum1': 'QEnumTwo' } }
|
||||||
|
|
||||||
# this variant of UserDefFlatUnion defaults to a union that uses fields with
|
# this variant of UserDefFlatUnion defaults to a union that uses members with
|
||||||
# allocated types to test corner cases in the cleanup/dealloc visitor
|
# allocated types to test corner cases in the cleanup/dealloc visitor
|
||||||
{ 'union': 'UserDefFlatUnion2',
|
{ 'union': 'UserDefFlatUnion2',
|
||||||
'base': 'UserDefUnionBase2',
|
'base': 'UserDefUnionBase2',
|
||||||
|
|
Loading…
Reference in New Issue