aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-07 16:55:48 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-07 17:01:03 +0000
commite450be55c05a6bb1eda4e49595b50cf776e6e6d6 (patch)
treeaa9df2324f110012df0d67d5c68ad46ed5233547 /src/test/java
parent68ee7079071ea7d64fcc71f28dfadc1cba447454 (diff)
Disallow returns in effect handlers
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java
index da130bcc..650d1531 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.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.CannotReturnFromEffectHandlerFieldError;
import org.shedlang.compiler.typechecker.errors.CannotReturnOutsideOfFunctionError;
import org.shedlang.compiler.typechecker.errors.UnexpectedTypeError;
import org.shedlang.compiler.typechecker.typesets.TypeSets;
@@ -53,6 +54,18 @@ public class TypeCheckerFunctionReturnTests {
}
@Test
+ public void whenInEffectHandlerThenReturnIsForbidden() {
+ var untyped = Untyped.functionReturn(Untyped.stringLiteral("hello"));
+ var context = TypeCheckerContext.EMPTY
+ .enterFunction(P.map(), Effects.NONE, ReturnTypeState.effectHandler(Types.UNIT));
+
+ assertThrows(
+ CannotReturnFromEffectHandlerFieldError.class,
+ () -> TypeChecker.typeCheckFunctionStatement(untyped, context)
+ );
+ }
+
+ @Test
public void canReturnSubtypeOfReturnType() {
var untyped = Untyped.functionReturn(Untyped.stringLiteral("hello"));
var context = TypeCheckerContext.EMPTY