aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-19 16:30:17 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-19 16:30:17 +0000
commit4f8135071ae6faf7abfbc2f4765101ce9c0bb287 (patch)
tree466ce9540538e5f3a193b0b82fde30796651de0f /src/main/java/org/shedlang/compiler/parser
parentcbe45599f7b46d7a0674a62d424b9485e7735d45 (diff)
Define methods directly on struct
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java34
1 files changed, 8 insertions, 26 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index 8d79439e..328a1ec9 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -405,29 +405,6 @@ 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);
-
- var methods = parseMany(
- () -> tokens.isNext(TokenType.SYMBOL_BRACE_CLOSE),
- () -> parseFunctionDefinition(tokens),
- () -> true
- );
-
- tokens.skip(TokenType.SYMBOL_BRACE_CLOSE);
-
- var end = tokens.position();
- var source = start.to(end);
-
- return new UntypedExtendInlineNode(extendedType, methods, source);
- }
-
private static class FieldAccessParser implements OperationParser<
OperatorPrecedence,
UntypedExpressionNode
@@ -781,9 +758,6 @@ public class Parser {
case KEYWORD_EFFECT ->
parseEffectDefinition(tokens);
- case KEYWORD_EXTEND ->
- parseExtendInline(tokens);
-
case KEYWORD_FUN ->
parseFunctionDefinition(tokens);
@@ -1025,6 +999,13 @@ public class Parser {
tokens.skip(TokenType.SYMBOL_PAREN_CLOSE);
tokens.skip(TokenType.SYMBOL_BRACE_OPEN);
+
+ var methods = parseMany(
+ () -> tokens.isNext(TokenType.SYMBOL_BRACE_CLOSE),
+ () -> parseFunctionDefinition(tokens),
+ () -> true
+ );
+
tokens.skip(TokenType.SYMBOL_BRACE_CLOSE);
var end = tokens.position();
@@ -1036,6 +1017,7 @@ public class Parser {
typeLevelParams,
fields,
structHasPositionalFields,
+ methods,
source
);
}