Fix naming of enums when long_names=false.
Modify test case to check that options.pb.o compiles. Update issue 42 Status: FixedInGit Update issue 43 Status: FixedInGit
This commit is contained in:
@@ -73,6 +73,9 @@ class Names:
|
|||||||
else:
|
else:
|
||||||
raise ValueError("Name parts should be of type str")
|
raise ValueError("Name parts should be of type str")
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return isinstance(other, Names) and self.parts == other.parts
|
||||||
|
|
||||||
def names_from_type_name(type_name):
|
def names_from_type_name(type_name):
|
||||||
'''Parse Names() from FieldDescriptorProto type_name'''
|
'''Parse Names() from FieldDescriptorProto type_name'''
|
||||||
if type_name[0] != '.':
|
if type_name[0] != '.':
|
||||||
@@ -83,12 +86,15 @@ class Enum:
|
|||||||
def __init__(self, names, desc, enum_options):
|
def __init__(self, names, desc, enum_options):
|
||||||
'''desc is EnumDescriptorProto'''
|
'''desc is EnumDescriptorProto'''
|
||||||
|
|
||||||
if enum_options.long_names:
|
self.options = enum_options
|
||||||
self.names = names + desc.name
|
self.names = names + desc.name
|
||||||
else:
|
|
||||||
self.names = names
|
|
||||||
|
|
||||||
self.values = [(self.names + x.name, x.number) for x in desc.value]
|
if enum_options.long_names:
|
||||||
|
self.values = [(self.names + x.name, x.number) for x in desc.value]
|
||||||
|
else:
|
||||||
|
self.values = [(x.name, x.number) for x in desc.value]
|
||||||
|
|
||||||
|
self.value_longnames = [names + desc.name + x.name for x in desc.value]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
result = 'typedef enum _%s {\n' % self.names
|
result = 'typedef enum _%s {\n' % self.names
|
||||||
@@ -391,6 +397,15 @@ def parse_file(fdesc, file_options):
|
|||||||
for enum in message.enum_type:
|
for enum in message.enum_type:
|
||||||
enums.append(Enum(names, enum, message_options))
|
enums.append(Enum(names, enum, message_options))
|
||||||
|
|
||||||
|
# Fix field default values where enum short names are used.
|
||||||
|
for enum in enums:
|
||||||
|
if not enum.options.long_names:
|
||||||
|
for message in messages:
|
||||||
|
for field in message.fields:
|
||||||
|
if field.default in enum.value_longnames:
|
||||||
|
idx = enum.value_longnames.index(field.default)
|
||||||
|
field.default = enum.values[idx][0]
|
||||||
|
|
||||||
return enums, messages
|
return enums, messages
|
||||||
|
|
||||||
def toposort2(data):
|
def toposort2(data):
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ run_unittests: decode_unittests encode_unittests test_cxxcompile test_encode1 te
|
|||||||
|
|
||||||
./test_missing_fields
|
./test_missing_fields
|
||||||
|
|
||||||
test_options: options.pb.h options.expected
|
test_options: options.pb.h options.expected options.pb.o
|
||||||
cat options.expected | while read -r p; do \
|
cat options.expected | while read -r p; do \
|
||||||
if ! grep -q "$$p" $<; then \
|
if ! grep -q "$$p" $<; then \
|
||||||
echo Expected: "$$p"; \
|
echo Expected: "$$p"; \
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ char filesize\[20\];
|
|||||||
char msgsize\[30\];
|
char msgsize\[30\];
|
||||||
char fieldsize\[40\];
|
char fieldsize\[40\];
|
||||||
pb_callback_t int32_callback;
|
pb_callback_t int32_callback;
|
||||||
[^_]EnumValue1 = 1
|
\sEnumValue1 = 1
|
||||||
|
|||||||
@@ -36,4 +36,10 @@ enum Enum1
|
|||||||
{
|
{
|
||||||
option (nanopb_enumopt).long_names = false;
|
option (nanopb_enumopt).long_names = false;
|
||||||
EnumValue1 = 1;
|
EnumValue1 = 1;
|
||||||
|
EnumValue2 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EnumTest
|
||||||
|
{
|
||||||
|
required Enum1 field = 1 [default = EnumValue2];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user