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

Fixed const eval dependency issues

This commit is contained in:
Brian Fiete 2020-12-31 11:31:19 -08:00
parent fa65029dfa
commit 86b5e65015
9 changed files with 82 additions and 22 deletions

View file

@ -1219,13 +1219,36 @@ void BfContext::TypeInlineMethodInternalsChanged(BfTypeInstance* typeInst)
auto dependencyFlags = depItr.mValue.mFlags;
// We don't need to cascade rebuilding for method-based usage - just rebuild the type directly (unlike TypeDataChanged, which cascades)
if (dependencyFlags & BfDependencyMap::DependencyFlag_InlinedCall)
if ((dependencyFlags & BfDependencyMap::DependencyFlag_InlinedCall) != 0)
{
RebuildType(dependentType);
}
}
}
void BfContext::TypeConstEvalChanged(BfTypeInstance* typeInst)
{
if (typeInst->mRebuildFlags & BfTypeRebuildFlag_ConstEvalChange) // Already did change?
return;
typeInst->mRebuildFlags = (BfTypeRebuildFlags)(typeInst->mRebuildFlags | BfTypeRebuildFlag_ConstEvalChange);
// 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;
// We don't need to cascade rebuilding for method-based usage - just rebuild the type directly (unlike TypeDataChanged, which cascades)
if ((dependencyFlags & BfDependencyMap::DependencyFlag_ConstEval) != 0)
{
auto depTypeInst = dependentType->ToTypeInstance();
if (depTypeInst != NULL)
TypeConstEvalChanged(depTypeInst);
RebuildType(dependentType);
}
}
}
void BfContext::PopulateHotTypeDataVTable(BfTypeInstance* typeInstance)
{
BP_ZONE("BfContext::PopulateHotTypeDataVTable");
@ -1870,6 +1893,11 @@ void BfContext::UpdateRevisedTypes()
isSignatureChange = true;
}
if ((typeDef->mDefState != BfTypeDef::DefState_Refresh) && ((typeInst->mDependencyMap.mFlagsUnion & BfDependencyMap::DependencyFlag_ConstEval) != 0))
{
TypeConstEvalChanged(typeInst);
}
if (isSignatureChange)
{
TypeDataChanged(typeInst, true);