Code Review
/
apps
/
agl-service-can-low-level.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Better error messages for syntax errors in .options file
[apps/agl-service-can-low-level.git]
/
generator
/
nanopb_generator.py
diff --git
a/generator/nanopb_generator.py
b/generator/nanopb_generator.py
index
0d7be49
..
8260290
100755
(executable)
--- a/
generator/nanopb_generator.py
+++ b/
generator/nanopb_generator.py
@@
-1,7
+1,7
@@
#!/usr/bin/python
'''Generate header file for nanopb from a ProtoBuf FileDescriptorSet.'''
#!/usr/bin/python
'''Generate header file for nanopb from a ProtoBuf FileDescriptorSet.'''
-nanopb_version = "nanopb-0.3.
2
-dev"
+nanopb_version = "nanopb-0.3.
3
-dev"
import sys
import sys
@@
-587,6
+587,9
@@
class OneOf(Field):
self.name = oneof_desc.name
self.ctype = 'union'
self.fields = []
self.name = oneof_desc.name
self.ctype = 'union'
self.fields = []
+ self.allocation = 'ONEOF'
+ self.default = None
+ self.rules = 'ONEOF'
def add_field(self, field):
if field.allocation == 'CALLBACK':
def add_field(self, field):
if field.allocation == 'CALLBACK':
@@
-633,7
+636,6
@@
class OneOf(Field):
return '\n'.join([f.tags() for f in self.fields])
def pb_field_t(self, prev_field_name):
return '\n'.join([f.tags() for f in self.fields])
def pb_field_t(self, prev_field_name):
- prev_field_name = prev_field_name or self.name
result = ',\n'.join([f.pb_field_t(prev_field_name) for f in self.fields])
return result
result = ',\n'.join([f.pb_field_t(prev_field_name) for f in self.fields])
return result
@@
-641,7
+643,17
@@
class OneOf(Field):
return max([f.largest_field_value() for f in self.fields])
def encoded_size(self, allmsgs):
return max([f.largest_field_value() for f in self.fields])
def encoded_size(self, allmsgs):
- return max([f.encoded_size(allmsgs) for f in self.fields])
+ largest = EncodedSize(0)
+ for f in self.fields:
+ size = f.encoded_size(allmsgs)
+ if size is None:
+ return None
+ elif size.symbols:
+ return None # Cannot resolve maximum of symbols
+ elif size.value > largest.value:
+ largest = size
+
+ return largest
# ---------------------------------------------------------------------------
# Generation of messages (structures)
# ---------------------------------------------------------------------------
# Generation of messages (structures)
@@
-1114,14
+1126,28
@@
def read_options_file(infile):
[(namemask, options), ...]
'''
results = []
[(namemask, options), ...]
'''
results = []
- for
line in infile
:
+ for
i, line in enumerate(infile)
:
line = line.strip()
if not line or line.startswith('//') or line.startswith('#'):
continue
parts = line.split(None, 1)
line = line.strip()
if not line or line.startswith('//') or line.startswith('#'):
continue
parts = line.split(None, 1)
+
+ if len(parts) < 2:
+ sys.stderr.write("%s:%d: " % (infile.name, i + 1) +
+ "Option lines should have space between field name and options. " +
+ "Skipping line: '%s'\n" % line)
+ continue
+
opts = nanopb_pb2.NanoPBOptions()
opts = nanopb_pb2.NanoPBOptions()
- text_format.Merge(parts[1], opts)
+
+ try:
+ text_format.Merge(parts[1], opts)
+ except Exception, e:
+ sys.stderr.write("%s:%d: " % (infile.name, i + 1) +
+ "Unparseable option line: '%s'. " % line +
+ "Error: %s\n" % str(e))
+ continue
results.append((parts[0], opts))
return results
results.append((parts[0], opts))
return results