Better error messages for syntax errors in .options file
[apps/agl-service-can-low-level.git] / generator / nanopb_generator.py
index 520824c..8260290 100755 (executable)
@@ -587,6 +587,9 @@ class OneOf(Field):
         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':
@@ -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):
-        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
 
@@ -1124,14 +1126,28 @@ def read_options_file(infile):
         [(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)
+        
+        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()
-        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