mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-14 14:24:10 +02:00
Direct auto-prop inc/dec fix
This commit is contained in:
parent
0d7a7e98e4
commit
394a7e0bc5
2 changed files with 37 additions and 1 deletions
|
@ -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;
|
bool numericFail = false;
|
||||||
switch (unaryOp)
|
switch (unaryOp)
|
||||||
{
|
{
|
||||||
|
@ -21579,7 +21595,7 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr,
|
||||||
break;
|
break;
|
||||||
case BfUnaryOp_PostIncrement:
|
case BfUnaryOp_PostIncrement:
|
||||||
case BfUnaryOp_Increment:
|
case BfUnaryOp_Increment:
|
||||||
{
|
{
|
||||||
CheckResultForReading(mResult);
|
CheckResultForReading(mResult);
|
||||||
auto ptr = mResult;
|
auto ptr = mResult;
|
||||||
//if ((propDef == NULL) && (!mModule->CheckModifyValue(ptr, opToken)))
|
//if ((propDef == NULL) && (!mModule->CheckModifyValue(ptr, opToken)))
|
||||||
|
|
|
@ -10,6 +10,8 @@ namespace Tests
|
||||||
{
|
{
|
||||||
public int mA = 111;
|
public int mA = 111;
|
||||||
|
|
||||||
|
public static int sAutoProp { get; set; }
|
||||||
|
|
||||||
public this()
|
public this()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -18,6 +20,17 @@ namespace Tests
|
||||||
{
|
{
|
||||||
mA = a;
|
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
|
struct StructB
|
||||||
|
@ -157,6 +170,13 @@ namespace Tests
|
||||||
MethodC(ce);
|
MethodC(ce);
|
||||||
Test.Assert(ce.Val == 999);
|
Test.Assert(ce.Val == 999);
|
||||||
Test.Assert(MethodD(ce) == 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue