From fcc65843b63b4b361f5996bda51d93f0012d0c36 Mon Sep 17 00:00:00 2001 From: Fusioon Date: Sun, 30 Mar 2025 04:36:02 +0200 Subject: [PATCH] Fix defer on interface methods --- IDEHelper/Compiler/BfExprEvaluator.cpp | 2 +- IDEHelper/Tests/src/Functions.bf | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 8ae94c8d..9621f742 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -7125,7 +7125,7 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, BfMethodInstance* if (mDeferCallData != NULL) { - if (mDeferCallData->mFuncAlloca_Orig == func) + if ((func) && (mDeferCallData->mFuncAlloca_Orig == func)) mModule->AddDeferredCall(BfModuleMethodInstance(methodInstance, mDeferCallData->mFuncAlloca), irArgs, mDeferCallData->mScopeAlloc, mDeferCallData->mRefNode, bypassVirtual, false, true); else mModule->AddDeferredCall(BfModuleMethodInstance(methodInstance, func), irArgs, mDeferCallData->mScopeAlloc, mDeferCallData->mRefNode, bypassVirtual); diff --git a/IDEHelper/Tests/src/Functions.bf b/IDEHelper/Tests/src/Functions.bf index 6bf073b9..820c4509 100644 --- a/IDEHelper/Tests/src/Functions.bf +++ b/IDEHelper/Tests/src/Functions.bf @@ -161,6 +161,7 @@ namespace Tests interface ITest { + void TestFunc(); static void Func(); } @@ -178,6 +179,8 @@ namespace Tests { public static int sVal; + public void TestFunc() => Func(); + public static void Func() { sVal = 123; @@ -189,6 +192,12 @@ namespace Tests if (func != null) defer:: func.Invoke(); } + + public static void TestIFaceDefer() + { + ITest itest = scope Zoop(); + defer itest.TestFunc(); + } } public static int UseFunc0(function int (T this, float f) func, T a, float b) @@ -265,6 +274,10 @@ namespace Tests Zoop.sVal = 0; Zoop.TestDefer(); Test.Assert(Zoop.sVal == 123); + + Zoop.sVal = 0; + Zoop.TestIFaceDefer(); + Test.Assert(Zoop.sVal == 123); } } }