void SymbolLocnDefine( // DEFINE LOCATION SYMBOL TOKEN_LOCN *sym_locn, // - symbol location (NULL for current source file) SYMBOL sym ) // - the symbol { SYM_TOKEN_LOCN *locn = NULL; if( sym_locn != NULL && sym_locn->src_file != NULL ) { locn = SymbolLocnAlloc( &sym->locn ); locn->tl = *sym_locn; sym->flag2 |= SF2_TOKEN_LOCN; } else { DbgVerify( sym_locn == NULL , "SymbolLocnDefine -- bad location" ); if( SrcFilesOpen() ) { locn = SymbolLocnAlloc( &sym->locn ); SrcFileGetTokenLocn( &locn->tl ); sym->flag2 |= SF2_TOKEN_LOCN; } } }
static SYMBOL push_inline_sym( // PUSH AN INLINE SYMBOL SYMBOL model ) // - model for symbol { SYMBOL sym; // - new symbol SYM_TOKEN_LOCN* locn; // - new location entry for symbol sym = VstkPush( &stack_inline_args ); *sym = *model; if( model->locn != NULL ) { sym->flag2 &= ~SF2_CG_HANDLE; sym->locn = NULL; locn = SymbolLocnAlloc( &sym->locn ); locn->tl = model->locn->tl; } return sym; }
back_handle FEBack( // GET BACK HANDLE FOR A SYMBOL SYMBOL sym ) // - the symbol { SCOPE scope; // - scope for symbol SYMBOL check_sym; // - SYMBOL temp void* cg_handle; // - handle for symbol #ifndef NDEBUG SYMBOL orig // - original symbol = sym; #endif check_sym = SymIsAnonymous( sym ); if( check_sym != NULL ) { sym = check_sym; } if( sym->flag2 & SF2_CG_HANDLE ) { cg_handle = sym->locn->u.cg_handle; } else { cg_handle = BENewBack( (cg_sym_handle)sym ); if( NULL != cg_handle ) { SYM_TOKEN_LOCN* locn = SymbolLocnAlloc( &sym->locn ); locn->u.cg_handle = cg_handle; scope = SymScope( sym ); if( scope != NULL ) { switch( scope->id ) { case SCOPE_CLASS : cgBackStatHandleAdd( sym ); break; case SCOPE_FUNCTION : case SCOPE_BLOCK : if( SymIsStaticData( sym ) ) { cgBackStatHandleAdd( sym ); } break; } } sym->flag2 &= ~SF2_HDL_MASK; sym->flag2 |= SF2_CG_HANDLE; } } #ifndef NDEBUG if( PragDbgToggle.auxinfo ) { printf( "FEBack( %p ) -> bh[%p]\n", orig, cg_handle ); } #endif return cg_handle; }