From 56c250f251ea0961d7b21cd552b64e12b5ae4d00 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 29 Dec 2020 17:07:26 -0800 Subject: [PATCH] Fixed error handling of return value of lambda in local --- IDEHelper/Compiler/BfModule.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index cbb67811..69f0c6b8 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -2807,8 +2807,16 @@ BfError* BfModule::Fail(const StringImpl& error, BfAstNode* refNode, bool isPers { //auto unspecializedMethod = &mCurMethodInstance->mMethodInstanceGroup->mMethodSpecializationMap.begin()->second; auto unspecializedMethod = methodInstance->mMethodInstanceGroup->mDefault; - if (unspecializedMethod->mHasFailed) - return false; // At least SOME error has already been reported + if (unspecializedMethod == methodInstance) + { + // This is a local method inside a generic method + BF_ASSERT(methodInstance->mMethodDef->mIsLocalMethod); + } + else + { + if (unspecializedMethod->mHasFailed) + return false; // At least SOME error has already been reported + } } if (isSpecializedMethod) @@ -20040,7 +20048,12 @@ BfModuleMethodInstance BfModule::GetLocalMethodInstance(BfLocalMethod* localMeth VisitCodeBlock(blockBody); } else if (auto bodyExpr = BfNodeDynCast(body)) - CreateValueFromExpression(bodyExpr); + { + BfType* expectType = NULL; + if (!methodInstance->mReturnType->IsVoid()) + expectType = methodInstance->mReturnType; + CreateValueFromExpression(bodyExpr, expectType); + } }; auto _SafeResolveTypeRef = [&](BfTypeReference* typeRef)