mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-23 17:14:22 +01:00
tools/generate-wire: no more lonely messages!
When we have only a single member in a TLV (e.g. an optional u64), wrapping it in a struct is awkward. This changes it to directly access those fields. This is not only more elegant (60 fewer lines), it would also be more cache friendly. That's right: cache hot singles! Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
neil saitug
parent
8d4abc1104
commit
b0c9059602
@@ -172,6 +172,12 @@ class FieldSet(object):
|
||||
def needs_context(self):
|
||||
return any([field.needs_context() or field.is_optional for field in self.fields.values()])
|
||||
|
||||
def singleton(self):
|
||||
"""Return the single message, if there's only one, otherwise None"""
|
||||
if len(self.fields) == 1:
|
||||
return next(iter(self.fields.values()))
|
||||
return None
|
||||
|
||||
|
||||
class Type(FieldSet):
|
||||
assignables = [
|
||||
@@ -480,8 +486,14 @@ class Master(object):
|
||||
unsorted.remove(s)
|
||||
return sorted_types
|
||||
|
||||
def tlv_messages(self):
|
||||
return [m for tlv in self.tlvs.values() for m in tlv.messages.values()]
|
||||
def tlv_structs(self):
|
||||
ret = []
|
||||
for tlv in self.tlvs.values():
|
||||
for v in tlv.messages.values():
|
||||
if not v.singleton():
|
||||
ret.append(v)
|
||||
|
||||
return ret
|
||||
|
||||
def find_template(self, options):
|
||||
dirpath = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -512,7 +524,7 @@ class Master(object):
|
||||
stuff['includes'] = self.inclusions
|
||||
stuff['enum_sets'] = enum_sets
|
||||
subtypes = self.get_ordered_subtypes()
|
||||
stuff['structs'] = subtypes + self.tlv_messages()
|
||||
stuff['structs'] = subtypes + self.tlv_structs()
|
||||
stuff['tlvs'] = self.tlvs
|
||||
|
||||
# We leave out extension messages in the printing pages. Any extension
|
||||
|
||||
Reference in New Issue
Block a user