From 023c832565f9f23c693af5d5245a11cf8494ef4e Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 21 Jan 2022 12:15:48 -0500 Subject: [PATCH] Fixed crash with 'params' in conversion operator --- IDEHelper/Compiler/BfExprEvaluator.cpp | 5 ++++- IDEHelper/Compiler/BfModule.cpp | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 0582f52a..b9f1f16e 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -2044,7 +2044,10 @@ bool BfMethodMatcher::CheckMethod(BfTypeInstance* targetTypeInstance, BfTypeInst argTypedValue = ResolveArgTypedValue(mArguments[argIdx], paramsElementType, genericArgumentsSubstitute); if (!argTypedValue.HasType()) goto NoMatch; - if (!mModule->CanCast(argTypedValue, paramsElementType)) + BfCastFlags castFlags = ((mBfEvalExprFlags & BfEvalExprFlags_FromConversionOp) != 0) ? BfCastFlags_NoConversionOperator : BfCastFlags_None; + if ((mBfEvalExprFlags & BfEvalExprFlags_FromConversionOp_Explicit) != 0) + castFlags = (BfCastFlags)(castFlags | BfCastFlags_Explicit); + if (!mModule->CanCast(argTypedValue, paramsElementType, castFlags)) goto NoMatch; argIdx++; argMatchCount++; diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 9bea6f34..da59c2c1 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -19195,7 +19195,8 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup, refNode = operatorDef->mOperatorDeclaration->mCommas[0]; Fail("Conversion operators must declare one parameter", refNode); } - else if ((methodInstance->mIsUnspecialized) && (!methodInstance->mIsUnspecializedVariation)) + else if ((!methodInstance->mIsUnspecialized) || + ((methodInstance->mIsUnspecialized) && (!methodInstance->mIsUnspecializedVariation))) { auto checkParam0 = mCurMethodInstance->GetParamType(0); if ((checkParam0->IsRef()) && (!checkParam0->IsOut()))