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

View File

@ -6,7 +6,7 @@
class MarkingRequiredPostProcessor final : public IPostProcessor 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: public:
bool PostProcess(IDataRepository* repository) override; 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*> AssetMarker::GetDependencies() const
{ {
std::vector<XAssetInfoGeneric*> dependencies; std::vector<XAssetInfoGeneric*> dependencies;
if (!m_used_script_strings.empty()) if (!m_dependencies.empty())
{ {
dependencies.reserve(m_dependencies.size()); dependencies.reserve(m_dependencies.size());
for (auto dependency : m_dependencies) for (auto dependency : m_dependencies)