mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-02 05:01:06 +00:00
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. Backports commit 14f00c6c492488381a513c3816b15794446231a0 from qemu
This commit is contained in:
parent
b239241e99
commit
825fb4835b
|
@ -68,7 +68,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 @@ struct %(c_name)s {
|
||||||
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:
|
||||||
|
@ -78,16 +78,16 @@ struct %(c_name)s {
|
||||||
/* 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):
|
||||||
c_type = c_name(name) + ' *'
|
c_type = c_name(name) + ' *'
|
||||||
|
@ -29,10 +29,10 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_type)sobj, Error **
|
||||||
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);
|
||||||
|
@ -40,18 +40,18 @@ static void visit_type_%(c_type)s_fields(Visitor *v, %(c_type)s *obj, Error **er
|
||||||
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)
|
||||||
|
@ -68,7 +68,7 @@ static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s *obj, Error **er
|
||||||
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('''
|
||||||
|
@ -107,7 +107,7 @@ static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s *obj, Error **er
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
# '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('''
|
||||||
|
@ -175,7 +175,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('''
|
||||||
|
|
||||||
|
@ -242,10 +242,10 @@ out:
|
||||||
|
|
||||||
|
|
||||||
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('''
|
||||||
|
|
|
@ -331,7 +331,7 @@ class QAPISchemaParser(object):
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
@ -360,11 +360,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
|
||||||
|
|
||||||
|
@ -571,14 +571,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_fields(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 "
|
||||||
|
@ -991,7 +991,7 @@ class QAPISchemaObjectType(QAPISchemaType):
|
||||||
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):
|
||||||
|
@ -1671,7 +1671,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:
|
||||||
|
|
Loading…
Reference in a new issue