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();