1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fixed const-eval-initialized const field dependency issues

This commit is contained in:
Brian Fiete 2021-01-02 15:46:29 -08:00
parent 1893988195
commit 496eae24ad
5 changed files with 85 additions and 29 deletions

View file

@ -1246,6 +1246,35 @@ void BfContext::TypeConstEvalChanged(BfTypeInstance* typeInst)
TypeConstEvalChanged(depTypeInst);
RebuildType(dependentType);
}
else if ((dependencyFlags & BfDependencyMap::DependencyFlag_ConstEvalConstField) != 0)
{
auto depTypeInst = dependentType->ToTypeInstance();
if (depTypeInst != NULL)
TypeConstEvalFieldChanged(depTypeInst);
RebuildType(dependentType);
}
}
}
void BfContext::TypeConstEvalFieldChanged(BfTypeInstance* typeInst)
{
if (typeInst->mRebuildFlags & BfTypeRebuildFlag_ConstEvalFieldChange) // Already did change?
return;
typeInst->mRebuildFlags = (BfTypeRebuildFlags)(typeInst->mRebuildFlags | BfTypeRebuildFlag_ConstEvalFieldChange);
// These don't happen in TypeDataChanged because we don't need to cascade
for (auto& depItr : typeInst->mDependencyMap)
{
auto dependentType = depItr.mKey;
auto dependencyFlags = depItr.mValue.mFlags;
if ((dependencyFlags & BfDependencyMap::DependencyFlag_ConstEvalConstField) != 0)
{
auto depTypeInst = dependentType->ToTypeInstance();
if (depTypeInst != NULL)
TypeConstEvalFieldChanged(depTypeInst);
RebuildType(dependentType);
}
}
}