mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 15:46:05 +02:00
Fixed double-evaluation of enum field with lambda bind
This commit is contained in:
parent
66d3cce6a6
commit
33daf12c03
2 changed files with 19 additions and 7 deletions
|
@ -9564,12 +9564,6 @@ BfTypedValue BfExprEvaluator::CheckEnumCreation(BfAstNode* targetSrc, BfTypeInst
|
|||
|
||||
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));
|
||||
}
|
||||
|
||||
if (argValue)
|
||||
{
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue