aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-23 11:45:52 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-23 11:45:52 +0000
commit924ae7e0ebfd2abaf320a2ad4f3441e5034ffb91 (patch)
tree470f68afde309668473ce06f80790c782b51c23f /src/main/java
parent1c60ecab9d6323b4d1fe6a2b2a510c6c5a5672e3 (diff)
Extract parseTypeLevelParamsOptional()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index d7ee611d..9fb8a93b 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -914,16 +914,7 @@ public class Parser {
var name = tokens.nextValue(TokenType.IDENTIFIER);
- var typeLevelParams = Optional.<List<UntypedTypeLevelParamNode>>empty();
- if (tokens.trySkip(TokenType.SYMBOL_SQUARE_OPEN)) {
- typeLevelParams = Optional.of(parseMany(
- () -> tokens.isNext(TokenType.SYMBOL_SQUARE_CLOSE),
- () -> parseTypeLevelParam(tokens),
- () -> tokens.trySkip(TokenType.SYMBOL_COMMA)
- ));
-
- tokens.skip(TokenType.SYMBOL_SQUARE_CLOSE);
- }
+ var typeLevelParams = parseTypeLevelParamsOptional(tokens);
tokens.skip(TokenType.SYMBOL_PAREN_OPEN);
var fields = parseMany(
@@ -1213,6 +1204,24 @@ public class Parser {
return new UntypedTupleTypeNode(elements, source);
}
+ private static Optional<List<UntypedTypeLevelParamNode>> parseTypeLevelParamsOptional(
+ TokenIterator<TokenType> tokens
+ ) {
+ if (tokens.trySkip(TokenType.SYMBOL_SQUARE_OPEN)) {
+ var params = parseMany(
+ () -> tokens.isNext(TokenType.SYMBOL_SQUARE_CLOSE),
+ () -> parseTypeLevelParam(tokens),
+ () -> tokens.trySkip(TokenType.SYMBOL_COMMA)
+ );
+
+ tokens.skip(TokenType.SYMBOL_SQUARE_CLOSE);
+
+ return Optional.of(params);
+ } else {
+ return Optional.empty();
+ }
+ }
+
private static UntypedTypeLevelParamNode parseTypeLevelParam(TokenIterator<TokenType> tokens) {
var start = tokens.position();