mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 06:41:44 +01:00
bolt-gen: make optional 'assignable' fields work
make assignable 'optional' fields work, add test for them
This commit is contained in:
parent
ff82c918a5
commit
236d26308f
3 changed files with 8 additions and 6 deletions
|
@ -303,7 +303,7 @@ bool fromwire_${msg.name}(${'const tal_t *ctx, ' if msg.needs_context() else ''}
|
||||||
% if not varsized:
|
% if not varsized:
|
||||||
*${f.name} = tal(ctx, ${typename});
|
*${f.name} = tal(ctx, ${typename});
|
||||||
% endif
|
% endif
|
||||||
${fromwire_phrase(f, type_, varsized)}\
|
${'*' if f.type_obj.is_assignable() else ''}${fromwire_phrase(f, type_, varsized)}\
|
||||||
}
|
}
|
||||||
% endif ## End optional
|
% endif ## End optional
|
||||||
% endif
|
% endif
|
||||||
|
|
|
@ -75,9 +75,6 @@ class Field(object):
|
||||||
def is_varlen(self):
|
def is_varlen(self):
|
||||||
return not self.count
|
return not self.count
|
||||||
|
|
||||||
def is_optional(self):
|
|
||||||
return self.is_optional
|
|
||||||
|
|
||||||
def is_extension(self):
|
def is_extension(self):
|
||||||
return bool(self.extension_names)
|
return bool(self.extension_names)
|
||||||
|
|
||||||
|
@ -97,7 +94,10 @@ class Field(object):
|
||||||
if self.is_array():
|
if self.is_array():
|
||||||
return ', const {} {}[{}]'.format(type_name, self.name, self.count)
|
return ', const {} {}[{}]'.format(type_name, self.name, self.count)
|
||||||
if self.type_obj.is_assignable() and not self.is_varlen():
|
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():
|
if self.is_varlen() and self.type_obj.is_varsize():
|
||||||
return ', const {} **{}'.format(type_name, self.name)
|
return ', const {} **{}'.format(type_name, self.name)
|
||||||
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)
|
return bool(self.len_fields)
|
||||||
|
|
||||||
def needs_context(self):
|
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):
|
class Type(FieldSet):
|
||||||
|
|
|
@ -31,6 +31,8 @@ msgdata,test_msg,test_enum,e:test_enum,
|
||||||
msgdata,test_msg,test_struct,test_short_id,
|
msgdata,test_msg,test_struct,test_short_id,
|
||||||
# test var-size struct
|
# test var-size struct
|
||||||
msgdata,test_msg,test_varsize_struct,test_features,
|
msgdata,test_msg,test_varsize_struct,test_features,
|
||||||
|
# test optional assignable
|
||||||
|
msgdata,test_msg,test_optional_assignable,?u32,
|
||||||
# test optional struct
|
# test optional struct
|
||||||
msgdata,test_msg,test_optional_struct,?test_short_id,
|
msgdata,test_msg,test_optional_struct,?test_short_id,
|
||||||
# test optional var-size struct
|
# test optional var-size struct
|
||||||
|
|
Loading…
Add table
Reference in a new issue