diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-11 20:34:14 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-11 20:34:14 +0000 |
| commit | de320dfc664bc926686938e75ef4a9c6d42c947c (patch) | |
| tree | 316ddd7073aed3452683763fc4239e978c2b90f6 /src/main/java | |
| parent | 525a4c6576c287cdaaeced4e4f1f53bb82515ad9 (diff) | |
Parse empty inline extend
Diffstat (limited to 'src/main/java')
3 files changed, 29 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExtendInlineNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExtendInlineNode.java new file mode 100644 index 00000000..1bb00b35 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExtendInlineNode.java @@ -0,0 +1,9 @@ +package org.shedlang.compiler.ast.untyped; + +import org.shedlang.compiler.sources.Source; + +public record UntypedExtendInlineNode( + UntypedTypeLevelExpressionNode extendedType, + Source source +) implements UntypedNamespaceStatementNode { +} diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java index 8d94d5b8..4df38b08 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.ast.untyped; -public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedAssignNode, UntypedEffectDefinitionNode, UntypedFunctionDefinitionNode, UntypedStructDefinitionNode, UntypedSumTypeDefinitionNode { +public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedAssignNode, UntypedEffectDefinitionNode, UntypedExtendInlineNode, UntypedFunctionDefinitionNode, UntypedStructDefinitionNode, UntypedSumTypeDefinitionNode { } diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index a4a23554..dba9620d 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -405,6 +405,22 @@ public class Parser { ); } + private static UntypedExtendInlineNode parseExtendInline( + TokenIterator<TokenType> tokens + ) { + var start = tokens.position(); + + tokens.skip(TokenType.KEYWORD_EXTEND); + var extendedType = parseTopLevelTypeLevelExpression(tokens); + tokens.skip(TokenType.SYMBOL_BRACE_OPEN); + tokens.skip(TokenType.SYMBOL_BRACE_CLOSE); + + var end = tokens.position(); + var source = start.to(end); + + return new UntypedExtendInlineNode(extendedType, source); + } + private static class FieldAccessParser implements OperationParser< OperatorPrecedence, UntypedExpressionNode @@ -758,6 +774,9 @@ public class Parser { case KEYWORD_EFFECT -> parseEffectDefinition(tokens); + case KEYWORD_EXTEND -> + parseExtendInline(tokens); + case KEYWORD_FUN -> parseFunctionDefinition(tokens); |
