Robert Edmonds 956ea86712 GenerateStructDefinition(): Append oneof name when forcing enums to be int size
This commit fixes a problem identified in #251. When generating the
PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE directive at the end of the enum
values generated for a oneof, we inadvertently only included the
protobuf class name in the call to the directive. This breaks if there
is more than one oneof per protobuf class, which causes duplicate enum
names to be generated.

This issue is fixed by also appending the oneof's name to the protobuf
class name when generating the PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE
directive, which should cause unique enum names to be generated.

This changes the enum name that is generated, but these names are
implementation details since they are sentinel values that only exist to
force the compiler to size the enum type correctly.

(The test case for #220 is updated since that test relies on the
oneof implementation details in the code generator.)
2017-02-25 15:52:39 -05:00
..
2013-11-18 13:53:28 -05:00

There are two tests.

"test-generated-code" is a simple test that can easily be adapted.
"test-generated-code2" is a comprehensive test.

--

If you have a quick problem, hack at "test-generated-code";
but i don't want that file to be too hard to navigate,
so you must eventually add a test to "test-generated-code2".

I appreciate additional test cases!
Please submit them as issues in the tracking system, or email me.

--

Here are the files involved in each test:

test.proto                      Protobuf declarations for the simple test.
test.pb-c.c                     Protobuf-C generated code based on test.proto
test.pb-c.h                     Protobuf-C generated code based on test.proto

test-full.proto                 Protobuf declarations for the exhaustive test.
test-full.pb-c.c                Protobuf-C generated code based on test-full.proto
test-full.pb-c.h                Protobuf-C generated code based on test-full.proto
test-full.pb.cc                 Protobuf (C++) generated code based on test-full.proto
test-full.pb.h                  Protobuf (C++) generated code based on test-full.proto

generated-code/
   test-generated-code.c        Actual test code.
   test-generated-code          Test executable.

generated-code2/
   cxx-generate-packed-data.cc  C++ code to generated data to compare with C.
   cxx-generate-packed-data     Program whichs generates data (using C++ api)
   test-full-cxx-output.inc     Output of cxx-generate-packed-data.
   test-generated-code2.c       Actual test code.
   test-generated-code2         Test executable.