From 924ae7e0ebfd2abaf320a2ad4f3441e5034ffb91 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 23 Dec 2023 11:45:52 +0000 Subject: Extract parseTypeLevelParamsOptional() --- .../java/org/shedlang/compiler/parser/Parser.java | 29 ++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'src/main/java') 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.>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> parseTypeLevelParamsOptional( + TokenIterator 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 tokens) { var start = tokens.position(); -- cgit v1.2.3