diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-23 11:50:33 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-23 11:50:33 +0000 |
| commit | a7c33eef7d2598d5636ff5bcde07da4f9c057184 (patch) | |
| tree | 43fd9d2e37c9a4b2e8ebc45ab0ba998aca2b62b1 /src/main/java/org | |
| parent | 924ae7e0ebfd2abaf320a2ad4f3441e5034ffb91 (diff) | |
Parse type level params for sum types
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java | 13 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/parser/Parser.java | 10 |
2 files changed, 21 insertions, 2 deletions
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 a478e588..d727b98e 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java @@ -7,26 +7,35 @@ import org.shedlang.compiler.types.Visibility; import org.shedlang.compiler.util.P; import java.util.List; +import java.util.Optional; public record UntypedSumTypeDefinitionNode( String name, Visibility visibility, + Optional<List<UntypedTypeLevelParamNode>> typeLevelParams, List<UntypedTypeLevelExpressionNode> variants, Source source ) implements UntypedNamespaceStatementNode, UntypedVariableDeclarationNode { public static Builder builder() { - return new Builder("DefaultSumTypeName", Visibility.PRIVATE, P.vector()); + return new Builder( + "DefaultSumTypeName", + Visibility.PRIVATE, + Optional.empty(), + P.vector() + ); } public record Builder( String name, Visibility visibility, + Optional<List<UntypedTypeLevelParamNode>> typeLevelParams, PVector<UntypedTypeLevelExpressionNode> variants ) { public UntypedSumTypeDefinitionNode build() { return new UntypedSumTypeDefinitionNode( this.name, this.visibility, + this.typeLevelParams, this.variants, Sources.NULL ); @@ -36,6 +45,7 @@ public record UntypedSumTypeDefinitionNode( return new Builder( name, this.visibility, + this.typeLevelParams, this.variants ); } @@ -44,6 +54,7 @@ public record UntypedSumTypeDefinitionNode( return new Builder( this.name, this.visibility, + this.typeLevelParams, this.variants.plus(variant) ); } diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 9fb8a93b..753a6d75 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -968,6 +968,8 @@ public class Parser { var name = tokens.nextValue(TokenType.IDENTIFIER); + var typeLevelParams = parseTypeLevelParamsOptional(tokens); + tokens.skip(TokenType.SYMBOL_EQUALS); var variants = parseOneOrMoreNoTrailingSeparator( @@ -980,7 +982,13 @@ public class Parser { var end = tokens.position(); var source = start.to(end); - return new UntypedSumTypeDefinitionNode(name, visibility, variants, source); + return new UntypedSumTypeDefinitionNode( + name, + visibility, + typeLevelParams, + variants, + source + ); } static UntypedExpressionNode parseTopLevelExpression(TokenIterator<TokenType> tokens) { |
