aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java9
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java2
2 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 83285f07..e89bdd61 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -74,7 +74,14 @@ public class TypeChecker {
TypeCheckerContext context
) {
var typedReceiver = typeCheckExpression(untyped.receiver(), context);
- var receiverType = (FunctionType) typedReceiver.type();
+
+ if (!(typedReceiver.type() instanceof FunctionType receiverType)) {
+ throw new UnexpectedTypeError(
+ TypeSets.FUNCTION,
+ typedReceiver.type(),
+ typedReceiver.source()
+ );
+ }
return new TypedCallNode(
typedReceiver,
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java
index 4f5f1848..b783a5ef 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java
@@ -6,6 +6,8 @@ public class TypeSets {
private TypeSets() {
}
+ public static final TypeSet FUNCTION = TypeSetFunction.INSTANCE;
+
public static TypeSet type(Type type) {
return new TypeSetType(type);
}