From c91c81f77d0123609269a22ebfde11cd19239d8a Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 22 Feb 2022 07:41:05 -0800 Subject: [PATCH] Improvements to failed extension, fixed protection on extended types --- IDEHelper/Compiler/BfCompiler.cpp | 15 +++++++++------ IDEHelper/Compiler/BfSystem.cpp | 8 ++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index a5df0f4e..90b5f9fd 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -3578,13 +3578,16 @@ void BfCompiler::UpdateRevisedTypes() if (failedToFindRootType) { - for (auto partialTypeDecl : compositeTypeDef->GetLatest()->mPartials) + for (auto partialTypeDef : compositeTypeDef->GetLatest()->mPartials) { - // Couldn't find a root type def, treat ourselves as an explicit partial - auto error = mPassInstance->Fail(StrFormat("Unable to find root type definition for extension '%s'", partialTypeDecl->GetLatest()->mFullName.ToString().c_str()), - partialTypeDecl->GetLatest()->mTypeDeclaration->mNameNode); - if (error != NULL) - error->mIsPersistent = true; + if (partialTypeDef->IsExtension()) + { + // Couldn't find a root type def, treat ourselves as an explicit partial + auto error = mPassInstance->Fail(StrFormat("Unable to find root type definition for extension '%s'", BfTypeUtils::TypeToString(partialTypeDef->GetLatest()).c_str()), + partialTypeDef->GetLatest()->mTypeDeclaration->mNameNode); + if (error != NULL) + error->mIsPersistent = true; + } } } } diff --git a/IDEHelper/Compiler/BfSystem.cpp b/IDEHelper/Compiler/BfSystem.cpp index 89c37973..b74a4c4e 100644 --- a/IDEHelper/Compiler/BfSystem.cpp +++ b/IDEHelper/Compiler/BfSystem.cpp @@ -2597,6 +2597,11 @@ bool BfSystem::FindTypeDef(const BfAtomComposite& findName, int numGenericArgs, // Still allow SOME match even if we put in the wrong number of generic args curPri -= 4; } + if ((typeDef->mPartials.mSize > 0) && (typeDef->mPartials[0]->IsExtension())) + { + // Is a failed extension + curPri -= 8; + } if ((curPri > ctx->mBestPri) || (ctx->mBestTypeDef == NULL)) { @@ -3059,8 +3064,7 @@ void BfSystem::AddToCompositePartial(BfPassInstance* passInstance, BfTypeDef* co typeDef->mHasCEOnCompile |= partialTypeDef->mHasCEOnCompile; typeDef->mHasExtensionMethods |= partialTypeDef->mHasExtensionMethods; typeDef->mHasUsingFields |= partialTypeDef->mHasUsingFields; - typeDef->mHasOverrideMethods |= partialTypeDef->mHasOverrideMethods; - typeDef->mProtection = BF_MIN(typeDef->mProtection, partialTypeDef->mProtection); + typeDef->mHasOverrideMethods |= partialTypeDef->mHasOverrideMethods; for (auto innerType : partialTypeDef->mNestedTypes) {