diff options
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 |