コード例 #1
0
static dt_t *createTsarrayDt(dt_t * dt, Type *t)
{
    assert(dt != NULL);
    size_t eoa_size = dt_size(dt);
    if (eoa_size == t->size())
        return dt;
    else
    {
        TypeSArray * tsa = (TypeSArray *) t->toBasetype();
        assert(tsa->ty == Tsarray);

        size_t dim = tsa->dim->toInteger();
        dt_t * adt = NULL;
        dt_t ** padt = & adt;

        if (eoa_size * dim == eoa_size)
        {
            for (size_t i = 0; i < dim; i++)
                padt = dtcontainer(padt, NULL, dt);
        }
        else
        {
            assert(tsa->size(0) % eoa_size == 0);
            for (size_t i = 0; i < dim; i++)
                padt = dtcontainer(padt, NULL,
                                   createTsarrayDt(dt, tsa->next));
        }
        dt_t * cdt = NULL;
        dtcontainer(& cdt, t, adt);
        return cdt;
    }
}