From 236d26308f499a5eead3645db079093c631c662d Mon Sep 17 00:00:00 2001 From: lisa neigut Date: Tue, 23 Jul 2019 18:39:42 -0500 Subject: [PATCH] bolt-gen: make optional 'assignable' fields work make assignable 'optional' fields work, add test for them --- tools/gen/impl_template | 2 +- tools/generate-bolts.py | 10 +++++----- tools/test/test_cases | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tools/gen/impl_template b/tools/gen/impl_template index 43779af80..43285265d 100644 --- a/tools/gen/impl_template +++ b/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 diff --git a/tools/generate-bolts.py b/tools/generate-bolts.py index 3e408c089..26db8519c 100755 --- a/tools/generate-bolts.py +++ b/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): diff --git a/tools/test/test_cases b/tools/test/test_cases index dae68bb14..39a5b8b44 100644 --- a/tools/test/test_cases +++ b/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