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

Fixed dependency issue with pointer to struct as generic arg

This commit is contained in:
Brian Fiete 2020-06-23 08:40:25 -07:00
parent 26205eefcd
commit 807d8eba7e

View file

@ -3089,9 +3089,13 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap
return; return;
} }
auto depFlag = flags;
if ((flags & (BfDependencyMap::DependencyFlag_MethodGenericArg | BfDependencyMap::DependencyFlag_TypeGenericArg)) == 0)
depFlag = BfDependencyMap::DependencyFlag_GenericArgRef; // Will cause a rebuild but not an outright deletion of the type
auto underlyingType = usedType->GetUnderlyingType(); auto underlyingType = usedType->GetUnderlyingType();
if (underlyingType != NULL) // Not really a "GenericArg", but... same purpose. if (underlyingType != NULL)
AddDependency(underlyingType, userType, BfDependencyMap::DependencyFlag_GenericArgRef); AddDependency(underlyingType, userType, depFlag);
BfDependedType* checkDType = usedType->ToDependedType(); BfDependedType* checkDType = usedType->ToDependedType();
if (checkDType == NULL) if (checkDType == NULL)
@ -3107,7 +3111,7 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap
auto genericTypeInstance = (BfTypeInstance*) checkDType; auto genericTypeInstance = (BfTypeInstance*) checkDType;
for (auto genericArg : genericTypeInstance->mGenericTypeInfo->mTypeGenericArguments) for (auto genericArg : genericTypeInstance->mGenericTypeInfo->mTypeGenericArguments)
{ {
AddDependency(genericArg, userType, BfDependencyMap::DependencyFlag_GenericArgRef); AddDependency(genericArg, userType, depFlag);
} }
} }
if (checkDType->IsTuple()) if (checkDType->IsTuple())
@ -3115,7 +3119,7 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap
for (auto& field : checkDType->ToTypeInstance()->mFieldInstances) for (auto& field : checkDType->ToTypeInstance()->mFieldInstances)
{ {
if (field.mDataIdx != -1) if (field.mDataIdx != -1)
AddDependency(field.mResolvedType, userType, BfDependencyMap::DependencyFlag_GenericArgRef); AddDependency(field.mResolvedType, userType, depFlag);
} }
} }
} }