Make zone write add insert pointer even if reusable member does not have struct type

This commit is contained in:
Jan 2021-04-28 15:31:12 +02:00
parent 775bf01752
commit 156d7aa5cd

View File

@ -381,9 +381,6 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
static bool WriteMember_ShouldMakeInsertReuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType) static bool WriteMember_ShouldMakeInsertReuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
{ {
if (member->m_type == nullptr || !member->m_type->m_reusable_reference_exists)
return false;
if (writeType != MemberWriteType::ARRAY_POINTER if (writeType != MemberWriteType::ARRAY_POINTER
&& writeType != MemberWriteType::SINGLE_POINTER && writeType != MemberWriteType::SINGLE_POINTER
&& writeType != MemberWriteType::POINTER_ARRAY) && writeType != MemberWriteType::POINTER_ARRAY)
@ -407,6 +404,12 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
return false; return false;
} }
if (member->m_is_reusable)
return true;
if (member->m_type == nullptr || !member->m_type->m_reusable_reference_exists)
return false;
return true; return true;
} }
@ -424,7 +427,16 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
} }
else if (writeType == MemberWriteType::POINTER_ARRAY) else if (writeType == MemberWriteType::POINTER_ARRAY)
{ {
LINE("m_stream->ReusableAddOffset("<<MakeMemberAccess(info, member, modifier)<<", "<<MakeEvaluation(modifier.GetPointerArrayCountEvaluation())<<");") const auto* evaluation = modifier.GetPointerArrayCountEvaluation();
if(evaluation)
{
LINE("m_stream->ReusableAddOffset(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetPointerArrayCountEvaluation()) << ");")
}
else
{
LINE("m_stream->ReusableAddOffset(" << MakeMemberAccess(info, member, modifier) << ", " << modifier.GetArraySize() << ");")
}
} }
else else
{ {