start rewriting the parser to return with error messages so errors can be caught

This commit is contained in:
2025-07-09 04:58:49 +01:00
parent e234ea074b
commit c4731597f3
22 changed files with 282 additions and 149 deletions

View File

@@ -6,7 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
ParsedValue *parse_list(char *file, DArray *tokens, size_t *index) {
ParsedValueReturn parse_list(char *file, DArray *tokens, size_t *index) {
ParsedValue *parsedValue = checked_malloc(sizeof(ParsedValue));
parsedValue->type = AST_LIST;
DArray *list = checked_malloc(sizeof(DArray));
@@ -19,9 +19,14 @@ ParsedValue *parse_list(char *file, DArray *tokens, size_t *index) {
if (token->type != TOKEN_RBRACKET) {
while (true) {
skip_newlines_and_indents(tokens, index);
ParsedValue *parsedValue = parse_token(file, tokens, index, true);
darray_push(list, parsedValue);
free(parsedValue);
ParsedValueReturn parsedItem = parse_token(file, tokens, index, true);
if (parsedItem.err.exists) {
free_parsed(parsedValue);
free(parsedValue);
return parsedItem;
}
darray_push(list, parsedItem.value);
free(parsedItem.value);
error_if_finished(file, tokens, index);
skip_newlines_and_indents(tokens, index);
error_if_finished(file, tokens, index);
@@ -38,7 +43,7 @@ ParsedValue *parse_list(char *file, DArray *tokens, size_t *index) {
}
}
(*index)++;
return parsedValue;
return (ParsedValueReturn){no_err, parsedValue};
}
void free_parsed_list(void *ptr) {