From fff00af67b4ae8f89ca0dce21181bfae379b2ba5 Mon Sep 17 00:00:00 2001 From: Jan Date: Wed, 4 Jun 2025 18:56:52 +0100 Subject: [PATCH] fix: dynamic fill loading missing conditions on unions --- .../Generating/Templates/ZoneLoadTemplate.cpp | 33 ++++++++++++------- src/ZoneLoading/Zone/Stream/ZoneInputStream.h | 2 +- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp index ad073a2b..653111d3 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp @@ -525,7 +525,7 @@ namespace } else { - LINEF("#error Unsupported anonymous struct with name: {0}", memberInfo.m_member->m_name); + LINEF("#error Unsupported anonymous struct with name: {0}", memberInfo.m_member->m_name) } } @@ -679,19 +679,30 @@ namespace if (dynamicMember) { - 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 (info.m_definition->GetType() == DataDefinitionType::UNION) - PrintFillStruct_Member_Condition_Union(info, *dynamicMember); + { + 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 { diff --git a/src/ZoneLoading/Zone/Stream/ZoneInputStream.h b/src/ZoneLoading/Zone/Stream/ZoneInputStream.h index 5e7a5fb6..99d09f09 100644 --- a/src/ZoneLoading/Zone/Stream/ZoneInputStream.h +++ b/src/ZoneLoading/Zone/Stream/ZoneInputStream.h @@ -11,7 +11,7 @@ #include #include -#define DEBUG_OFFSETS 1 +// #define DEBUG_OFFSETS 1 class ZoneStreamFillReadAccessor {