void migrate_list_value(Value* value, Migration* migration) { if (!list_value_may_need_migration(value, migration)) return; touch(value); for (int i=0; i < list_length(value); i++) { Value* element = list_get(value, i); migrate_value(element, migration); } // Migrate type if this is a user-type instance. // Future: We could try to reshape the value if the new type has different fields. Type* newType = migrate_type(value->value_type, migration); if (newType != value->value_type) { if (newType == NULL) newType = TYPES.list; else type_incref(newType); type_decref(value->value_type); value->value_type = newType; } }
void dealloc_term(Term* term) { term->inputs.clear(); if (term->type != NULL) { type_decref(term->type); term->type = NULL; } term->function = NULL; delete term; }