mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
generate-wire.py: allow comments.
We emit them into the generated code at appropriate points, but it would be better if we simply preserved the order they were given in. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -9,8 +9,9 @@ import re
|
|||||||
Enumtype = namedtuple('Enumtype', ['name', 'value'])
|
Enumtype = namedtuple('Enumtype', ['name', 'value'])
|
||||||
|
|
||||||
class Field(object):
|
class Field(object):
|
||||||
def __init__(self,message,name,size):
|
def __init__(self,message,name,size,comments):
|
||||||
self.message = message
|
self.message = message
|
||||||
|
self.comments = comments
|
||||||
self.name = name.replace('-', '_')
|
self.name = name.replace('-', '_')
|
||||||
self.is_len_var = False
|
self.is_len_var = False
|
||||||
(self.typename, self.basesize) = Field._guess_type(message,self.name,size)
|
(self.typename, self.basesize) = Field._guess_type(message,self.name,size)
|
||||||
@@ -105,9 +106,10 @@ class Field(object):
|
|||||||
raise ValueError('Unknown size {} for {}'.format(sizestr,fieldname))
|
raise ValueError('Unknown size {} for {}'.format(sizestr,fieldname))
|
||||||
|
|
||||||
class Message(object):
|
class Message(object):
|
||||||
def __init__(self,name,enum):
|
def __init__(self,name,enum,comments):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.enum = enum
|
self.enum = enum
|
||||||
|
self.comments = comments
|
||||||
self.fields = []
|
self.fields = []
|
||||||
self.has_variable_fields = False
|
self.has_variable_fields = False
|
||||||
|
|
||||||
@@ -177,6 +179,9 @@ class Message(object):
|
|||||||
if f.typename.startswith('struct '):
|
if f.typename.startswith('struct '):
|
||||||
basetype=f.typename[7:]
|
basetype=f.typename[7:]
|
||||||
|
|
||||||
|
for c in f.comments:
|
||||||
|
print('\t/*{} */'.format(c))
|
||||||
|
|
||||||
if f.is_padding():
|
if f.is_padding():
|
||||||
print('\tfromwire_pad(&cursor, plen, {});'
|
print('\tfromwire_pad(&cursor, plen, {});'
|
||||||
.format(f.num_elems))
|
.format(f.num_elems))
|
||||||
@@ -238,6 +243,9 @@ class Message(object):
|
|||||||
if f.typename.startswith('struct '):
|
if f.typename.startswith('struct '):
|
||||||
basetype=f.typename[7:]
|
basetype=f.typename[7:]
|
||||||
|
|
||||||
|
for c in f.comments:
|
||||||
|
print('\t/*{} */'.format(c))
|
||||||
|
|
||||||
if f.is_padding():
|
if f.is_padding():
|
||||||
print('\ttowire_pad(&p, {});'
|
print('\ttowire_pad(&p, {});'
|
||||||
.format(f.num_elems))
|
.format(f.num_elems))
|
||||||
@@ -280,24 +288,37 @@ else:
|
|||||||
|
|
||||||
# Maps message names to messages
|
# Maps message names to messages
|
||||||
messages = { }
|
messages = { }
|
||||||
|
comments = []
|
||||||
|
|
||||||
# Read csv lines. Single comma is the message values, more is offset/len.
|
# Read csv lines. Single comma is the message values, more is offset/len.
|
||||||
for line in fileinput.input(args[2:]):
|
for line in fileinput.input(args[2:]):
|
||||||
parts = line.rstrip().split(',')
|
by_comments = line.rstrip().split('#')
|
||||||
|
|
||||||
|
# Emit a comment if they included one
|
||||||
|
if by_comments[1:]:
|
||||||
|
comments.append(' '.join(by_comments[1:]))
|
||||||
|
|
||||||
|
parts = by_comments[0].split(',')
|
||||||
|
if parts == ['']:
|
||||||
|
continue
|
||||||
|
|
||||||
if len(parts) == 2:
|
if len(parts) == 2:
|
||||||
# eg commit_sig,132
|
# eg commit_sig,132
|
||||||
messages[parts[0]] = Message(parts[0],Enumtype("WIRE_" + parts[0].upper(), int(parts[1])))
|
messages[parts[0]] = Message(parts[0],Enumtype("WIRE_" + parts[0].upper(), int(parts[1])),comments)
|
||||||
|
comments=[]
|
||||||
else:
|
else:
|
||||||
# eg commit_sig,0,channel-id,8
|
# eg commit_sig,0,channel-id,8
|
||||||
if not parts[0] in messages:
|
if not parts[0] in messages:
|
||||||
messages[parts[0]] = Message(parts[0],None)
|
messages[parts[0]] = Message(parts[0],None,[])
|
||||||
messages[parts[0]].addField(Field(parts[0], parts[2], parts[3]))
|
messages[parts[0]].addField(Field(parts[0], parts[2], parts[3], comments))
|
||||||
|
comments=[]
|
||||||
|
|
||||||
if options.output_header:
|
if options.output_header:
|
||||||
# Dump out enum, sorted by value order.
|
# Dump out enum, sorted by value order.
|
||||||
print('enum {} {{'.format(args[1]))
|
print('enum {} {{'.format(args[1]))
|
||||||
for m in sorted([x for x in messages.values() if x.enum is not None],key=lambda x:x.enum.value):
|
for m in sorted([x for x in messages.values() if x.enum is not None],key=lambda x:x.enum.value):
|
||||||
|
for c in m.comments:
|
||||||
|
print('\t/*{} */'.format(c))
|
||||||
print('\t{} = {},'.format(m.enum.name, m.enum.value))
|
print('\t{} = {},'.format(m.enum.name, m.enum.value))
|
||||||
print('};')
|
print('};')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user