void type_hydrate(type **pt) { type *t; assert(pt); while (isdehydrated(*pt)) { t = (type *) ph_hydrate(pt); type_debug(t); #if !TX86 if (t->Tflags & TFhydrated) return; #if SOURCE_4TYPES t->Tsrcpos.Sfilnum += File_Hydrate_Num; /* file number relative header build */ #endif t->Tflags |= TFhydrated; #endif switch (tybasic(t->Tty)) { case TYstruct: case TYenum: case TYmemptr: case TYvtshape: // Cannot assume symbol is hydrated, because entire HX file // may not have been hydrated. Classsym_hydrate(&t->Ttag); symbol_debug(t->Ttag); break; case TYident: ph_hydrate(&t->Tident); break; case TYtemplate: symbol_hydrate(&((typetemp_t *)t)->Tsym); param_hydrate(&t->Tparamtypes); break; case TYarray: if (t->Tflags & TFvla) el_hydrate(&t->Tel); break; default: if (tyfunc(t->Tty)) { param_hydrate(&t->Tparamtypes); list_hydrate(&t->Texcspec, (list_free_fp)type_hydrate); } #if SCPP else if (t->Talternate && typtr(t->Tty)) type_hydrate(&t->Talternate); #endif #if MARS else if (t->Tkey && typtr(t->Tty)) type_hydrate(&t->Tkey); #endif break; } pt = &t->Tnext; } }
void param_hydrate(param_t **pp) { param_t *p; assert(pp); if (isdehydrated(*pp)) { while (*pp) { assert(isdehydrated(*pp)); p = (param_t *) ph_hydrate(pp); param_debug(p); type_hydrate(&p->Ptype); if (p->Ptype) type_debug(p->Ptype); ph_hydrate(&p->Pident); if (CPP) { el_hydrate(&p->Pelem); if (p->Pelem) elem_debug(p->Pelem); type_hydrate(&p->Pdeftype); if (p->Pptpl) param_hydrate(&p->Pptpl); if (p->Psym) symbol_hydrate(&p->Psym); if (p->PelemToken) token_hydrate(&p->PelemToken); } pp = &p->Pnext; } } }
void type_hydrate(type **pt) { type *t; assert(pt); while (isdehydrated(*pt)) { t = (type *) ph_hydrate(pt); type_debug(t); switch (tybasic(t->Tty)) { case TYstruct: case TYenum: case TYmemptr: case TYvtshape: // Cannot assume symbol is hydrated, because entire HX file // may not have been hydrated. Classsym_hydrate(&t->Ttag); symbol_debug(t->Ttag); break; case TYident: ph_hydrate(&t->Tident); break; case TYtemplate: symbol_hydrate(&((typetemp_t *)t)->Tsym); param_hydrate(&t->Tparamtypes); break; case TYarray: if (t->Tflags & TFvla) el_hydrate(&t->Tel); break; default: if (tyfunc(t->Tty)) { param_hydrate(&t->Tparamtypes); list_hydrate(&t->Texcspec, (list_free_fp)type_hydrate); } else if (t->Talternate && typtr(t->Tty)) type_hydrate(&t->Talternate); else if (t->Tkey && typtr(t->Tty)) type_hydrate(&t->Tkey); break; } pt = &t->Tnext; } }
void param_hydrate(param_t **pp) { param_t *p; assert(pp); if (isdehydrated(*pp)) { while (*pp) { assert(isdehydrated(*pp)); p = (param_t *) ph_hydrate(pp); #if SOURCE_4PARAMS p->Psrcpos.Sfilnum += File_Hydrate_Num; /* file number relative header build */ #endif param_debug(p); type_hydrate(&p->Ptype); if (p->Ptype) type_debug(p->Ptype); ph_hydrate(&p->Pident); if (CPP) { el_hydrate(&p->Pelem); if (p->Pelem) elem_debug(p->Pelem); type_hydrate(&p->Pdeftype); if (p->Pptpl) param_hydrate(&p->Pptpl); if (p->Psym) symbol_hydrate(&p->Psym); if (p->PelemToken) token_hydrate(&p->PelemToken); } pp = &p->Pnext; } } }