1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Made global composite typedefs no longer split per-project

This commit is contained in:
Brian Fiete 2020-07-16 08:04:25 -07:00
parent 8a5b674216
commit 328f489324

View file

@ -3031,7 +3031,7 @@ void BfCompiler::UpdateRevisedTypes()
} }
else if ((outerTypeDef->mIsExplicitPartial) && (!outerTypeDef->mPartialUsed)) else if ((outerTypeDef->mIsExplicitPartial) && (!outerTypeDef->mPartialUsed))
{ {
// For explicit partials there is no 'root type' so we just use the first explicit partial // For explicit partials there is no 'root type' so we want to select any partial in the 'innermost' project
rootTypeDef = outerTypeDef; rootTypeDef = outerTypeDef;
rootTypeDefEntry = outerTypeDefEntry; rootTypeDefEntry = outerTypeDefEntry;
@ -3040,13 +3040,28 @@ void BfCompiler::UpdateRevisedTypes()
while (checkTypeDefEntry != NULL) while (checkTypeDefEntry != NULL)
{ {
auto checkTypeDef = checkTypeDefEntry->mValue; auto checkTypeDef = checkTypeDefEntry->mValue;
if ((checkTypeDefEntry->mHash != outerTypeDefEntry->mHash) || if ((checkTypeDefEntry->mHash != outerTypeDefEntry->mHash) ||
(!checkTypeDef->mIsCombinedPartial) ||
(checkTypeDef->mPartialUsed) || (checkTypeDef->mPartialUsed) ||
(checkTypeDef->mDefState == BfTypeDef::DefState_Deleted) || (checkTypeDef->mDefState == BfTypeDef::DefState_Deleted) ||
(!checkTypeDef->NameEquals(outerTypeDef)) || (!checkTypeDef->NameEquals(outerTypeDef)) ||
(checkTypeDef->mGenericParamDefs.size() != outerTypeDef->mGenericParamDefs.size()) || (checkTypeDef->mGenericParamDefs.size() != outerTypeDef->mGenericParamDefs.size()))
(outerTypeDef->mProject != checkTypeDef->mProject)) {
checkTypeDefEntry = checkTypeDefEntry->mNext;
continue;
}
if (!checkTypeDef->mIsCombinedPartial)
{
// Select the innermost project for the composite project def
if ((rootTypeDef->mProject != checkTypeDef->mProject) && (rootTypeDef->mProject->ContainsReference(checkTypeDef->mProject)))
rootTypeDef = checkTypeDef;
checkTypeDefEntry = checkTypeDefEntry->mNext;
continue;
}
if (checkTypeDef->mProject != rootTypeDef->mProject)
{ {
checkTypeDefEntry = checkTypeDefEntry->mNext; checkTypeDefEntry = checkTypeDefEntry->mNext;
continue; continue;
@ -3141,11 +3156,7 @@ void BfCompiler::UpdateRevisedTypes()
{ {
auto checkTypeDef = checkTypeDefEntry->mValue; auto checkTypeDef = checkTypeDefEntry->mValue;
bool isValidProject; bool isValidProject = checkTypeDef->mProject->ContainsReference(rootTypeDef->mProject);
if (rootTypeDef->mIsExplicitPartial)
isValidProject = rootTypeDef->mProject == checkTypeDef->mProject;
else
isValidProject = checkTypeDef->mProject->ContainsReference(rootTypeDef->mProject);
if (checkTypeDef != rootTypeDef) if (checkTypeDef != rootTypeDef)
{ {