From 5944d9423280e78c23252c2c8468e117efe0ed55 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 13 Jun 2023 20:49:11 +0100 Subject: Store type of function on node --- .../ast/typed/TypedFunctionDefinitionNode.java | 34 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java index 9bec5e5c..e4d9a7c6 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java @@ -5,9 +5,7 @@ import org.pcollections.POrderedSet; import org.pcollections.PVector; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.sources.Sources; -import org.shedlang.compiler.types.Effect; -import org.shedlang.compiler.types.Type; -import org.shedlang.compiler.types.Types; +import org.shedlang.compiler.types.*; import java.util.List; import java.util.Optional; @@ -20,8 +18,38 @@ public record TypedFunctionDefinitionNode( TypedTypeLevelExpressionNode returnType, Set freeVariables, List body, + FunctionType type, Source source ) implements TypedNamespaceStatementNode { + public TypedFunctionDefinitionNode( + String name, + TypedParamsNode params, + Optional> effect, + TypedTypeLevelExpressionNode returnType, + Set freeVariables, + List body, + Source source + ) { + this( + name, + params, + effect, + returnType, + freeVariables, + body, + new FunctionType( + params.positional().stream() + .map(param -> param.type().value()) + .toList(), + params.named().stream() + .map(param -> new NamedParam(param.name(), param.type().value())) + .toList(), + returnType.value() + ), + source + ); + } + public static Builder builder() { return new Builder( "f", -- cgit v1.2.3