diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 11:23:22 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 11:23:22 +0100 |
| commit | 95f373076325515dbb3acfb7f9d39fecdd2cf9ef (patch) | |
| tree | 0a5a127e3a2383b21b7a1146c749df79b0d60e31 /src/main/java | |
| parent | 8d9a828fcdaa35b8826c8d3988a8927ea916555c (diff) | |
Check call receiver is a function
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 9 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSets.java | 2 |
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); } |
