diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:15:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:15:20 +0100 |
| commit | e95211da9f73ff0b0bc123ab9d29ef6a0eaf6c67 (patch) | |
| tree | 4685e5cc2c8949a084b940570508f4a7e954dcda /src/main/java | |
| parent | d4e6e270b038e721f7eba92d8dbcfe95ab1b31dd (diff) | |
Type-check function body
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java | 11 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 8 |
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) { |
