chore: make allocating redirect entry work with ptr directly

This commit is contained in:
Jan
2025-06-12 21:02:23 +01:00
parent 5ef3954e34
commit de2ad3d9b0
4 changed files with 7 additions and 11 deletions

View File

@ -567,7 +567,7 @@ namespace
if (memberInfo.m_is_reusable || (memberInfo.m_type && StructureComputations(memberInfo.m_type).IsAsset())) if (memberInfo.m_is_reusable || (memberInfo.m_type && StructureComputations(memberInfo.m_type).IsAsset()))
{ {
LINEF("fillAccessor.InsertPointerRedirect(m_stream.AllocRedirectEntry({0}), {1});", LINEF("fillAccessor.InsertPointerRedirect(m_stream.AllocRedirectEntry(&{0}), {1});",
MakeMemberAccess(&structInfo, &memberInfo, modifier), MakeMemberAccess(&structInfo, &memberInfo, modifier),
OffsetForMemberModifier(memberInfo, modifier, nestedBaseOffset)) OffsetForMemberModifier(memberInfo, modifier, nestedBaseOffset))
} }
@ -1019,7 +1019,7 @@ namespace
if (reusable || (info && StructureComputations(info).IsAsset())) if (reusable || (info && StructureComputations(info).IsAsset()))
{ {
LINEF("ptrArrayFill.InsertPointerRedirect(m_stream.AllocRedirectEntry({0}[index]), {1} * index);", LINEF("ptrArrayFill.InsertPointerRedirect(m_stream.AllocRedirectEntry(&{0}[index]), {1} * index);",
MakeTypePtrVarName(def), MakeTypePtrVarName(def),
m_env.m_pointer_size) m_env.m_pointer_size)
} }

View File

@ -155,7 +155,7 @@ void ContentLoader::LoadXAssetArray(const bool atStreamStart, const size_t count
{ {
fill.Fill(varXAsset[index].type, 8u * index); fill.Fill(varXAsset[index].type, 8u * index);
fill.FillPtr(varXAsset[index].header.data, 8u * index + 4u); fill.FillPtr(varXAsset[index].header.data, 8u * index + 4u);
fill.InsertPointerRedirect(m_stream.AllocRedirectEntry(varXAsset[index].header.data), 8u * index + 4u); fill.InsertPointerRedirect(m_stream.AllocRedirectEntry(&varXAsset[index].header.data), 8u * index + 4u);
} }
#endif #endif
} }

View File

@ -355,10 +355,11 @@ namespace
return *reinterpret_cast<void**>(&block->m_buffer[blockOffset]); return *reinterpret_cast<void**>(&block->m_buffer[blockOffset]);
} }
uintptr_t AllocRedirectEntry(void** alias) override uintptr_t AllocRedirectEntry(void* alias) override
{ {
// nullptr is always lookup alias 0 // nullptr is always lookup alias 0
if (*alias == nullptr) assert(alias);
if (alias == nullptr)
return 0; return 0;
const auto newIndex = m_pointer_redirect_lookup.size(); const auto newIndex = m_pointer_redirect_lookup.size();

View File

@ -151,12 +151,7 @@ public:
return static_cast<T*>(ConvertOffsetToAliasNative(static_cast<const void*>(offset))); return static_cast<T*>(ConvertOffsetToAliasNative(static_cast<const void*>(offset)));
} }
virtual uintptr_t AllocRedirectEntry(void** alias) = 0; virtual uintptr_t AllocRedirectEntry(void* alias) = 0;
template<typename T> uintptr_t AllocRedirectEntry(T*& offset)
{
return AllocRedirectEntry(reinterpret_cast<void**>(const_cast<std::remove_const_t<T>**>(&offset)));
}
virtual void* ConvertOffsetToPointerRedirect(const void* offset) = 0; virtual void* ConvertOffsetToPointerRedirect(const void* offset) = 0;