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

@@ -22,6 +22,41 @@ void mie_module_add_function(struct mie_module *mod, struct mie_func *func)
b_queue_push_back(&mod->m_func, &func->f_base.v_entry);
}
static void cleanup(struct mie_value *value)
{
struct mie_module *module = MIE_MODULE(value);
b_queue_iterator it;
b_queue_iterator_begin(&module->m_records, &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(&module->m_data, &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(&module->m_types, &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(&module->m_func, &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);
}
}
const struct mie_value_type module_value_type = {
.t_id = MIE_VALUE_MODULE,
.t_cleanup = cleanup,
};