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
|
@ -9563,13 +9563,7 @@ BfTypedValue BfExprEvaluator::CheckEnumCreation(BfAstNode* targetSrc, BfTypeInst
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
argValue = mModule->AggregateSplat(argValue);
|
argValue = mModule->AggregateSplat(argValue);
|
||||||
argValues.mResolvedArgs[tupleFieldIdx].mExpectedType = resolvedFieldType;
|
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)
|
if (argValue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma warning disable 4200
|
||||||
#pragma warning disable 168
|
#pragma warning disable 168
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
@ -127,6 +128,13 @@ namespace Tests
|
||||||
D = 4
|
D = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum EnumO
|
||||||
|
{
|
||||||
|
case None;
|
||||||
|
case EnumN(EnumN n);
|
||||||
|
case Delegate(delegate void());
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
static void TestBasic()
|
static void TestBasic()
|
||||||
{
|
{
|
||||||
|
@ -227,6 +235,16 @@ namespace Tests
|
||||||
|
|
||||||
const EnumE e0 = .A;
|
const EnumE e0 = .A;
|
||||||
const EnumE e1 = .B(1);
|
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]
|
[Test]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue