From d3d6533976ccd9b4dd4fcb023451750adfba36c8 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 30 Jun 2020 15:18:16 -0700 Subject: [PATCH] Fixed const generic param lookup in extensions --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 899a90ce..ff1f3694 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -7004,8 +7004,9 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod genericCheckTypeInstance = GetUnspecializedTypeInstance(genericCheckTypeInstance); doFakeVal = true; } - + BfGenericParamDef* genericParamDef = NULL; + BfGenericParamDef* origGenericParamDef = NULL; BfType* genericParamResult = NULL; BfType* genericTypeConstraint = NULL; bool disallowConstExprValue = false; @@ -7013,6 +7014,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod { auto genericTypeInst = (BfTypeInstance*)genericCheckTypeInstance; auto* genericParams = &curTypeDef->mGenericParamDefs; + auto* origGenericParams = &curTypeDef->mGenericParamDefs; if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL) { @@ -7028,6 +7030,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod if (genericName == findName) { genericParamDef = checkGenericParamDef; + origGenericParamDef = (*origGenericParams)[genericParamIdx]; genericParamResult = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[genericParamIdx]; genericTypeConstraint = genericTypeInst->mGenericTypeInfo->mGenericParams[genericParamIdx]->mTypeConstraint; @@ -7045,6 +7048,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod if (genericName == findName) { genericParamDef = checkGenericParamDef; + origGenericParamDef = checkGenericParamDef; genericParamResult = contextMethodInstance->mMethodInfoEx->mMethodGenericArguments[genericParamIdx]; genericTypeConstraint = contextMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx]->mTypeConstraint; @@ -7077,7 +7081,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod return BfTypedValue(mBfIRBuilder->GetFakeVal(), genericTypeConstraint); } - if ((genericParamDef->mGenericParamFlags & BfGenericParamFlag_Const) != 0) + if (((genericParamDef->mGenericParamFlags | origGenericParamDef->mGenericParamFlags) & BfGenericParamFlag_Const) != 0) { BfTypedValue result; result.mType = genericParamResult;