diff options
author | Quinn Stephens <quinn@osmora.org> | 2025-06-10 16:49:58 -0400 |
---|---|---|
committer | Quinn Stephens <quinn@osmora.org> | 2025-06-10 16:49:58 -0400 |
commit | cbb0ce85de8f5b8fe282e613bfabb65186ea5b53 (patch) | |
tree | c2acb7dd1bb3371989de28e8fbeb434537fbd70f /src/main.c | |
parent | 047f76389fc9a130fde5393fcc7d5d8b76882f83 (diff) |
Signed-off-by: Quinn Stephens <quinn@osmora.org>
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 37 |
1 files changed, 36 insertions, 1 deletions
@@ -33,7 +33,40 @@ #include "parser.h" #include "parser/ast.h" -static const char *src = "int x;void **ptr;\nvoid *alloc();\nvoid test();\nint main()\n{\n}\n"; +static const char *src = "int x;void **ptr;\nvoid test(void);\nint add(int a, int b);\nint\nmain(int argc, void **argv)\n{\n}\n"; + +static void + +print_param(struct ast_node *param) +{ + if (param->ptr_levels > 0) { + log_debug("found parameter \"%.*s\" (%d-level pointer to %s)\n", param->name_len, param->name, param->ptr_levels, param->type->name); + } else { + log_debug("found parameter \"%.*s\" (%s)\n", param->name_len, param->name, param->type->name); + } +} + +static void +print_locals(struct hashmap *locals) +{ + struct list *list; + struct ast_node *node; + + /* Iterate hashmap rows */ + for (size_t r = 0; r < locals->row_count; r++) { + /* Iterate row entries */ + list = &locals->rows[r]; + node = (struct ast_node *)list->head; + while (node != (struct ast_node *)list) { + if (node->kind == NOK_PARAMETER) { + print_param(node); + } + + node = (struct ast_node *)node->hashmap_entry.list_entry.next; + } + } +} + static void print_func(struct ast_node *func) @@ -43,6 +76,8 @@ print_func(struct ast_node *func) } else { log_debug("found function \"%.*s\" (returns %s)\n", func->name_len, func->name, func->type->name); } + + print_locals(&func->params); } static void |