aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-08-27 20:27:49 +0100
committerMichael Williamson <mike@zwobble.org>2023-08-27 20:27:49 +0100
commit623c8a2542cf071b59aebe4811d7d61c762db774 (patch)
treec2b425688cdcd663b3bbc9f6384a4f0bca962695 /src/test/java
parent96de72e5f761eb4bf07536f4dfe282e2e10a2081 (diff)
Check while loop body does not yield value
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhileTests.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhileTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhileTests.java
index 209be5e1..5fc029b8 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhileTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhileTests.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.typechecker;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.ast.untyped.Untyped;
+import org.shedlang.compiler.typechecker.errors.LoopBodyCannotYieldValueError;
import org.shedlang.compiler.typechecker.errors.UnexpectedTypeError;
import org.shedlang.compiler.typechecker.typesets.TypeSets;
import org.shedlang.compiler.types.Types;
@@ -66,4 +67,20 @@ public class TypeCheckerWhileTests {
))
));
}
+
+ @Test
+ public void bodyCannotReturnValueFromBlock() {
+ var untyped = Untyped.while_(
+ Untyped.boolLiteral(true),
+ Untyped.block(List.of(
+ Untyped.blockReturn(Untyped.intLiteral(42))
+ ))
+ );
+ var context = TypeCheckerContext.EMPTY;
+
+ assertThrows(
+ LoopBodyCannotYieldValueError.class,
+ () -> TypeChecker.typeCheckFunctionStatement(untyped, context)
+ );
+ }
}