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

Fixed some FindTypeDef caching errors

This commit is contained in:
Brian Fiete 2022-05-27 10:24:01 -07:00
parent a8cf568bf9
commit f2c9c889ef

View file

@ -9702,6 +9702,12 @@ BfTypeDef* BfModule::FindTypeDef(const BfAtomComposite& findName, int numGeneric
BfTypeInstance* typeInstance = (typeInstanceOverride != NULL) ? typeInstanceOverride : mCurTypeInstance;
auto useTypeDef = GetActiveTypeDef(typeInstanceOverride, true);
if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL))
typeInstance = mCurMethodState->mMixinState->mMixinMethodInstance->GetOwner();
if (useTypeDef != NULL)
useTypeDef = useTypeDef->GetDefinition();
if ((typeInstance == NULL) && (useTypeDef == NULL))
{
BfProject* project = NULL;
@ -9746,7 +9752,7 @@ BfTypeDef* BfModule::FindTypeDef(const BfAtomComposite& findName, int numGeneric
return result;
}
if ((mCompiler->mResolvePassData != NULL) && (mCompiler->mResolvePassData->mAutoComplete != NULL) && (typeInstance != NULL))
if ((mCompiler->mResolvePassData != NULL) && (typeInstance != NULL))
{
if (mCompiler->mResolvePassData->mAutoCompleteTempTypes.Contains(useTypeDef))
return FindTypeDefRaw(findName, numGenericArgs, typeInstance, useTypeDef, error, NULL, resolveFlags);
@ -9761,6 +9767,22 @@ BfTypeDef* BfModule::FindTypeDef(const BfAtomComposite& findName, int numGeneric
BfTypeLookupResult* resultPtr = NULL;
if ((typeInstance != NULL) && (typeInstance->mLookupResults.TryAdd(typeLookupEntry, &typeLookupEntryPtr, &resultPtr)))
{
BF_ASSERT(!useTypeDef->IsEmitted());
bool isValid;
if (useTypeDef->mIsPartial)
isValid = typeInstance->mTypeDef->GetDefinition()->ContainsPartial(useTypeDef);
else
isValid = typeInstance->mTypeDef->GetDefinition() == useTypeDef;
if ((!isValid) && (mCurMethodInstance != NULL) && (mCurMethodInstance->mIsForeignMethodDef))
{
BF_ASSERT(mCurMethodInstance->mIsForeignMethodDef);
isValid = mCurMethodInstance->mMethodDef->mDeclaringType == useTypeDef;
}
BF_ASSERT(isValid);
typeLookupEntryPtr->mAtomUpdateIdx = typeLookupEntry.mName.GetAtomUpdateIdx();
// FindTypeDefRaw may re-enter when finding base types, so we need to expect that resultPtr can change