tlv: consolidate basetype parsing

clean up basetype parsing code a bit
This commit is contained in:
lisa neigut 2019-03-20 11:49:25 -07:00 committed by Rusty Russell
parent 6f2e70a6ac
commit 9a23a354fd

View File

@ -53,6 +53,14 @@ class FieldType(object):
def has_array_helper(self):
return self.name in ['u8']
def base(self):
basetype = self.name
if basetype.startswith('struct '):
basetype = basetype[7:]
elif basetype.startswith('enum '):
basetype = basetype[5:]
return basetype
# Returns base size
@staticmethod
def _typesize(typename):
@ -171,14 +179,6 @@ class Field(object):
# Real typename.
self.fieldtype = FieldType(size)
def basetype(self):
base = self.fieldtype.name
if base.startswith('struct '):
base = base[7:]
elif base.startswith('enum '):
base = base[5:]
return base
def is_padding(self):
return self.name.startswith('pad')
@ -378,7 +378,7 @@ class Message(object):
if field.is_variable_size():
self.checkLenField(field)
self.has_variable_fields = True
elif field.basetype() in varlen_structs or field.optional:
elif field.fieldtype.base() in varlen_structs or field.optional:
self.has_variable_fields = True
self.fields.append(field)
@ -409,7 +409,7 @@ class Message(object):
fields = ['\t{} {};\n'.format(f.fieldtype.name, f.name) for f in self.fields if f.is_len_var]
subcalls = CCode()
for f in self.fields:
basetype = f.basetype()
basetype = f.fieldtype.base()
if f.is_tlv:
raise TypeError('Nested TLVs arent allowed!!')
elif f.optional:
@ -482,7 +482,7 @@ class Message(object):
if f.needs_ptr_to_ptr():
ptrs += '*'
# If each type is a variable length, we need a ptr to that.
if f.basetype() in varlen_structs:
if f.fieldtype.base() in varlen_structs:
ptrs += '*'
args.append(', {} {}{}'.format(f.fieldtype.name, ptrs, f.name))
@ -492,7 +492,7 @@ class Message(object):
subcalls = CCode()
for f in self.fields:
basetype = f.basetype()
basetype = f.fieldtype.base()
for c in f.comments:
subcalls.append('/*{} */'.format(c))
@ -591,12 +591,7 @@ class Message(object):
subcalls = CCode()
for f in self.fields:
basetype = f.fieldtype.name
if basetype.startswith('struct '):
basetype = basetype[7:]
elif basetype.startswith('enum '):
basetype = basetype[5:]
basetype = f.fieldtype.base()
for c in f.comments:
subcalls.append('/*{} */'.format(c))
@ -632,7 +627,7 @@ class Message(object):
args.append(', const struct _{} *{}'.format(f.name, f.name))
elif f.is_assignable():
args.append(', {} {}'.format(f.fieldtype.name, f.name))
elif f.is_variable_size() and f.basetype() in varlen_structs:
elif f.is_variable_size() and f.fieldtype.base() in varlen_structs:
args.append(', const {} **{}'.format(f.fieldtype.name, f.name))
else:
args.append(', const {} *{}'.format(f.fieldtype.name, f.name))
@ -651,11 +646,7 @@ class Message(object):
subcalls = CCode()
for f in self.fields:
basetype = f.fieldtype.name
if basetype.startswith('struct '):
basetype = basetype[7:]
elif basetype.startswith('enum '):
basetype = basetype[5:]
basetype = f.fieldtype.base()
for c in f.comments:
subcalls.append('/*{} */'.format(c))
@ -735,7 +726,7 @@ class Message(object):
subcalls = CCode()
for f in self.fields:
basetype = f.basetype()
basetype = f.fieldtype.base()
for c in f.comments:
subcalls.append('/*{} */'.format(c))