From d9fd93ccbdac2d2e4027a1a56c94759f5670a3e4 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 9 Sep 2024 11:18:36 -0400 Subject: [PATCH] Fixed lookup for inner type declared in a generic base class --- IDEHelper/Compiler/BfResolvedTypeUtils.cpp | 20 +++++++++++++++++++- IDEHelper/Tests/src/TypeLookup.bf | 7 +++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index a5c31771..421afea5 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -3417,7 +3417,21 @@ BfTypeDef* BfResolvedTypeSet::FindRootCommonOuterType(BfTypeDef* outerType, Look { if (ctx->mModule->mCurTypeInstance == NULL) return NULL; - BfTypeDef* commonOuterType = ctx->mModule->FindCommonOuterType(ctx->mModule->mCurTypeInstance->mTypeDef, outerType); + + BfTypeDef* commonOuterType = NULL; + + auto checkOuterTypeInst = ctx->mModule->mCurTypeInstance; + while (checkOuterTypeInst != NULL) + { + commonOuterType = ctx->mModule->FindCommonOuterType(checkOuterTypeInst->mTypeDef, outerType); + if (commonOuterType != NULL) + { + outOuterTypeInstance = checkOuterTypeInst; + break; + } + checkOuterTypeInst = checkOuterTypeInst->mBaseType; + } + if ((commonOuterType == NULL) && (outerType != NULL)) { auto staticSearch = ctx->mModule->GetStaticSearch(); @@ -3462,7 +3476,11 @@ int BfResolvedTypeSet::DoHash(BfTypeReference* typeRef, LookupContext* ctx, BfHa auto outerType = ctx->mModule->mSystem->GetOuterTypeNonPartial(typeDef); if (typeRef == ctx->mRootTypeRef) + { commonOuterType = FindRootCommonOuterType(outerType, ctx, checkTypeInstance); + if ((checkTypeInstance != NULL) && (checkTypeInstance->IsBoxed())) + checkTypeInstance = checkTypeInstance->GetUnderlyingType()->ToTypeInstance(); + } else commonOuterType = ctx->mModule->FindCommonOuterType(ctx->mModule->mCurTypeInstance->mTypeDef, outerType); diff --git a/IDEHelper/Tests/src/TypeLookup.bf b/IDEHelper/Tests/src/TypeLookup.bf index 1bc0f99e..7aba0f43 100644 --- a/IDEHelper/Tests/src/TypeLookup.bf +++ b/IDEHelper/Tests/src/TypeLookup.bf @@ -1,5 +1,7 @@ #pragma warning disable 168 +using System.Collections; + namespace Tests { class ClassE @@ -120,4 +122,9 @@ namespace Tests } } } + + class DictExt : Dictionary + { + Entry mEntry; + } }