From da29789bd68c867669e036d838a27ff30cd8e0ef Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 25 May 2022 15:03:06 -0700 Subject: [PATCH] Fixed GetGenericTypeParamInstance with extensions --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 3 ++- IDEHelper/Compiler/BfSystem.cpp | 9 +++++++++ IDEHelper/Compiler/BfSystem.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index b9c986d2..f13a3290 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -8891,7 +8891,8 @@ BfGenericParamInstance* BfModule::GetGenericTypeParamInstance(int genericParamId if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL) { auto activeTypeDef = GetActiveTypeDef(NULL, true); - if ((activeTypeDef->mTypeDeclaration != genericTypeInst->mTypeDef->mTypeDeclaration) && (activeTypeDef->IsExtension())) + if ((activeTypeDef->mTypeDeclaration != genericTypeInst->mTypeDef->mTypeDeclaration) && (activeTypeDef->IsExtension()) && + (genericTypeInst->mTypeDef->ContainsPartial(activeTypeDef))) { BfTypeDef* lookupTypeDef = activeTypeDef; while (lookupTypeDef->mNestDepth > genericTypeInst->mTypeDef->mNestDepth) diff --git a/IDEHelper/Compiler/BfSystem.cpp b/IDEHelper/Compiler/BfSystem.cpp index b5bb427f..fd041a0d 100644 --- a/IDEHelper/Compiler/BfSystem.cpp +++ b/IDEHelper/Compiler/BfSystem.cpp @@ -986,6 +986,15 @@ void BfTypeDef::ReportMemory(MemReporter* memReporter) memReporter->AddVec(mDirectAllocNodes, false); } +bool BfTypeDef::ContainsPartial(BfTypeDef* partialTypeDef) +{ + if (partialTypeDef->mPartialIdx < 0) + return false; + if (partialTypeDef->mPartialIdx >= mPartials.mSize) + return false; + return mPartials[partialTypeDef->mPartialIdx] == partialTypeDef; +} + bool BfTypeDef::NameEquals(BfTypeDef* otherTypeDef) { if (mName != otherTypeDef->mName) diff --git a/IDEHelper/Compiler/BfSystem.h b/IDEHelper/Compiler/BfSystem.h index ba2a8246..d38d0932 100644 --- a/IDEHelper/Compiler/BfSystem.h +++ b/IDEHelper/Compiler/BfSystem.h @@ -1211,6 +1211,7 @@ public: BfMethodDef* GetMethodByName(const StringImpl& name, int paramCount = -1); BfFieldDef* GetFieldByName(const StringImpl& name); bool HasAutoProperty(BfPropertyDeclaration* propertyDeclaration); + bool ContainsPartial(BfTypeDef* partialTypeDef); String GetAutoPropertyName(BfPropertyDeclaration* propertyDeclaration); BfAstNode* GetRefNode();