From ed679f6f105c1a3da2d131c4438d77a16bafa84a Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 14 Feb 2021 06:40:02 -0800 Subject: [PATCH] Fixed null coalescing for function pointers --- IDEHelper/Compiler/BfExprEvaluator.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 08d580f4..b819317f 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -20615,14 +20615,19 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod return; } - if ((binaryOp == BfBinaryOp_NullCoalesce) && ((leftValue.mType->IsPointer()) || (leftValue.mType->IsObject()))) + if ((binaryOp == BfBinaryOp_NullCoalesce) && ((leftValue.mType->IsPointer()) || (leftValue.mType->IsFunction()) || (leftValue.mType->IsObject()))) { auto prevBB = mModule->mBfIRBuilder->GetInsertBlock(); auto rhsBB = mModule->mBfIRBuilder->CreateBlock("nullc.rhs"); auto endBB = mModule->mBfIRBuilder->CreateBlock("nullc.end"); - auto isNull = mModule->mBfIRBuilder->CreateIsNull(leftValue.mValue); + BfIRValue isNull; + if (leftValue.mType->IsFunction()) + isNull = mModule->mBfIRBuilder->CreateIsNull( + mModule->mBfIRBuilder->CreateIntToPtr(leftValue.mValue, mModule->mBfIRBuilder->MapType(mModule->GetPrimitiveType(BfTypeCode_NullPtr)))); + else + isNull = mModule->mBfIRBuilder->CreateIsNull(leftValue.mValue); mModule->mBfIRBuilder->CreateCondBr(isNull, rhsBB, endBB); mModule->AddBasicBlock(rhsBB);