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; } }