Exemple #1
0
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;
    }
}
Exemple #2
0
void dealloc_term(Term* term)
{
    term->inputs.clear();
    if (term->type != NULL) {
        type_decref(term->type);
        term->type = NULL;
    }
    term->function = NULL;

    delete term;
}