Support branch statements break/continue/fallthrough

This commit is contained in:
gingerBill
2023-07-19 14:19:01 +01:00
parent 184563bbe1
commit b2edab193f
2 changed files with 14 additions and 8 deletions
+12 -2
View File
@@ -68,7 +68,7 @@ gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool i
p->children.allocator = a;
// p->defer_stmts.allocator = a;
// p->blocks.allocator = a;
// p->branch_blocks.allocator = a;
p->branch_blocks.allocator = a;
p->context_stack.allocator = a;
p->scope_stack.allocator = a;
map_init(&p->variable_map);
@@ -128,7 +128,7 @@ gb_internal cgProcedure *cg_procedure_create_dummy(cgModule *m, String const &li
p->children.allocator = a;
// p->defer_stmts.allocator = a;
// p->blocks.allocator = a;
// p->branch_blocks.allocator = a;
p->branch_blocks.allocator = a;
p->scope_stack.allocator = a;
p->context_stack.allocator = a;
map_init(&p->variable_map);
@@ -165,6 +165,16 @@ gb_internal void cg_procedure_begin(cgProcedure *p) {
return;
}
DeclInfo *decl = decl_info_of_entity(p->entity);
if (decl != nullptr) {
for_array(i, decl->labels) {
BlockLabel bl = decl->labels[i];
cgBranchBlocks bb = {bl.label, nullptr, nullptr};
array_add(&p->branch_blocks, bb);
}
}
GB_ASSERT(p->type->kind == Type_Proc);
TypeProc *pt = &p->type->Proc;
if (pt->params == nullptr) {