aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-11 20:34:14 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-11 20:34:14 +0000
commitde320dfc664bc926686938e75ef4a9c6d42c947c (patch)
tree316ddd7073aed3452683763fc4239e978c2b90f6 /src/main/java
parent525a4c6576c287cdaaeced4e4f1f53bb82515ad9 (diff)
Parse empty inline extend
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedExtendInlineNode.java9
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java2
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java19
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);