From f3c9e6053f1114af648e152f3686c1c09dd5466f Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 21 Dec 2019 12:04:35 +0100 Subject: [PATCH] ZoneCodeGenerator: Fix not finalizing DataTypes of typedefs when calculating sizes --- .../Domain/DataTypeWithMembers.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ZoneCodeGenerator/Domain/DataTypeWithMembers.cs b/src/ZoneCodeGenerator/Domain/DataTypeWithMembers.cs index effde128..df280160 100644 --- a/src/ZoneCodeGenerator/Domain/DataTypeWithMembers.cs +++ b/src/ZoneCodeGenerator/Domain/DataTypeWithMembers.cs @@ -38,10 +38,28 @@ namespace ZoneCodeGenerator.Domain private void CalculateProperties() { foreach (var member in Members - .Select(variable => variable.VariableType.Type) - .OfType()) + .Select(variable => variable.VariableType.Type)) { - member.FinalizeDataType(); + switch (member) + { + case DataTypeWithMembers dataTypeWithMembers: + dataTypeWithMembers.FinalizeDataType(); + break; + + case DataTypeTypedef typeDef: + { + while (typeDef.TypeDefinition.Type is DataTypeTypedef typeDef2) + { + typeDef = typeDef2; + } + + if(typeDef.TypeDefinition.Type is DataTypeWithMembers dataTypeWithMembers) + { + dataTypeWithMembers.FinalizeDataType(); + } + break; + } + } } alignment = Members.Select(variable => variable.Alignment).Max();