mie: implement value cleanup

This commit is contained in:
2025-04-13 19:25:23 +01:00
parent 44aec9a121
commit a7233a6cf6
6 changed files with 102 additions and 10 deletions

View File

@@ -78,7 +78,32 @@ static struct mie_type *get_type(struct mie_value *v)
return &label_type;
}
static void cleanup(struct mie_value *value)
{
struct mie_block *block = MIE_BLOCK(value);
b_queue_iterator it;
b_queue_iterator_begin(&block->b_phi, &it);
while (b_queue_iterator_is_valid(&it)) {
struct mie_value *v = b_unbox(struct mie_value, it.entry, v_entry);
b_queue_iterator_erase(&it);
mie_value_destroy(v);
}
b_queue_iterator_begin(&block->b_instr, &it);
while (b_queue_iterator_is_valid(&it)) {
struct mie_value *v = b_unbox(struct mie_value, it.entry, v_entry);
b_queue_iterator_erase(&it);
mie_value_destroy(v);
}
if (block->b_terminator) {
mie_value_destroy(MIE_VALUE(block->b_terminator));
}
}
const struct mie_value_type block_value_type = {
.t_id = MIE_VALUE_BLOCK,
.t_get_type = get_type,
.t_cleanup = cleanup,
};