Provide comments about uncalculable message sizes (issue #195)
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 4 Mar 2016 15:38:47 +0000 (17:38 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 4 Mar 2016 15:39:06 +0000 (17:39 +0200)
generator/nanopb_generator.py
tests/regression/issue_195/SConscript [new file with mode: 0644]
tests/regression/issue_195/test.expected [new file with mode: 0644]
tests/regression/issue_195/test.proto [new file with mode: 0644]

index 357350f..501affa 100755 (executable)
@@ -1119,9 +1119,11 @@ class ProtoFile:
             yield '/* Maximum encoded size of messages (where known) */\n'
             for msg in self.messages:
                 msize = msg.encoded_size(self.dependencies)
+                identifier = '%s_size' % msg.name
                 if msize is not None:
-                    identifier = '%s_size' % msg.name
                     yield '#define %-40s %s\n' % (identifier, msize)
+                else:
+                    yield '/* %s depends on runtime parameters */\n' % identifier
             yield '\n'
 
             yield '/* Message IDs (where set with "msgid" option) */\n'
diff --git a/tests/regression/issue_195/SConscript b/tests/regression/issue_195/SConscript
new file mode 100644 (file)
index 0000000..78326d3
--- /dev/null
@@ -0,0 +1,10 @@
+# Regression test for Issue 195: Message size not calculated if a submessage includes 
+# bytes. Basically a non-working #define being generated.
+
+Import("env")
+
+env.NanopbProto(["test"])
+env.Object('test.pb.c')
+
+env.Match(['test.pb.h', 'test.expected'])
+
diff --git a/tests/regression/issue_195/test.expected b/tests/regression/issue_195/test.expected
new file mode 100644 (file)
index 0000000..83ea7ab
--- /dev/null
@@ -0,0 +1 @@
+/\* TestMessage_size depends
diff --git a/tests/regression/issue_195/test.proto b/tests/regression/issue_195/test.proto
new file mode 100644 (file)
index 0000000..7a77d69
--- /dev/null
@@ -0,0 +1,8 @@
+message TestMessage {
+    required uint32 id = 1;
+    required bytes payload = 2;
+}
+message EncapsulatedMessage {
+    required uint32 id = 1;
+    required TestMessage test = 2;
+}