aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-13 20:49:11 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-13 20:49:11 +0100
commit5944d9423280e78c23252c2c8468e117efe0ed55 (patch)
treee1aa1779d1f92d9478eb0ca269eb69ea550f2790 /src/main/java
parentf2ab791334abe75807c4bff32b17fa379b466193 (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.java34
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",