diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-30 17:41:04 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-30 17:41:04 +0100 |
| commit | a1806b32dc21709d81e2378923910b100145cf90 (patch) | |
| tree | 4dbcfd48351cecd64d29712219ff516c204b9266 /src/main/java | |
| parent | ce8dfcfecd0937fbf2f4d5b941517f3750f29af2 (diff) | |
Construct typed node for sum type definitions
Diffstat (limited to 'src/main/java')
3 files changed, 20 insertions, 5 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedSumTypeDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedSumTypeDefinitionNode.java index 851e64e8..cb6b6418 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedSumTypeDefinitionNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedSumTypeDefinitionNode.java @@ -1,9 +1,10 @@ package org.shedlang.compiler.ast.typed; import org.shedlang.compiler.sources.Source; +import org.shedlang.compiler.types.SumType; public record TypedSumTypeDefinitionNode( - String name, + SumType type, Source source ) implements TypedNamespaceStatementNode { } diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java index 84f46711..e6900457 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java @@ -1,7 +1,9 @@ package org.shedlang.compiler.ast.untyped; +import org.pcollections.PVector; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.util.P; import java.util.List; @@ -11,10 +13,13 @@ public record UntypedSumTypeDefinitionNode( Source source ) implements UntypedNamespaceStatementNode { public static Builder builder() { - return new Builder("DefaultSumTypeName"); + return new Builder("DefaultSumTypeName", P.vector()); } - public record Builder(String name) { + public record Builder( + String name, + PVector<UntypedTypeLevelExpressionNode> variants + ) { public UntypedSumTypeDefinitionNode build() { return new UntypedSumTypeDefinitionNode( name, @@ -24,7 +29,11 @@ public record UntypedSumTypeDefinitionNode( } public Builder withName(String name) { - return new Builder(name); + return new Builder(name, this.variants); + } + + public Builder addVariant(UntypedTypeLevelExpressionNode variant) { + return new Builder(this.name, this.variants.plus(variant)); } } } diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index f754d0d0..e184e26b 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -926,7 +926,12 @@ public class TypeChecker { @Override public TypeCheckerResult<TypedNamespaceStatementNode> finish(TypeCheckerContext context) { - return context.toResult(null); + var type = context.getLexicalState(SumType.class, untyped.name()); + + return context.toResult(new TypedSumTypeDefinitionNode( + type, + untyped.source() + )); } }; } |
