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 ); }
pch_status PCHInitRewrites( bool writing ) { if( writing ) { PCHWriteCVIndex( CarveLastValidIndex( carveREWRITE ) ); PCHWriteCVIndex( CarveLastValidIndex( carveREWRITE_TOKENS ) ); PCHWriteCVIndex( CarveLastValidIndex( carveSRCFILE_HANDLE ) ); } else { carveREWRITE = CarveRestart( carveREWRITE ); CarveMapOptimize( carveREWRITE, PCHReadCVIndex() ); carveREWRITE_TOKENS = CarveRestart( carveREWRITE_TOKENS ); CarveMapOptimize( carveREWRITE_TOKENS, PCHReadCVIndex() ); carveSRCFILE_HANDLE = CarveRestart( carveSRCFILE_HANDLE ); CarveMapOptimize( carveSRCFILE_HANDLE, PCHReadCVIndex() ); } return( PCHCB_OK ); }
static void saveRewrite( void *e, carve_walk_base *d ) { REWRITE *s = e; REWRITE_TOKENS *save_list; REWRITE_TOKENS *save_curr; SRCFILE_HANDLE *h; uint_8 *save_stream; if( s->free ) { return; } save_stream = s->stream; save_list = s->list; save_curr = s->curr; s->stream = _TokenPosGetIndex( s ); // must be first s->list = RewriteTokensGetIndex( save_list ); s->curr = RewriteTokensGetIndex( save_curr ); PCHWriteCVIndex( d->index ); PCHWriteVar( *s ); for( h = s->srcfiles_refd; h != NULL; h = h->next ) { SrcFilePCHWrite( h->srcfile ); } PCHWriteCVIndexTerm(); s->list = save_list; s->curr = save_curr; s->stream = save_stream; }
pch_status PCHInitConstantPool( bool writing ) { if( writing ) { PCHWriteCVIndex( CarveLastValidIndex( carvePOOL_CON ) ); } else { carvePOOL_CON = CarveRestart( carvePOOL_CON ); CarveMapOptimize( carvePOOL_CON, PCHReadCVIndex() ); } return( PCHCB_OK ); }
pch_status PCHInitTypeSigs( bool writing ) { if( writing ) { PCHWriteCVIndex( CarveLastValidIndex( carveTYPE_SIG ) ); } else { carveTYPE_SIG = CarveRestart( carveTYPE_SIG ); CarveMapOptimize( carveTYPE_SIG, PCHReadCVIndex() ); } return( PCHCB_OK ); }
pch_status PCHInitTokenLocns( bool writing ) { if( writing ) { PCHWriteCVIndex( CarveLastValidIndex( carveSYMBOL_LOCN ) ); } else { carveSYMBOL_LOCN = CarveRestart( carveSYMBOL_LOCN ); CarveMapOptimize( carveSYMBOL_LOCN, PCHReadCVIndex() ); } return( PCHCB_OK ); }
static void saveRewriteTokens( void *e, carve_walk_base *d ) { REWRITE_TOKENS *s = e; REWRITE_TOKENS *save_next; if( s->free ) { return; } save_next = s->next; s->next = RewriteTokensGetIndex( save_next ); PCHWriteCVIndex( d->index ); PCHWriteVar( *s ); s->next = save_next; }
static void saveConstant( void *e, carve_walk_base *d ) { POOL_CON *fcon = e; POOL_CON *save_next; if( fcon->free ) { return; } save_next = fcon->next; fcon->next = ConstantPoolGetIndex( save_next ); PCHWriteCVIndex( d->index ); PCHWriteVar( *fcon ); if( fcon->flt ) { PCHWrite( fcon->u.s.fp_constant, fcon->u.s.len ); } fcon->next = save_next; }
static void saveTokenLocn( void *e, carve_walk_base *d ) { SYM_TOKEN_LOCN *b = e; SRCFILE save_src_file; if( b->u.dwh == -1 ) { return; } DbgAssert( b->u.dwh == 0 ); save_src_file = b->tl.src_file; b->tl.src_file = SrcFileGetIndex( save_src_file ); #ifndef NDEBUG if( b->u.dwh != 0 ) { CFatal( "token locn contains dwarf info!" ); } #endif PCHWriteCVIndex( d->index ); PCHWriteVar( *b ); b->tl.src_file = save_src_file; }
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; }