From b6e49673c6da580bfb6f780128b4ab5f20c39129 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 29 Nov 2019 09:23:42 -0800 Subject: [PATCH] Fixed return value from a property indexer failure --- IDEHelper/Compiler/BfExprEvaluator.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 401f1e07..0a9ed68f 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -13826,7 +13826,24 @@ BfTypedValue BfExprEvaluator::GetResult(bool clearResult, bool resolveGenericTyp } if (failed) - mResult = mModule->GetDefaultTypedValue(methodInstance.mMethodInstance->mReturnType); + { + auto returnType = methodInstance.mMethodInstance->mReturnType; + auto methodDef = methodInstance.mMethodInstance->mMethodDef; + if (returnType->IsRef()) + { + auto result = mModule->GetDefaultTypedValue(returnType->GetUnderlyingType(), true, BfDefaultValueKind_Addr); + if (methodDef->mIsReadOnly) + result.mKind = BfTypedValueKind_ReadOnlyAddr; + return result; + } + else + { + auto val = mModule->GetDefaultTypedValue(returnType, true, methodInstance.mMethodInstance->HasStructRet() ? BfDefaultValueKind_Addr : BfDefaultValueKind_Value); + if (val.mKind == BfTypedValueKind_Addr) + val.mKind = BfTypedValueKind_TempAddr; + return val; + } + } else mResult = CreateCall(methodInstance.mMethodInstance, methodInstance.mFunc, mPropDefBypassVirtual, args); if (mResult.mType != NULL)