summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorQuinn Stephens <quinn@osmora.org>2025-06-10 16:49:58 -0400
committerQuinn Stephens <quinn@osmora.org>2025-06-10 16:49:58 -0400
commitcbb0ce85de8f5b8fe282e613bfabb65186ea5b53 (patch)
treec2acb7dd1bb3371989de28e8fbeb434537fbd70f /src/main.c
parent047f76389fc9a130fde5393fcc7d5d8b76882f83 (diff)
parser: Parse parameter declarationsHEADmain
Signed-off-by: Quinn Stephens <quinn@osmora.org>
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c
index 4387972..ab5d4e8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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