aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 15:15:20 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 15:15:20 +0100
commite95211da9f73ff0b0bc123ab9d29ef6a0eaf6c67 (patch)
tree4685e5cc2c8949a084b940570508f4a7e954dcda /src/main/java
parentd4e6e270b038e721f7eba92d8dbcfe95ab1b31dd (diff)
Type-check function body
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java11
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java8
2 files changed, 17 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
index 7cdaca92..1292c029 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
@@ -67,5 +67,16 @@ public record UntypedFunctionDefinitionNode(
body
);
}
+
+ public Builder addStatement(UntypedFunctionStatementNode statement) {
+ return new Builder(
+ name,
+ positionalParams,
+ namedParams,
+ effect,
+ returnType,
+ body.plus(statement)
+ );
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index f03de967..f5d3f728 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -170,18 +170,22 @@ public class TypeChecker {
) {
var typedReturnType = typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped.returnType(), context);
+ var body = untyped.body().stream()
+ .map(statement -> typeCheckFunctionStatement(statement, context))
+ .toList();
+
return new TypedFunctionDefinitionNode(
untyped.name(),
new TypedParamsNode(List.of(), List.of(), untyped.params().source()),
Optional.empty(),
typedReturnType,
- List.of(),
+ body,
untyped.source()
);
}
public static TypedFunctionStatementNode typeCheckFunctionStatement(
- UntypedExpressionStatementNode untyped,
+ UntypedFunctionStatementNode untyped,
TypeCheckerContext context
) {
return switch (untyped) {