Example #1
0
lily_tie *make_variant_default(lily_symtab *symtab,
        lily_variant_class *variant)
{
    /* This makes it easier to destroy, but makes no other difference. */
    lily_type *enum_type = variant->parent->self_type;

    lily_instance_val *iv = lily_new_instance_val();
    iv->instance_id = variant->parent->id;
    iv->variant_id = variant->variant_id;
    iv->num_values = 0;

    lily_tie *ret = make_new_literal_of_type(symtab, enum_type);
    ret->value.instance = iv;
    ret->move_flags = VAL_IS_ENUM;

    return ret;
}
Example #2
0
lily_tie *make_variant_default(lily_symtab *symtab,
        lily_variant_class *variant)
{
    /* This makes it easier to destroy, but makes no other difference. */
    lily_type *enum_self_type = variant->parent->all_subtypes;

    lily_instance_val *iv = lily_new_instance_val();
    iv->instance_id = variant->parent->id;
    iv->variant_id = variant->variant_id;
    iv->num_values = 0;

    lily_tie *ret = make_new_literal_of_type(symtab, enum_self_type);
    ret->value.instance = iv;
    ret->move_flags = VAL_IS_ENUM;
    /* This variant may not be interesting, but it could be swapped out with a
       variant that is tagged. As a precaution, put it down as retain. */
    if (variant->parent->generic_count != 0)
        ret->move_flags |= VAL_IS_GC_SPECULATIVE;

    return ret;
}
Example #3
0
static lily_tie *make_new_literal(lily_symtab *symtab, lily_class *cls)
{
    /* Non-variant literals always have a default type, so this is safe. */
    return make_new_literal_of_type(symtab, cls->type);
}