mie: implement value cleanup
This commit is contained in:
25
mie/block.c
25
mie/block.c
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user