void param_dehydrate(param_t **pp) { param_t *p; assert(pp); while ((p = *pp) != NULL && !isdehydrated(p)) { param_debug(p); ph_dehydrate(pp); if (p->Ptype && !isdehydrated(p->Ptype)) type_debug(p->Ptype); type_dehydrate(&p->Ptype); ph_dehydrate(&p->Pident); if (CPP) { el_dehydrate(&p->Pelem); type_dehydrate(&p->Pdeftype); if (p->Pptpl) param_dehydrate(&p->Pptpl); if (p->Psym) symbol_dehydrate(&p->Psym); if (p->PelemToken) token_dehydrate(&p->PelemToken); } pp = &p->Pnext; } }
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); #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 type_dehydrate(type **pt) { type *t; while ((t = *pt) != NULL && !isdehydrated(t)) { ph_dehydrate(pt); #if DEBUG_XSYMGEN /* don't dehydrate types in HEAD when creating XSYM */ if (xsym_gen && (t->Tflags & TFhydrated)) return; #endif type_debug(t); switch (tybasic(t->Tty)) { case TYstruct: case TYenum: case TYmemptr: case TYvtshape: Classsym_dehydrate(&t->Ttag); break; case TYident: ph_dehydrate(&t->Tident); break; case TYtemplate: symbol_dehydrate(&((typetemp_t *)t)->Tsym); param_dehydrate(&t->Tparamtypes); break; case TYarray: if (t->Tflags & TFvla) el_dehydrate(&t->Tel); break; default: if (tyfunc(t->Tty)) { param_dehydrate(&t->Tparamtypes); list_dehydrate(&t->Texcspec, (list_free_fp)type_dehydrate); } #if SCPP else if (t->Talternate && typtr(t->Tty)) type_dehydrate(&t->Talternate); #endif #if MARS else if (t->Tkey && typtr(t->Tty)) type_dehydrate(&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); #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; } } }
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; } }