diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 3bbef848..5a1fc072 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -7857,7 +7857,7 @@ BF_NOINLINE void BfModule::EvaluateWithNewScope(BfExprEvaluator& exprEvaluator, newScope.mOuterIsConditional = true; newScope.mAllowTargeting = false; mCurMethodState->AddScope(&newScope); - NewScopeState(); + NewScopeState(true, false); exprEvaluator.mBfEvalExprFlags = (BfEvalExprFlags)(exprEvaluator.mBfEvalExprFlags | flags); exprEvaluator.Evaluate(expr, (flags & BfEvalExprFlags_PropogateNullConditional) != 0, (flags & BfEvalExprFlags_IgnoreNullConditional) != 0, (flags & BfEvalExprFlags_AllowSplat) != 0); RestoreScopeState(); diff --git a/IDEHelper/Tests/src/Operators.bf b/IDEHelper/Tests/src/Operators.bf index f178080c..9944ced7 100644 --- a/IDEHelper/Tests/src/Operators.bf +++ b/IDEHelper/Tests/src/Operators.bf @@ -6,6 +6,36 @@ namespace Tests { class Operators { + struct FlagsRegister + { + public bool zero; + public bool subtract; + public bool half_carry; + public bool carry; + + const uint8 ZERO_FLAG_BYTE_POSITION = 7; + const uint8 SUBTRACT_FLAG_BYTE_POSITION = 6; + const uint8 HALF_CARRY_FLAG_BYTE_POSITION = 5; + const uint8 CARRY_FLAG_BYTE_POSITION = 4; + + public this(bool z, bool s, bool hc, bool c) + { + zero = z; + subtract = s; + half_carry = hc; + carry = c; + } + + //Convert flag register to a uint8 + public static implicit operator uint8 (FlagsRegister flag) + { + return (flag.zero ? 1 : 0) << ZERO_FLAG_BYTE_POSITION | + (flag.subtract ? 1 : 0) << SUBTRACT_FLAG_BYTE_POSITION | + (flag.half_carry ? 1 : 0) << HALF_CARRY_FLAG_BYTE_POSITION | + (flag.carry ? 1 : 0) << CARRY_FLAG_BYTE_POSITION; + }; + } + struct StructA { public int mA; @@ -284,6 +314,9 @@ namespace Tests float f = so3.Use(1, 2); Test.Assert(f == 3); + FlagsRegister fr = .(true, false, true, true); + Test.Assert(fr == (uint8)0b10110000); + /*let oai = OuterOp.InnerOp.Op(1.0f, 100); Test.Assert(oai == 101.0f);