From 8736280ea8e8877f4fb2afdfc628207b3c0031c1 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 18 Mar 2021 13:02:31 +0100 Subject: [PATCH] Fix zone writing code not setting ptr following --- .../Generating/Templates/ZoneWriteTemplate.cpp | 6 +++--- .../Zone/Stream/Impl/InMemoryZoneOutputStream.cpp | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp index 74a116cc..61a084ed 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp @@ -208,6 +208,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate { LINE("m_stream->Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers()) << ">(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");") + LINE("m_stream->MarkFollowing("<Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers()) << ">(" << MakeMemberAccess(info, member, modifier) << ");") + LINE("m_stream->MarkFollowing("<Align("<Write<" << def->GetFullName() << ">(*" << MakeTypePtrVarName(def) << ");") - LINE("m_stream->MarkFollowing(*"<< MakeTypePtrVarName(def)<<");") } + LINE("m_stream->MarkFollowing(*"<< MakeTypePtrVarName(def)<<");") } void PrintWritePtrArrayMethod_PointerCheck(const DataDefinition* def, StructureInformation* info, const bool reusable) diff --git a/src/ZoneWriting/Zone/Stream/Impl/InMemoryZoneOutputStream.cpp b/src/ZoneWriting/Zone/Stream/Impl/InMemoryZoneOutputStream.cpp index 031e371e..633c3cf0 100644 --- a/src/ZoneWriting/Zone/Stream/Impl/InMemoryZoneOutputStream.cpp +++ b/src/ZoneWriting/Zone/Stream/Impl/InMemoryZoneOutputStream.cpp @@ -140,6 +140,7 @@ void InMemoryZoneOutputStream::WriteNullTerminated(const void* src) uintptr_t InMemoryZoneOutputStream::GetCurrentZonePointer() { assert(!m_block_stack.empty()); + assert(m_block_stack.top()->m_type == XBlock::Type::BLOCK_TYPE_NORMAL); uintptr_t ptr = 0; ptr |= static_cast(m_block_stack.top()->m_index) << (sizeof(uintptr_t) * 8 - m_block_bit_count);