From ded495a07b406f9f007ccb98e859858fed985458 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 26 Jun 2024 08:44:26 +0200 Subject: [PATCH] Prefer 'out' to 'ref' for method selection --- IDEHelper/Compiler/BfExprEvaluator.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 4d9ab0f0..b5145ac3 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -971,6 +971,17 @@ void BfMethodMatcher::CompareMethods(BfMethodInstance* prevMethodInstance, BfTyp } } + if ((!isBetter) && (!isWorse) && (paramType->IsRef()) && (prevParamType->IsRef())) + { + auto refType = (BfRefType*)paramType; + auto prevRefType = (BfRefType*)prevParamType; + + // Prefer 'out' to 'ref' + SET_BETTER_OR_WORSE( + (refType->mRefKind == BfRefType::RefKind_Out) && (prevRefType->mRefKind == BfRefType::RefKind_Ref), + (refType->mRefKind == BfRefType::RefKind_Ref) && (prevRefType->mRefKind == BfRefType::RefKind_Out)); + } + if ((newArgIdx >= 0) && (newMethodInstance->GetParamKind(newArgIdx) == BfParamKind_Params)) usedExtendedForm = true; if ((prevArgIdx >= 0) && (prevMethodInstance->GetParamKind(prevArgIdx) == BfParamKind_Params))