summaryrefslogtreecommitdiff
path: root/type_checker.c
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2026-07-18 22:34:54 -0700
committerCarson Fleming <cflems@cflems.net>2026-07-18 22:46:47 -0700
commitfeb1cac139ca5aa2ba76ac6a0a318bced03d8638 (patch)
treee107f774e08daed3dedd5d39345d2b725b2d171d /type_checker.c
parent385419f95c6b9c35a7c2a6168f82f7aa4a44e22b (diff)
downloadccc-feb1cac139ca5aa2ba76ac6a0a318bced03d8638.tar.gz
loop support
Diffstat (limited to 'type_checker.c')
-rw-r--r--type_checker.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/type_checker.c b/type_checker.c
index aabd7c9..d8534e2 100644
--- a/type_checker.c
+++ b/type_checker.c
@@ -184,6 +184,17 @@ static void type_check_if(struct if_node* node) {
exit_scope(node->scope);
}
+static void type_check_loop(struct loop_node* node) {
+ enter_scope(node->scope);
+
+ if (node->init != NULL) type_check_expr(node->init);
+ if (node->cond != NULL) type_check_expr(node->cond);
+ if (node->incr != NULL) type_check_expr(node->incr);
+ type_check_stmt(node->body);
+
+ exit_scope(node->scope);
+}
+
static void type_check_stmt(struct stmt_node* node) {
switch (node->type) {
case STMT_EMPTY:
@@ -203,6 +214,9 @@ static void type_check_stmt(struct stmt_node* node) {
case STMT_IF:
type_check_if(&node->inner.if_);
break;
+ case STMT_LOOP:
+ type_check_loop(&node->inner.loop);
+ break;
}
}