pch_status PCHWriteTypeSigs( void ) { auto carve_walk_base data; PCHWriteCVIndex( (cv_index)TypeSigGetIndex( type_sigs ) ); CarveWalkAllFree( carveTYPE_SIG, markFreeTypeSig ); CarveWalkAll( carveTYPE_SIG, saveTypeSig, &data ); PCHWriteCVIndex( CARVE_NULL_INDEX ); return( PCHCB_OK ); }
static void saveTypeSig( void *e, carve_walk_base *d ) { TYPE_SIG *s = e; TYPE_SIG *save_next; TYPE_SIG *save_base; TYPE save_type; SYMBOL save_sym; SYMBOL save_dtor; SYMBOL save_default_ctor; SYMBOL save_copy_ctor; if( s->free ) { return; } save_next = s->next; s->next = TypeSigGetIndex( save_next ); save_base = s->base; s->base = TypeSigGetIndex( save_base ); save_type = s->type; s->type = TypeGetIndex( save_type ); save_sym = s->sym; s->sym = SymbolGetIndex( save_sym ); save_dtor = s->dtor; s->dtor = SymbolGetIndex( save_dtor ); save_default_ctor = s->default_ctor; s->default_ctor = SymbolGetIndex( save_default_ctor ); save_copy_ctor = s->copy_ctor; s->copy_ctor = SymbolGetIndex( save_copy_ctor ); PCHWriteCVIndex( d->index ); PCHWriteVar( *s ); s->next = save_next; s->base = save_base; s->type = save_type; s->sym = save_sym; s->dtor = save_dtor; s->default_ctor = save_default_ctor; s->copy_ctor = save_copy_ctor; }