Fix encoded_size #defines for oneof messages.

The sizes are represented as EncodedSize() instances, which cause
max() operation to sort them by address instead of value. This caused
pretty much random item to be selected for the maximum.

Update issue 141
Status: FixedInGit
This commit is contained in:
Petteri Aimonen
2015-01-23 21:29:29 +02:00
parent 0286a0746a
commit d32d04ba10
4 changed files with 76 additions and 1 deletions

View File

@@ -641,7 +641,17 @@ class OneOf(Field):
return max([f.largest_field_value() for f in self.fields])
def encoded_size(self, allmsgs):
return max([f.encoded_size(allmsgs) for f in self.fields])
largest = EncodedSize(0)
for f in self.fields:
size = f.encoded_size(allmsgs)
if size is None:
return None
elif size.symbols:
return None # Cannot resolve maximum of symbols
elif size.value > largest.value:
largest = size
return largest
# ---------------------------------------------------------------------------
# Generation of messages (structures)