diff options
| author | Carson Fleming <cflems@cflems.net> | 2026-07-18 22:34:54 -0700 |
|---|---|---|
| committer | Carson Fleming <cflems@cflems.net> | 2026-07-18 22:46:47 -0700 |
| commit | feb1cac139ca5aa2ba76ac6a0a318bced03d8638 (patch) | |
| tree | e107f774e08daed3dedd5d39345d2b725b2d171d /type_checker.c | |
| parent | 385419f95c6b9c35a7c2a6168f82f7aa4a44e22b (diff) | |
| download | ccc-feb1cac139ca5aa2ba76ac6a0a318bced03d8638.tar.gz | |
loop support
Diffstat (limited to 'type_checker.c')
| -rw-r--r-- | type_checker.c | 14 |
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; } } |
