diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-13 20:49:11 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-13 20:49:11 +0100 |
| commit | 5944d9423280e78c23252c2c8468e117efe0ed55 (patch) | |
| tree | e1aa1779d1f92d9478eb0ca269eb69ea550f2790 /src/main/java | |
| parent | f2ab791334abe75807c4bff32b17fa379b466193 (diff) | |
Store type of function on node
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java | 34 |
1 files changed, 31 insertions, 3 deletions
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<Type> returnType, Set<String> freeVariables, List<TypedFunctionStatementNode> body, + FunctionType type, Source source ) implements TypedNamespaceStatementNode { + public TypedFunctionDefinitionNode( + String name, + TypedParamsNode params, + Optional<TypedTypeLevelExpressionNode<Effect>> effect, + TypedTypeLevelExpressionNode<Type> returnType, + Set<String> freeVariables, + List<TypedFunctionStatementNode> 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", |
