diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-23 11:45:52 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-23 11:45:52 +0000 |
| commit | 924ae7e0ebfd2abaf320a2ad4f3441e5034ffb91 (patch) | |
| tree | 470f68afde309668473ce06f80790c782b51c23f /src/main/java | |
| parent | 1c60ecab9d6323b4d1fe6a2b2a510c6c5a5672e3 (diff) | |
Extract parseTypeLevelParamsOptional()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/parser/Parser.java | 29 |
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(); |
