Fix zone writing code not setting ptr following

This commit is contained in:
Jan 2021-03-18 13:02:31 +01:00
parent 0a4886e7ab
commit 8736280ea8
2 changed files with 4 additions and 3 deletions

View File

@ -208,6 +208,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
{ {
LINE("m_stream->Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers()) LINE("m_stream->Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers())
<< ">(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");") << ">(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");")
LINE("m_stream->MarkFollowing("<<MakeMemberAccess(info, member, modifier)<<");")
} }
} }
@ -303,6 +304,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
{ {
LINE("m_stream->Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers()) LINE("m_stream->Write<" << MakeTypeDecl(member->m_member->m_type_declaration.get()) << MakeFollowingReferences(modifier.GetFollowingDeclarationModifiers())
<< ">(" << MakeMemberAccess(info, member, modifier) << ");") << ">(" << MakeMemberAccess(info, member, modifier) << ");")
LINE("m_stream->MarkFollowing("<<MakeMemberAccess(info, member, modifier)<<");")
} }
} }
@ -402,8 +404,6 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
LINE("m_stream->Align("<<modifier.GetAlignment()<<");") LINE("m_stream->Align("<<modifier.GetAlignment()<<");")
} }
LINE("")
WriteMember_TypeCheck(info, member, modifier, writeType); WriteMember_TypeCheck(info, member, modifier, writeType);
} }
@ -838,8 +838,8 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
else else
{ {
LINE("m_stream->Write<" << def->GetFullName() << ">(*" << MakeTypePtrVarName(def) << ");") LINE("m_stream->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) void PrintWritePtrArrayMethod_PointerCheck(const DataDefinition* def, StructureInformation* info, const bool reusable)

View File

@ -140,6 +140,7 @@ void InMemoryZoneOutputStream::WriteNullTerminated(const void* src)
uintptr_t InMemoryZoneOutputStream::GetCurrentZonePointer() uintptr_t InMemoryZoneOutputStream::GetCurrentZonePointer()
{ {
assert(!m_block_stack.empty()); assert(!m_block_stack.empty());
assert(m_block_stack.top()->m_type == XBlock::Type::BLOCK_TYPE_NORMAL);
uintptr_t ptr = 0; uintptr_t ptr = 0;
ptr |= static_cast<uintptr_t>(m_block_stack.top()->m_index) << (sizeof(uintptr_t) * 8 - m_block_bit_count); ptr |= static_cast<uintptr_t>(m_block_stack.top()->m_index) << (sizeof(uintptr_t) * 8 - m_block_bit_count);