Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nanopb/nanopb.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Patel <ripatel@jumptrading.com>2023-09-14 15:31:52 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2023-10-19 10:06:44 +0300
commit8163cd494b2b271ff111808e9b4077d74285f05a (patch)
tree7d0c5c3b43b68c8723da8354b5f60b5f74427262
parent09234696e0ef821432a8541b950e8866f0c61f8c (diff)
Fix submessages with different mangling rules
-rwxr-xr-xgenerator/nanopb_generator.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index d148640..93aebbd 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -584,7 +584,7 @@ class Field(ProtoElement):
self.callback_datatype = field_options.callback_datatype
self.math_include_required = False
self.sort_by_tag = field_options.sort_by_tag
-
+
if field_options.type == nanopb_pb2.FT_INLINE:
# Before nanopb-0.3.8, fixed length bytes arrays were specified
# by setting type to FT_INLINE. But to handle pointer typed fields,
@@ -1785,6 +1785,10 @@ class MangleNames:
if self.mangle_names == nanopb_pb2.M_FLATTEN:
return "." + typename.split(".")[-1]
+ canonical_mangled_typename = str(Names(typename.strip(".").split(".")))
+ if not canonical_mangled_typename.startswith(str(self.canonical_base) + "_"):
+ return typename
+
if self.strip_prefix is not None and typename.startswith(self.strip_prefix):
if self.replacement_prefix is not None:
return "." + self.replacement_prefix + typename[len(self.strip_prefix):]
@@ -1873,10 +1877,17 @@ class ProtoFile:
enum.protofile = other
for msg in other.messages:
+ canonical_mangled_typename = str(other.manglenames.unmangle(msg.name))
self.dependencies[str(msg.name)] = msg
- self.dependencies[str(other.manglenames.unmangle(msg.name))] = msg
+ self.dependencies[canonical_mangled_typename] = msg
msg.protofile = other
+ # Fix references to submessages with different mangling rules
+ for message in self.messages:
+ for field in message.all_fields():
+ if field.ctype == canonical_mangled_typename:
+ field.ctype = msg.name
+
# Fix field default values where enum short names are used.
for enum in other.enums:
if not enum.options.long_names: