Browse Source

Fixed boxing in cast in ternary expression

Brian Fiete 3 years ago
parent
commit
a23406d9dd
2 changed files with 6 additions and 2 deletions
  1. 2 2
      IDEHelper/Compiler/BfExprEvaluator.cpp
  2. 4 0
      IDEHelper/Tests/src/Boxing.bf

+ 2 - 2
IDEHelper/Compiler/BfExprEvaluator.cpp

@@ -19742,8 +19742,6 @@ void BfExprEvaluator::Visit(BfConditionalExpression* condExpr)
 		mModule->FixIntUnknown(falseValue);
  	}
 
-	prevInCondBlock.Restore();
-
 	bool isValid = trueValue && falseValue;
 
 	if (isValid)
@@ -19780,6 +19778,8 @@ void BfExprEvaluator::Visit(BfConditionalExpression* condExpr)
 		}
 	}
 
+	prevInCondBlock.Restore();
+
 	mModule->mBfIRBuilder->SetInsertPoint(trueBlockPos);
 	if (isValid)
 		trueValue = mModule->LoadValue(trueValue);

+ 4 - 0
IDEHelper/Tests/src/Boxing.bf

@@ -1,6 +1,7 @@
 #pragma warning disable 168
 
 using System;
+using System.Collections;
 
 namespace Tests
 {
@@ -86,6 +87,9 @@ namespace Tests
 			var scObjResult = scVariant.GetBoxed();
 			Test.Assert(scObjResult case .Err);
 			scVariant.Dispose();
+
+			List<int> l = scope .();
+			IEnumerator<int> e = (l != null) ? (.)null : l.GetEnumerator();
 		}
 
 		[Test]