mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
Merge pull request #98 from Laupetin/fix/crash-on-linker
fix: crash on trying to use linker
This commit is contained in:
commit
398edc588f
@ -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)
|
||||
return true;
|
||||
|
||||
if (member->m_type != nullptr && member->m_type != info && RequiresMarking(visitedStructures, member->m_type))
|
||||
{
|
||||
info->m_requires_marking = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user