From 2840489a3896ee729d11690e05b0bc0304cf0669 Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Wed, 14 Jan 2026 22:42:43 +0000 Subject: [PATCH] fix: only fill used union members when loading --- .../Generating/Templates/ZoneLoadTemplate.cpp | 48 +++++++------------ 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp index 7d04375a..cd8c10e6 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp @@ -596,7 +596,7 @@ namespace { const MemberComputations computations(&member); - if (computations.IsFirstUsedMember(false)) + if (computations.IsFirstUsedMember(true)) { if (member.m_condition) { @@ -614,7 +614,7 @@ namespace PrintFillStruct_Member(structInfo, member, DeclarationModifierComputations(&member), 0u); } } - else if (computations.IsLastUsedMember(false)) + else if (computations.IsLastUsedMember(true)) { if (member.m_condition) { @@ -668,35 +668,7 @@ namespace } const auto* dynamicMember = StructureComputations(&info).GetDynamicMember(); - - if (dynamicMember) - { - if (info.m_definition->GetType() == DataDefinitionType::UNION) - { - for (const auto& member : info.m_ordered_members) - { - const MemberComputations computations(member.get()); - if (computations.ShouldIgnore()) - continue; - - PrintFillStruct_Member_Condition_Union(info, *member); - } - } - else - { - for (const auto& member : info.m_ordered_members) - { - const MemberComputations computations(member.get()); - if (computations.ShouldIgnore() || member.get() == dynamicMember) - continue; - - PrintFillStruct_Member(info, *member, DeclarationModifierComputations(member.get()), 0u); - } - - PrintFillStruct_Member_Condition_Struct(info, *dynamicMember); - } - } - else + if (info.m_definition->GetType() == DataDefinitionType::UNION) { for (const auto& member : info.m_ordered_members) { @@ -704,8 +676,22 @@ namespace if (computations.ShouldIgnore()) continue; + PrintFillStruct_Member_Condition_Union(info, *member); + } + } + else + { + for (const auto& member : info.m_ordered_members) + { + const MemberComputations computations(member.get()); + if (computations.ShouldIgnore() || member.get() == dynamicMember) + continue; + PrintFillStruct_Member(info, *member, DeclarationModifierComputations(member.get()), 0u); } + + if (dynamicMember) + PrintFillStruct_Member_Condition_Struct(info, *dynamicMember); } }