From de320dfc664bc926686938e75ef4a9c6d42c947c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 11 Dec 2024 20:34:14 +0000 Subject: Parse empty inline extend --- .../compiler/ast/untyped/UntypedExtendInlineNode.java | 9 +++++++++ .../ast/untyped/UntypedNamespaceStatementNode.java | 2 +- .../java/org/shedlang/compiler/parser/Parser.java | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/ast/untyped/UntypedExtendInlineNode.java (limited to 'src/main/java') 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 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); -- cgit v1.2.3