Exemplo n.º 1
0
/* This creates a new class based off of a given seed. The name is copied over
   from the seed given.
   If the given class does not take generics, this will also set the default
   type of the newly-made class. */
lily_class *lily_new_class_by_seed(lily_symtab *symtab, const void *seed)
{
    lily_class_seed *class_seed = (lily_class_seed *)seed;
    lily_class *new_class = lily_new_class(symtab, class_seed->name);
    lily_type *type;

    /* If a class doesn't take generics (or isn't the generic class), then
        give it a default type.  */
    if (class_seed->generic_count != 0)
        type = NULL;
    else {
        /* A basic class? Make a quick default type for it. */
        type = make_new_type(new_class);
        new_class->type = type;
        new_class->all_subtypes = type;
    }

    new_class->type = type;
    new_class->is_builtin = 1;
    new_class->generic_count = class_seed->generic_count;
    new_class->flags = 0;
    new_class->is_refcounted = class_seed->is_refcounted;
    new_class->import = symtab->active_import;
    new_class->dynaload_table = class_seed->dynaload_table;

    return new_class;
}
Exemplo n.º 2
0
/* Use this to create a new class that represents an enum. */
lily_class *lily_new_enum(lily_symtab *symtab, const char *name)
{
    lily_class *new_class = lily_new_class(symtab, name);
    new_class->flags |= CLS_IS_ENUM;
    new_class->move_flags = VAL_IS_ENUM;

    return new_class;
}
Exemplo n.º 3
0
/* This creates a new class based off of a given seed. The name is copied over
   from the seed given.
   If the given class does not take generics, this will also set the default
   type of the newly-made class. */
lily_class *lily_new_raw_class(lily_symtab *symtab, const char *name)
{
    lily_class *new_class = lily_new_class(symtab, name);

    new_class->flags |= CLS_IS_BUILTIN;
    new_class->id = 0;
    symtab->next_class_id--;

    return new_class;
}