diff --git a/src/test.nim b/src/test.nim index 05d47f5..96568d9 100644 --- a/src/test.nim +++ b/src/test.nim @@ -109,6 +109,38 @@ proc initParser(str: string): ParserResult = tokens: newSeq[Token](), ).ok() +func ch(expectedChars: set[char]): (Parser -> ParserResult) {.inline.} = + return func(parser: Parser): ParserResult = + let state = parser.state + let newIndex = state.position + 1 + + if newIndex > (state.stream.len - 1): + return err(ParserError( + kind: endOfStringErr, + expected: &"{expectedChars.prettyExpectedSet()}", + index: newIndex, + parser: parser, + )) + else: + let foundChar = state.stream[newIndex] + if foundChar in expectedChars: + return Parser( + state: ParserState( + stream: state.stream, + position: newIndex, + lastPosition: parser.state.position, + ), + tokens: parser.tokens & Token(value: foundChar) + ).ok() + else: + return err(ParserError( + kind: charMismatchErr, + unexpected: &"{foundChar}", + expected: &"{expectedChars.prettyExpectedSet()}", + index: newIndex, + parser: parser, + )) + func ch(expectedChar: char): (Parser -> ParserResult) {.inline.} = return func(parser: Parser): ParserResult = let state = parser.state