aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 11:23:22 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 11:23:22 +0100
commit95f373076325515dbb3acfb7f9d39fecdd2cf9ef (patch)
tree0a5a127e3a2383b21b7a1146c749df79b0d60e31 /src/main/java
parent8d9a828fcdaa35b8826c8d3988a8927ea916555c (diff)
Check call receiver is a function
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);
}