diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-07 16:55:48 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-07 17:01:03 +0000 |
| commit | e450be55c05a6bb1eda4e49595b50cf776e6e6d6 (patch) | |
| tree | aa9df2324f110012df0d67d5c68ad46ed5233547 /src/test/java | |
| parent | 68ee7079071ea7d64fcc71f28dfadc1cba447454 (diff) | |
Disallow returns in effect handlers
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java | 13 |
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 |
