summaryrefslogtreecommitdiff
path: root/type_checker.c
diff options
context:
space:
mode:
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;
}
}