From 754b24cbd84c1b84507dbcd67fe668173731fe74 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 21 Jun 2020 11:44:57 -0700 Subject: [PATCH] Fixed deferred arg handling of var generic methods --- IDEHelper/Compiler/BfExprEvaluator.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 230f822f..ae363dea 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -1064,7 +1064,7 @@ BfTypedValue BfMethodMatcher::ResolveArgTypedValue(BfResolvedArg& resolvedArg, B if (mModule->mCurMethodState != NULL) mModule->mCurMethodState->mNoBind = prevNoBind; - if (argTypedValue) + if ((argTypedValue) && (!argTypedValue.mType->IsVar())) { if (checkType != NULL) resolvedArg.mExpectedType = checkType; @@ -1440,6 +1440,9 @@ bool BfMethodMatcher::CheckMethod(BfTypeInstance* targetTypeInstance, BfTypeInst goto NoMatch; //HashSet checkedTypeSet; + if (type->IsVar()) + mHasVarArguments = true; + genericInferContext.mCheckedTypeSet.Clear(); if (!genericInferContext.InferGenericArgument(methodInstance, type, wantType, argTypedValue.mValue)) goto NoMatch; @@ -7372,7 +7375,10 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp target = mModule->GetThis(); } if (!moduleMethodInstance) + { + FinishDeferredEvals(argValues.mResolvedArgs); return BfTypedValue(); + } bool isSkipCall = moduleMethodInstance.mMethodInstance->IsSkipCall(bypassVirtual);