elem *type_vla_fix(type **pt) { type *t; elem *e = NULL; for (t = *pt; t; t = t->Tnext) { type_debug(t); if (tybasic(t->Tty) == TYarray && t->Tflags & TFvla && t->Tel) { symbol *s; elem *ec; s = symbol_genauto(tsuns); ec = el_var(s); ec = el_bint(OPeq, tsuns, ec, t->Tel); e = el_combine(e, ec); t->Tel = el_var(s); } } return e; }
void eecontext_parse() { if (eecontext.EEimminent) { type *t; unsigned marksi; symbol *s; //printf("imminent\n"); marksi = globsym.top; eecontext.EEin++; s = symbol_genauto(tspvoid); eecontext.EEelem = func_expr_dtor(TRUE); t = eecontext.EEelem->ET; if (tybasic(t->Tty) != TYvoid) { unsigned op; elem *e; e = el_unat(OPind,t,el_var(s)); op = tyaggregate(t->Tty) ? OPstreq : OPeq; eecontext.EEelem = el_bint(op,t,e,eecontext.EEelem); } eecontext.EEin--; eecontext.EEimminent = 0; eecontext.EEfunc = funcsym_p; eecontext_convs(marksi); // Generate the typedef if (eecontext.EEtypedef && config.fulltypes) { symbol *s; s = symbol_name(eecontext.EEtypedef,SCtypedef,t); cv_outsym(s); symbol_free(s); } } }