From a1729e82976e9d3789922c65bab93e7da75dd432 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 15 May 2020 17:01:38 -0700 Subject: [PATCH] Made static lookup for with generic constraints --- IDEHelper/Compiler/BfExprEvaluator.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index bdf96ef7..0f6c3591 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -7768,6 +7768,24 @@ void BfExprEvaluator::LookupQualifiedStaticField(BfAstNode* nameNode, BfIdentifi else lookupType = BfTypedValue(type); auto findName = nameRight->ToString(); + + if ((lookupType.mType != NULL) && (lookupType.mType->IsGenericParam())) + { + auto genericParamInstance = mModule->GetGenericParamInstance((BfGenericParamType*)lookupType.mType); + if (genericParamInstance->mTypeConstraint != NULL) + { + mResult = LookupField(nameRight, BfTypedValue(genericParamInstance->mTypeConstraint), findName); + if ((mResult) || (mPropDef != NULL)) + return; + } + for (auto constraint : genericParamInstance->mInterfaceConstraints) + { + mResult = LookupField(nameRight, BfTypedValue(constraint), findName); + if ((mResult) || (mPropDef != NULL)) + return; + } + } + /*if (findName == "base") { mResult = BfTypedValue(lookupType);