Always define enum long names so that cross-file references work.
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 3 Apr 2015 17:08:05 +0000 (20:08 +0300)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 3 Apr 2015 17:08:05 +0000 (20:08 +0300)
Update issue 118
Status: FixedInGit

generator/nanopb_generator.py
tests/regression/issue_118/SConscript [new file with mode: 0644]
tests/regression/issue_118/enumdef.proto [new file with mode: 0644]
tests/regression/issue_118/enumuse.proto [new file with mode: 0644]

index fc32e2c..eebe540 100755 (executable)
@@ -164,6 +164,13 @@ class Enum:
         result = 'typedef enum _%s {\n' % self.names
         result += ',\n'.join(["    %s = %d" % x for x in self.values])
         result += '\n} %s;' % self.names
         result = 'typedef enum _%s {\n' % self.names
         result += ',\n'.join(["    %s = %d" % x for x in self.values])
         result += '\n} %s;' % self.names
+        
+        if not self.options.long_names:
+            # Define the long names always so that enum value references
+            # from other files work properly.
+            for i, x in enumerate(self.values):
+                result += '\n#define %s %s' % (self.value_longnames[i], x[0])
+        
         return result
 
 class Field:
         return result
 
 class Field:
diff --git a/tests/regression/issue_118/SConscript b/tests/regression/issue_118/SConscript
new file mode 100644 (file)
index 0000000..c90e849
--- /dev/null
@@ -0,0 +1,11 @@
+# Regression test for Issue 118: Short enum names in imported proto files are not honoured
+
+Import("env")
+env.Append(PROTOCPATH = "#regression/issue_118")
+
+env.NanopbProto("enumdef")
+env.Object('enumdef.pb.c')
+
+env.NanopbProto(["enumuse", "enumdef.proto"])
+env.Object('enumuse.pb.c')
+
diff --git a/tests/regression/issue_118/enumdef.proto b/tests/regression/issue_118/enumdef.proto
new file mode 100644 (file)
index 0000000..830d298
--- /dev/null
@@ -0,0 +1,6 @@
+import 'nanopb.proto';
+
+enum MyEnum {
+       option (nanopb_enumopt).long_names = false;
+       FOOBAR = 1;
+}
diff --git a/tests/regression/issue_118/enumuse.proto b/tests/regression/issue_118/enumuse.proto
new file mode 100644 (file)
index 0000000..d778fb8
--- /dev/null
@@ -0,0 +1,5 @@
+import 'enumdef.proto';
+
+message MyMessage {
+       required MyEnum myenum = 1 [default = FOOBAR];
+}