From e95211da9f73ff0b0bc123ab9d29ef6a0eaf6c67 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Jun 2023 15:15:20 +0100 Subject: Type-check function body --- .../compiler/ast/untyped/UntypedFunctionDefinitionNode.java | 11 +++++++++++ .../java/org/shedlang/compiler/typechecker/TypeChecker.java | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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) { -- cgit v1.2.3