diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-05-03 17:57:17 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-05-03 17:57:17 +0900 |
| commit | 5e630e9d34f082c5737cf61aa103b1db3c1ed6e8 (patch) | |
| tree | 1db8b06c0a9a70e442268abe9f3bc533144bd5f7 | |
| parent | 79e00de77709e1a8a9a12939c59606e38b27e52f (diff) | |
| download | P4Dcc-5e630e9d34f082c5737cf61aa103b1db3c1ed6e8.tar.gz P4Dcc-5e630e9d34f082c5737cf61aa103b1db3c1ed6e8.tar.zst P4Dcc-5e630e9d34f082c5737cf61aa103b1db3c1ed6e8.zip | |
for stmt
| -rw-r--r-- | main.c | 8 | ||||
| -rw-r--r-- | tests/012.sh | 17 | ||||
| -rw-r--r-- | tests/013.sh | 17 |
3 files changed, 39 insertions, 3 deletions
@@ -852,8 +852,8 @@ void gen_for_stmt(CODEGEN* g, AST* ast) { printf(" # gen_for_stmt\n"); int label = gen_new_label(g); - *g->loop_labels = label; g->loop_labels += 1; + *g->loop_labels = label; gen_expr(g, ast->expr1, GEN_RVAL); printf(".Lbegin%d:\n", label); @@ -875,14 +875,16 @@ void gen_break_stmt(CODEGEN* g, AST* ast) { assert_ast_kind(ast, AST_BREAK_STMT); printf(" # gen_break_stmt\n"); - todo(); + int label = *g->loop_labels; + printf(" jmp .Lend%d\n", label); } void gen_continue_stmt(CODEGEN* g, AST* ast) { assert_ast_kind(ast, AST_CONTINUE_STMT); printf(" # gen_continue_stmt\n"); - todo(); + int label = *g->loop_labels; + printf(" jmp .Lcontinue%d\n", label); } void gen_expr_stmt(CODEGEN* g, AST* ast) { diff --git a/tests/012.sh b/tests/012.sh new file mode 100644 index 0000000..279e3c2 --- /dev/null +++ b/tests/012.sh @@ -0,0 +1,17 @@ +set -e + +bash ../../test_exit_code.sh 25 <<'EOF' +int main() { + int i; + int ret; + i = 0; + ret = 0; + for (i = 0; i < 10; i = i + 1) { + if (i % 2 == 0) { + continue; + } + ret = ret + i; + } + return ret; +} +EOF diff --git a/tests/013.sh b/tests/013.sh new file mode 100644 index 0000000..8381d0e --- /dev/null +++ b/tests/013.sh @@ -0,0 +1,17 @@ +set -e + +bash ../../test_exit_code.sh 66 <<'EOF' +int main() { + int i; + int ret; + i = 0; + ret = 0; + for (i = 0; i < 100; i = i + 1) { + if (i == 12) { + break; + } + ret = ret + i; + } + return ret; +} +EOF |
