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

Direct auto-prop inc/dec fix

This commit is contained in:
Brian Fiete 2022-03-31 08:26:23 -07:00
parent 0d7a7e98e4
commit 394a7e0bc5
2 changed files with 37 additions and 1 deletions

View file

@ -21396,6 +21396,22 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr,
}
}
switch (unaryOp)
{
case BfUnaryOp_PostIncrement:
case BfUnaryOp_Increment:
case BfUnaryOp_PostDecrement:
case BfUnaryOp_Decrement:
{
if (mResult.mKind == BfTypedValueKind_CopyOnMutateAddr)
{
// Support this ops on direct auto-property access without a copy
mResult.mKind = BfTypedValueKind_Addr;
}
}
break;
}
bool numericFail = false;
switch (unaryOp)
{
@ -21579,7 +21595,7 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr,
break;
case BfUnaryOp_PostIncrement:
case BfUnaryOp_Increment:
{
{
CheckResultForReading(mResult);
auto ptr = mResult;
//if ((propDef == NULL) && (!mModule->CheckModifyValue(ptr, opToken)))

View file

@ -10,6 +10,8 @@ namespace Tests
{
public int mA = 111;
public static int sAutoProp { get; set; }
public this()
{
}
@ -18,6 +20,17 @@ namespace Tests
{
mA = a;
}
public static void IncAutoProp()
{
Test.Assert(sAutoProp == 0);
int v = ++sAutoProp;
Test.Assert(v == 1);
Test.Assert(sAutoProp == 1);
int v2 = sAutoProp++;
Test.Assert(v == 1);
Test.Assert(sAutoProp == 2);
}
}
struct StructB
@ -157,6 +170,13 @@ namespace Tests
MethodC(ce);
Test.Assert(ce.Val == 999);
Test.Assert(MethodD(ce) == 999);
StructA.IncAutoProp();
int ap = ++StructA.sAutoProp;
Test.Assert(ap == 3);
int ap2 = StructA.sAutoProp++;
Test.Assert(ap2 == 3);
Test.Assert(StructA.sAutoProp == 4);
}
}
}