From 065d60fc962136d03a8a74eb235901aa14d87593 Mon Sep 17 00:00:00 2001 From: Quinn Stephens Date: Mon, 9 Jun 2025 21:49:07 -0400 Subject: parser: Store symbols in a hashmap Signed-off-by: Quinn Stephens --- src/main.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 6487e03..645656c 100644 --- a/src/main.c +++ b/src/main.c @@ -31,13 +31,43 @@ #include "lexer.h" #include "log.h" #include "parser.h" +#include "parser/ast.h" static const char *src = "void test();\nint main();"; +static void +print_func(struct ast_node *func) +{ + log_debug("found function \"%.*s\" (return type %s)\n", func->name_len, func->name, func->type->name); +} + +static void +print_syms(struct hashmap *syms) +{ + struct list *list; + struct ast_node *node; + + /* Iterate hashmap rows */ + for (size_t r = 0; r < syms->row_count; r++) { + /* Iterate row entries */ + list = &syms->rows[r]; + node = (struct ast_node *)list->head; + while (node != (struct ast_node *)list) { + if (node->kind == NOK_FUNCTION) { + print_func(node); + } + + node = (struct ast_node *)node->hashmap_entry.list_entry.next; + } + } +} + int main(int argc, char **argv) { struct lexer lexer; + struct parser parser; + bool success; (void)argc; (void)argv; @@ -47,9 +77,12 @@ main(int argc, char **argv) return EXIT_FAILURE; } - if (!parser_parse(&lexer)) { - return EXIT_FAILURE; + parser.lexer = &lexer; + parser.syms.rows = NULL; + success = parser_parse(&parser); + if (parser.syms.rows != NULL) { + print_syms(&parser.syms); } - return EXIT_SUCCESS; + return success ? EXIT_SUCCESS:EXIT_FAILURE; } -- cgit v1.2.3