From efa605206a5caf4bf11a6d129ffa6b63745f9d8c Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Sun, 22 Feb 2026 21:52:00 +1100 Subject: [PATCH] Make error printy thingy work --- src/parser/parser.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/parser/parser.c b/src/parser/parser.c index 9bdec32..3c74673 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -27,30 +27,31 @@ ResultType(SolsParser, charptr) createSolsParser(SolsTokens* input) { void createParserError(SolsParser* parser, char* what) { - ResultType(SolsToken, Nothing) prevToken; + ResultType(SolsToken, Nothing) prevToken = Error(SolsToken, Nothing, {}); SolsToken token = parserPeek(parser, 0).as.success; - ResultType(SolsToken, Nothing) nextToken; + ResultType(SolsToken, Nothing) nextToken = Error(SolsToken, Nothing, {}); - // Find tokens for previous line and next line - for (size_t i = parser->current; i > 0; i--) { - prevToken = parserLookAt(parser, i); - if (prevToken.error || prevToken.as.success.line.num != token.line.num) { - break; + // Find tokens for previous line + if (parser->current > 1) { + for (size_t i = parser->current - 1; i > 0; i--) { + ResultType(SolsToken, Nothing) check = parserLookAt(parser, i - 1); + if (check.error) break; + if (check.as.success.line.num != token.line.num) { + prevToken = check; + break; + } } } - if (prevToken.error || prevToken.as.success.line.num == token.line.num) { - prevToken = Error(SolsToken, Nothing, {}); - } - for (size_t i = parser->current; i <= parser->input->count; i++) { - nextToken = parserLookAt(parser, i); - if (nextToken.error || nextToken.as.success.line.num != token.line.num) { + // Find tokens for next line + for (size_t i = parser->current; i < parser->input->count; i++) { + ResultType(SolsToken, Nothing) check = parserLookAt(parser, i); + if (check.error) break; + if (check.as.success.line.num != token.line.num) { + nextToken = check; break; } } - if (nextToken.error || nextToken.as.success.line.num == token.line.num) { - nextToken = Error(SolsToken, Nothing, {}); - } if (parser->errors.count + 1 >= parser->errors.capacity) { parser->errors.capacity *= 2;