1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Clear cached ce reflection data during type rebuild

This commit is contained in:
Brian Fiete 2022-07-28 11:25:50 -04:00
parent e071bd0014
commit 51713a1e34
3 changed files with 21 additions and 0 deletions

View file

@ -1009,6 +1009,9 @@ void BfContext::RebuildType(BfType* type, bool deleteOnDemandTypes, bool rebuild
return; return;
} }
if (mCompiler->mCeMachine != NULL)
mCompiler->mCeMachine->ClearTypeData(typeInst);
BF_ASSERT_REL(typeInst->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotting); BF_ASSERT_REL(typeInst->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotting);
// We need to verify lookups before we rebuild the type, because a type lookup change needs to count as a TypeDataChanged // We need to verify lookups before we rebuild the type, because a type lookup change needs to count as a TypeDataChanged

View file

@ -9759,6 +9759,23 @@ void CeMachine::QueueStaticField(BfFieldInstance* fieldInstance, const StringImp
mCurBuilder->mStaticFieldInstanceMap[mangledFieldName] = fieldInstance; mCurBuilder->mStaticFieldInstanceMap[mangledFieldName] = fieldInstance;
} }
void CeMachine::ClearTypeData(BfTypeInstance* typeInstance)
{
if (mTypeInfoMap.Remove(typeInstance))
{
for (auto& methodGroup : typeInstance->mMethodInstanceGroups)
{
if (methodGroup.mDefault != NULL)
mMethodInstanceSet.Remove(methodGroup.mDefault);
if (methodGroup.mMethodSpecializationMap != NULL)
{
for (auto& kv : *methodGroup.mMethodSpecializationMap)
mMethodInstanceSet.Remove(kv.mValue);
}
}
}
}
void CeMachine::SetAppendAllocInfo(BfModule* module, BfIRValue allocValue, BfIRValue appendSizeValue) void CeMachine::SetAppendAllocInfo(BfModule* module, BfIRValue allocValue, BfIRValue appendSizeValue)
{ {
delete mAppendAllocInfo; delete mAppendAllocInfo;

View file

@ -1257,6 +1257,7 @@ public:
CeFunction* QueueMethod(BfMethodInstance* methodInstance, BfIRValue func); CeFunction* QueueMethod(BfMethodInstance* methodInstance, BfIRValue func);
void QueueMethod(BfModuleMethodInstance moduleMethodInstance); void QueueMethod(BfModuleMethodInstance moduleMethodInstance);
void QueueStaticField(BfFieldInstance* fieldInstance, const StringImpl& mangledFieldName); void QueueStaticField(BfFieldInstance* fieldInstance, const StringImpl& mangledFieldName);
void ClearTypeData(BfTypeInstance* typeInstance);
void SetAppendAllocInfo(BfModule* module, BfIRValue allocValue, BfIRValue appendSizeValue); void SetAppendAllocInfo(BfModule* module, BfIRValue allocValue, BfIRValue appendSizeValue);
void ClearAppendAllocInfo(); void ClearAppendAllocInfo();