diff --git a/IDEHelper/Compiler/BfStmtEvaluator.cpp b/IDEHelper/Compiler/BfStmtEvaluator.cpp index 7380dfe1..21d20729 100644 --- a/IDEHelper/Compiler/BfStmtEvaluator.cpp +++ b/IDEHelper/Compiler/BfStmtEvaluator.cpp @@ -4950,6 +4950,10 @@ void BfModule::Visit(BfSwitchStatement* switchStmt) mBfIRBuilder->SetInsertPoint(notEqBB); } } + else if (whenExpr != NULL) + { + mayHaveMatch = true; + } if (notEqBB) lastNotEqBlock = notEqBB; diff --git a/IDEHelper/Tests/src/Switches.bf b/IDEHelper/Tests/src/Switches.bf index 6648fefb..2241b636 100644 --- a/IDEHelper/Tests/src/Switches.bf +++ b/IDEHelper/Tests/src/Switches.bf @@ -4,7 +4,13 @@ namespace Tests { class Switches { - int Switch0(Result res) + enum Shape + { + case Rectangle(int x, int y, int width, int height); + case Circle(int x, int y, int radius); + } + + static int Switch0(Result res) { switch (res) { @@ -14,5 +20,28 @@ namespace Tests return 1; } } + + static int Switch1(Shape shape) + { + switch (shape) + { + case .Circle(let x, let y, let radius) when x > 0 && y == 10: + return 12; + default: + return 23; + } + } + + [Test] + public static void TestBasics() + { + Result val0 = .Ok(1); + Test.Assert(Switch0(val0) == 0); + val0 = .Err; + Test.Assert(Switch0(val0) == 1); + + Shape shape = .Circle(10, 20, 30); + Test.Assert(Switch1(shape) == 12); + } } }