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

@ -2964,8 +2964,8 @@ void BfCompiler::UpdateRevisedTypes()
BfTypeDefMap::Entry* rootTypeDefEntry = NULL;
BfTypeDef* rootTypeDef = NULL;
BfTypeDef* compositeTypeDef = NULL;
BfTypeDef* compositeTypeDef = NULL;
auto latestOuterTypeDef = outerTypeDef->GetLatest();
if ((outerTypeDef->mTypeCode == BfTypeCode_Extension) && (!outerTypeDef->mIsPartial))
{
@ -3031,22 +3031,37 @@ void BfCompiler::UpdateRevisedTypes()
}
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;
rootTypeDefEntry = outerTypeDefEntry;
// Find composite type, there is no explicit position for this
auto checkTypeDefEntry = mSystem->mTypeDefs.mHashHeads[bucketIdx];
while (checkTypeDefEntry != NULL)
{
auto checkTypeDef = checkTypeDefEntry->mValue;
if ((checkTypeDefEntry->mHash != outerTypeDefEntry->mHash) ||
(!checkTypeDef->mIsCombinedPartial) ||
if ((checkTypeDefEntry->mHash != outerTypeDefEntry->mHash) ||
(checkTypeDef->mPartialUsed) ||
(checkTypeDef->mDefState == BfTypeDef::DefState_Deleted) ||
(!checkTypeDef->NameEquals(outerTypeDef)) ||
(checkTypeDef->mGenericParamDefs.size() != outerTypeDef->mGenericParamDefs.size()) ||
(outerTypeDef->mProject != checkTypeDef->mProject))
(checkTypeDef->mGenericParamDefs.size() != outerTypeDef->mGenericParamDefs.size()))
{
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;
continue;
@ -3141,11 +3156,7 @@ void BfCompiler::UpdateRevisedTypes()
{
auto checkTypeDef = checkTypeDefEntry->mValue;
bool isValidProject;
if (rootTypeDef->mIsExplicitPartial)
isValidProject = rootTypeDef->mProject == checkTypeDef->mProject;
else
isValidProject = checkTypeDef->mProject->ContainsReference(rootTypeDef->mProject);
bool isValidProject = checkTypeDef->mProject->ContainsReference(rootTypeDef->mProject);
if (checkTypeDef != rootTypeDef)
{