mirror of
https://github.com/protobuf-c/protobuf-c.git
synced 2024-12-26 21:04:23 +08:00
956ea86712
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.)
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.