1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fixed crash attempting to bind function to const

This commit is contained in:
Brian Fiete 2024-12-02 12:06:45 -05:00
parent 3864a8896b
commit 7ca654aab1
3 changed files with 31 additions and 2 deletions

View file

@ -6805,7 +6805,8 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, BfMethodInstance*
{ {
// We're attempting to directly invoke a non-virtual interface method, this will happen during the unspecialized pass // We're attempting to directly invoke a non-virtual interface method, this will happen during the unspecialized pass
// OR if we had an error and didn't find an implementing member in the actual target // OR if we had an error and didn't find an implementing member in the actual target
if ((!mModule->mCurMethodInstance->mIsUnspecialized) && (!mModule->mCurTypeInstance->IsInterface())) if (((mModule->mCurMethodInstance == NULL) || (!mModule->mCurMethodInstance->mIsUnspecialized)) &&
(!mModule->mCurTypeInstance->IsInterface()))
mModule->AssertErrorState(); mModule->AssertErrorState();
if (returnType->IsInterface()) if (returnType->IsInterface())

View file

@ -13093,7 +13093,7 @@ BfIRValue BfModule::CastToFunction(BfAstNode* srcNode, const BfTypedValue& targe
{ {
if ((!methodInstance->mIsUnspecialized) && (HasCompiledOutput())) if ((!methodInstance->mIsUnspecialized) && (HasCompiledOutput()))
AssertErrorState(); AssertErrorState();
return GetDefaultValue(dataType); return GetDefaultTypedValue(dataType, false, BfDefaultValueKind_Value).mValue;
} }
bindFuncVal = methodRefMethod.mFunc; bindFuncVal = methodRefMethod.mFunc;
} }

View file

@ -159,6 +159,31 @@ namespace Tests
} }
} }
interface ITest
{
static void Func();
}
class ClassC<T> where T : ITest
{
static function void() func = => T.Func;
public static void Test()
{
func();
}
}
class Zoop : ITest
{
public static int sVal;
public static void Func()
{
sVal = 123;
}
}
public static int UseFunc0<T>(function int (T this, float f) func, T a, float b) public static int UseFunc0<T>(function int (T this, float f) func, T a, float b)
{ {
return func(a, b); return func(a, b);
@ -226,6 +251,9 @@ namespace Tests
}); });
StructCRepr.Test(); StructCRepr.Test();
ClassC<Zoop>.Test();
Test.Assert(Zoop.sVal == 123);
} }
} }
} }