1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-17 07:44:09 +02:00

Fixed double-evaluation of enum field with lambda bind

This commit is contained in:
Brian Fiete 2025-06-09 07:19:55 +02:00
parent 66d3cce6a6
commit 33daf12c03
2 changed files with 19 additions and 7 deletions

View file

@ -9563,13 +9563,7 @@ BfTypedValue BfExprEvaluator::CheckEnumCreation(BfAstNode* targetSrc, BfTypeInst
continue;
argValue = mModule->AggregateSplat(argValue);
argValues.mResolvedArgs[tupleFieldIdx].mExpectedType = resolvedFieldType;
if ((argValues.mResolvedArgs[tupleFieldIdx].mArgFlags & (BfArgFlag_DelegateBindAttempt | BfArgFlag_LambdaBindAttempt | BfArgFlag_UnqualifiedDotAttempt)) != 0)
{
auto expr = BfNodeDynCast<BfExpression>(argValues.mResolvedArgs[tupleFieldIdx].mExpression);
BF_ASSERT(expr != NULL);
argValue = mModule->CreateValueFromExpression(expr, resolvedFieldType, (BfEvalExprFlags)(mBfEvalExprFlags & BfEvalExprFlags_InheritFlags));
}
argValues.mResolvedArgs[tupleFieldIdx].mExpectedType = resolvedFieldType;
if (argValue)
{

View file

@ -1,3 +1,4 @@
#pragma warning disable 4200
#pragma warning disable 168
using System;
@ -127,6 +128,13 @@ namespace Tests
D = 4
}
public enum EnumO
{
case None;
case EnumN(EnumN n);
case Delegate(delegate void());
}
[Test]
static void TestBasic()
{
@ -227,6 +235,16 @@ namespace Tests
const EnumE e0 = .A;
const EnumE e1 = .B(1);
EnumO eo = .Delegate((delegate void()) new () => {});
if (eo case .Delegate(var dlg))
delete dlg;
eo = .EnumN(.A);
eo = .Delegate(new () => {});
if (eo case .Delegate(var dlg))
delete dlg;
}
[Test]