parse_issue_10 #11

Merged
omicron merged 2 commits from parse_issue_10 into main 2025-04-08 23:20:44 +00:00
4 changed files with 42 additions and 3 deletions

View File

@ -136,5 +136,6 @@ parse_result_t parse_statement(tokenlist_entry_t *current) {
} }
parse_result_t parse(tokenlist_entry_t *current) { parse_result_t parse(tokenlist_entry_t *current) {
current = tokenlist_skip_trivia(current);
return parse_many(current, NODE_PROGRAM, true, parse_statement); return parse_many(current, NODE_PROGRAM, true, parse_statement);
} }

View File

@ -0,0 +1,5 @@
; sample program with trivia on the head of the tokenlist
_start:
xor rax, rax
call exit

View File

@ -2,9 +2,11 @@
extern MunitTest ast_tests[]; extern MunitTest ast_tests[];
extern MunitTest lexer_tests[]; extern MunitTest lexer_tests[];
extern MunitTest regression_tests[];
int main(int argc, char *argv[MUNIT_ARRAY_PARAM(argc + 1)]) { int main(int argc, char *argv[MUNIT_ARRAY_PARAM(argc + 1)]) {
MunitSuite suites[] = { MunitSuite suites[] = {
{"/regression", regression_tests, nullptr, 1, MUNIT_SUITE_OPTION_NONE},
{"/ast", ast_tests, nullptr, 1, MUNIT_SUITE_OPTION_NONE}, {"/ast", ast_tests, nullptr, 1, MUNIT_SUITE_OPTION_NONE},
{"/lexer", lexer_tests, nullptr, 1, MUNIT_SUITE_OPTION_NONE}, {"/lexer", lexer_tests, nullptr, 1, MUNIT_SUITE_OPTION_NONE},
{nullptr, nullptr, nullptr, 0, MUNIT_SUITE_OPTION_NONE}, {nullptr, nullptr, nullptr, 0, MUNIT_SUITE_OPTION_NONE},

31
tests/regression.c Normal file
View File

@ -0,0 +1,31 @@
#include "../src/ast.h"
#include "../src/parser/parser.h"
#include "munit.h"
MunitResult test_regression_trivia_head(const MunitParameter params[], void *data) {
(void)params;
(void)data;
lexer_t *lex = &(lexer_t){};
error_t *err = lexer_open(lex, "tests/input/regression/test_trivia_head.asm");
munit_assert_null(err);
tokenlist_t *list;
err = tokenlist_alloc(&list);
munit_assert_null(err);
err = tokenlist_fill(list, lex);
munit_assert_null(err);
parse_result_t result = parse(list->head);
munit_assert_null(result.err);
munit_assert_null(result.next);
ast_node_free(result.node);
tokenlist_free(list);
}
MunitTest regression_tests[] = {
{"/trivia_head", test_regression_trivia_head, nullptr, nullptr, MUNIT_TEST_OPTION_NONE, nullptr},
{nullptr, nullptr, nullptr, nullptr, MUNIT_TEST_OPTION_NONE, nullptr}
};