From 2f6d9e03abc8a43d795afa358065fe760e12468d Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 12 May 2025 10:32:45 +0200 Subject: [PATCH] Improved handling of multiple declarations of required system types --- IDEHelper/Compiler/BfCompiler.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index aff318a3..fa985b46 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -7222,15 +7222,33 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory) mHasRequiredTypes = true; //HashSet internalTypeDefs; + + BfProject* corlibProject = NULL; auto _GetRequiredType = [&](const StringImpl& typeName, int genericArgCount = 0) { - auto typeDef = mSystem->FindTypeDef(typeName, genericArgCount); + BfTypeDef* ambigiousTypeDef = NULL; + auto typeDef = mSystem->FindTypeDef(typeName, genericArgCount, NULL, {}, &ambigiousTypeDef); if (typeDef == NULL) { mPassInstance->Fail(StrFormat("Unable to find system type: %s", typeName.c_str())); mHasRequiredTypes = false; } + + if (ambigiousTypeDef != NULL) + { + mPassInstance->Fail(StrFormat("Found multiple declarations of require type '%s'", typeName.c_str()), typeDef->GetRefNode()); + mPassInstance->MoreInfo("See additional declaration", ambigiousTypeDef->GetRefNode()); + if (typeDef->mProject != corlibProject) + { + auto rootTypeDef = mSystem->FindTypeDef(typeName, genericArgCount, corlibProject); + if (rootTypeDef != NULL) + typeDef = rootTypeDef; + } + } + + if (corlibProject == NULL) + corlibProject = typeDef->mProject; return typeDef; };