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

Removed assumption of class on delegate constraint

This commit is contained in:
Brian Fiete 2022-06-15 11:40:11 -07:00
parent e3ca70c153
commit 527935f371
2 changed files with 25 additions and 1 deletions

View file

@ -515,7 +515,7 @@ bool BfModule::AreConstraintsSubset(BfGenericParamInstance* checkInner, BfGeneri
outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Struct); outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Struct);
else if (checkOuter->mTypeConstraint->IsStructOrStructPtr()) else if (checkOuter->mTypeConstraint->IsStructOrStructPtr())
outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_StructPtr); outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_StructPtr);
else if (checkOuter->mTypeConstraint->IsObject()) else if ((checkOuter->mTypeConstraint->IsObject()) && (!checkOuter->mTypeConstraint->IsDelegate()))
outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Class); outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Class);
else if (checkOuter->mTypeConstraint->IsEnum()) else if (checkOuter->mTypeConstraint->IsEnum())
outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Enum | BfGenericParamFlag_Struct); outerFlags = (BfGenericParamFlags)(outerFlags | BfGenericParamFlag_Enum | BfGenericParamFlag_Struct);

View file

@ -178,6 +178,23 @@ namespace Tests
Runtime.FatalError(); Runtime.FatalError();
} }
public static int TestOverload<TProc>(TProc proc)
where TProc : class, delegate void()
{
return 1;
}
public static int TestOverload<TProc>(TProc proc)
where TProc : delegate void()
{
return 2;
}
public static int TestOverload2(function void() proc)
{
return 3;
}
[Test] [Test]
public static void TestBasics() public static void TestBasics()
{ {
@ -204,6 +221,13 @@ namespace Tests
Test.Assert(gci.test == 2); Test.Assert(gci.test == 2);
Test.Assert(GenClassMethodC(gci) == 3); Test.Assert(GenClassMethodC(gci) == 3);
Test.Assert(gci.test == 3); Test.Assert(gci.test == 3);
delegate void() dlg = scope () => {};
function void() func = () => {};
Test.Assert(TestOverload(dlg) == 1);
Test.Assert(TestOverload(() => {}) == 2);
Test.Assert(TestOverload(func) == 2);
Test.Assert(TestOverload2(func) == 3);
} }
} }
} }