diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:38:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:38:22 +0000 |
| commit | 120b830cab1462d76761ee0d26cba7df783dc741 (patch) | |
| tree | 01a0877a9cfcf747ec0749bf46f3853c5763c4d6 /src/main/java | |
| parent | 23bc783e4c0eea019d47f1b69d9d8a74adb15326 (diff) | |
Check that handled effect is user-defined effect
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 7 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/NotUserDefinedEffectError.java | 18 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 29376e9f..f86ed78f 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -1593,6 +1593,13 @@ public class TypeChecker { ) { var typedHandledEffect = typeCheckEffect(untyped.handledEffect(), context); + if (!(typedHandledEffect.value() instanceof UserDefinedEffect)) { + throw new NotUserDefinedEffectError( + typedHandledEffect.value(), + untyped.handledEffect().source() + ); + } + var declaredVariables = DeclaredVariables.forFunctionStatements( untyped.body().statements(), P.vector() diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/NotUserDefinedEffectError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/NotUserDefinedEffectError.java new file mode 100644 index 00000000..a740dccc --- /dev/null +++ b/src/main/java/org/shedlang/compiler/typechecker/errors/NotUserDefinedEffectError.java @@ -0,0 +1,18 @@ +package org.shedlang.compiler.typechecker.errors; + +import org.shedlang.compiler.errors.SourceError; +import org.shedlang.compiler.sources.Source; +import org.shedlang.compiler.types.Effect; + +public class NotUserDefinedEffectError extends SourceError { + private final Effect effect; + + public NotUserDefinedEffectError(Effect effect, Source source) { + super("Only user-defined effects can be handled, but was: " + effect.describe(), source); + this.effect = effect; + } + + public Effect effect() { + return effect; + } +} |
