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:
parent
fa65029dfa
commit
86b5e65015
9 changed files with 82 additions and 22 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue