Merge pull request #98 from Laupetin/fix/crash-on-linker

fix: crash on trying to use linker
This commit is contained in:
Jan 2024-01-24 00:30:41 +01:00 committed by GitHub
commit 398edc588f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 5 deletions

View File

@ -6,7 +6,7 @@
#include <unordered_set>
bool MarkingRequiredPostProcessor::RequiresMarking(std::unordered_set<const void*>& visitedStructures, const StructureInformation* info)
bool MarkingRequiredPostProcessor::CalculateRequiresMarking(std::unordered_set<const void*>& visitedStructures, StructureInformation* info)
{
if (visitedStructures.find(info) != visitedStructures.end())
return info->m_requires_marking;
@ -14,7 +14,10 @@ bool MarkingRequiredPostProcessor::RequiresMarking(std::unordered_set<const void
visitedStructures.emplace(info);
if (info->m_asset_enum_entry)
{
info->m_requires_marking = true;
return true;
}
for (const auto& member : info->m_ordered_members)
{
@ -43,12 +46,19 @@ bool MarkingRequiredPostProcessor::RequiresMarking(std::unordered_set<const void
// Any ScriptStrings or Strings need to be processed.
if (member->m_is_script_string || member->m_type && member->m_type->m_asset_enum_entry)
{
info->m_requires_marking = true;
return true;
}
if (member->m_type != nullptr && member->m_type != info && RequiresMarking(visitedStructures, member->m_type))
if (member->m_type != nullptr && member->m_type != info && CalculateRequiresMarking(visitedStructures, member->m_type))
{
info->m_requires_marking = true;
return true;
}
}
info->m_requires_marking = false;
return false;
}
@ -59,7 +69,7 @@ bool MarkingRequiredPostProcessor::PostProcess(IDataRepository* repository)
std::unordered_set<const void*> visitedStructures;
for (const auto& info : allInfos)
{
info->m_requires_marking = RequiresMarking(visitedStructures, info);
CalculateRequiresMarking(visitedStructures, info);
}
return true;

View File

@ -6,7 +6,7 @@
class MarkingRequiredPostProcessor final : public IPostProcessor
{
static bool RequiresMarking(std::unordered_set<const void*>& visitedStructures, const StructureInformation* info);
static bool CalculateRequiresMarking(std::unordered_set<const void*>& visitedStructures, StructureInformation* info);
public:
bool PostProcess(IDataRepository* repository) override;

View File

@ -47,7 +47,7 @@ XAssetInfoGeneric* AssetMarker::GetAssetInfoByName(std::string name) const
std::vector<XAssetInfoGeneric*> AssetMarker::GetDependencies() const
{
std::vector<XAssetInfoGeneric*> dependencies;
if (!m_used_script_strings.empty())
if (!m_dependencies.empty())
{
dependencies.reserve(m_dependencies.size());
for (auto dependency : m_dependencies)