Browse Source

bolt-gen: make optional 'assignable' fields work

make assignable 'optional' fields work, add test for them
pull/2938/head
lisa neigut 5 years ago
committed by Rusty Russell
parent
commit
236d26308f
  1. 2
      tools/gen/impl_template
  2. 10
      tools/generate-bolts.py
  3. 2
      tools/test/test_cases

2
tools/gen/impl_template

@ -303,7 +303,7 @@ bool fromwire_${msg.name}(${'const tal_t *ctx, ' if msg.needs_context() else ''}
% if not varsized:
*${f.name} = tal(ctx, ${typename});
% endif
${fromwire_phrase(f, type_, varsized)}\
${'*' if f.type_obj.is_assignable() else ''}${fromwire_phrase(f, type_, varsized)}\
}
% endif ## End optional
% endif

10
tools/generate-bolts.py

@ -75,9 +75,6 @@ class Field(object):
def is_varlen(self):
return not self.count
def is_optional(self):
return self.is_optional
def is_extension(self):
return bool(self.extension_names)
@ -97,7 +94,10 @@ class Field(object):
if self.is_array():
return ', const {} {}[{}]'.format(type_name, self.name, self.count)
if self.type_obj.is_assignable() and not self.is_varlen():
return ', {} {}'.format(type_name, self.name)
name = self.name
if self.is_optional:
name = '*' + name
return ', {} {}'.format(type_name, name)
if self.is_varlen() and self.type_obj.is_varsize():
return ', const {} **{}'.format(type_name, self.name)
return ', const {} *{}'.format(type_name, self.name)
@ -145,7 +145,7 @@ class FieldSet(object):
return bool(self.len_fields)
def needs_context(self):
return any([field.needs_context() for field in self.fields.values()])
return any([field.needs_context() or field.is_optional for field in self.fields.values()])
class Type(FieldSet):

2
tools/test/test_cases

@ -31,6 +31,8 @@ msgdata,test_msg,test_enum,e:test_enum,
msgdata,test_msg,test_struct,test_short_id,
# test var-size struct
msgdata,test_msg,test_varsize_struct,test_features,
# test optional assignable
msgdata,test_msg,test_optional_assignable,?u32,
# test optional struct
msgdata,test_msg,test_optional_struct,?test_short_id,
# test optional var-size struct

Loading…
Cancel
Save