PTREE DataDtorObjPush( // START OF DTORABLE OBJECT PTREE expr, // - expression to be decorated TYPE type, // - type of object SYMBOL init_sym, // - symbol being initialized target_offset_t offset ) // - offset of object being initialized { TYPE dtor_type; // - type for dtor #ifndef NDEBUG if( PragDbgToggle.dump_data_dtor ) { printf( "DataDtorObjPush -- symbol %s\n" " -- offset %x\n" " -- " , DbgSymNameFull( init_sym ) , offset ); DumpFullType( type ); } #endif dtor_type = type; if( NULL != ArrayType( dtor_type ) ) { dtor_type = ArrayBaseType( dtor_type ); } CDoptDtorBuild( dtor_type ); FunctionHasRegistration(); return PtdObjPush( expr, type, init_sym, offset ); }
// // SYMBOL-TABLE FUNCTIONS // void DumpSymbol( // DUMP SYMBOL ENTRY void *_sym ) // - symbol { SYMBOL sym = _sym; VBUF vbuf; static char const *ids[] = { #define SC_DEF(a) #a SC_DEFS #undef SC_DEF }; if( sym != NULL ) { printf( "SYMBOL" F_BADDR " next" F_PTR " thread" F_PTR " sym_type" F_PTR " name" F_PTR " cg_handle" F_PTR F_NL " u" F_PTR " id=" F_STRING " flag" F_HEX_1 " flag2" F_HEX_1 " segid" F_HEX_2 F_NL " symbol-name=" F_QSTRING F_EOL , sym , sym->next , sym->thread , sym->sym_type , sym->name , ( sym->flag2 & SF2_TOKEN_LOCN ) ? sym->locn->u.cg_handle : 0 , sym->u.tinfo , ids[sym->id] , sym->flag , sym->flag2 , sym->segid , FormatSym( sym, &vbuf ) ); if( sym->sym_type != NULL ) { DumpFullType( sym->sym_type ); } VbufFree( &vbuf ); if( sym->flag2 & SF2_TOKEN_LOCN ) { dumpLocation( &sym->locn->tl ); } switch( sym->id ) { case SC_CLASS_TEMPLATE: DumpTemplateInfo( sym->u.tinfo ); break; case SC_NAMESPACE: dumpNameSpaceInfo( sym->u.ns ); break; } } }
static void dumpNodeType( PTREE node ) { if( node->type == NULL ) { printf( " no type" F_EOL ); } else { printf( F_EOL ); DumpFullType( node->type ); } }
static void dumpFnType( // DUMP EXTRA INFO FOR FUNCTION TYPE tp ) // - type { unsigned index; TYPE * arg_list; if( ( tp != NULL ) && ( tp->u.f.args != NULL ) ) { for( arg_list = tp->u.f.args->type_list, index = 0 ; index < tp->u.f.args->num_args ; ++ arg_list, ++ index ) { printf( "function arg[%d]:\n", index + 1 ); DumpFullType( *arg_list ); } printf( "--end of function arguments--" F_EOL ); } }
void DumpInitInfo( void *v_info ) // dump stack entry containing info about data initialization { INITIALIZE_INFO *info = (INITIALIZE_INFO *)v_info; static char *entryName[3] = { "DE_ROOT_TYPE", "DE_BRACE", "DE_TYPE" }; printf( "Stack Entry" F_BADDR " stack" F_ADDR " prev" F_ADDR " entry=" F_STRING F_NL " base" F_HEX_2 " offset" F_HEX_2 " mem_size" F_HEX_2 " padded_size" F_HEX_2 , info , info->stack , info->previous , entryName[info->entry] , info->base , info->offset , info->mem_size , info->padded_size ); if( info->entry != DE_BRACE ) { printf( " target=" ); switch( info->target ) { case DT_CLASS: printf( "(CLASS)" " stop" F_ADDR " curr" F_ADDR F_EOL , info->u.c.stop , info->u.c.curr ); break; case DT_ARRAY: printf( "(ARRAY)" " index" F_HEX_2 F_EOL , info->u.a.index ); break; case DT_BITFIELD: printf( "(BITFIELD)" " mask" F_HEX_4 F_EOL , info->u.b.mask ); break; case DT_SCALAR: printf( "(SCALAR)" " bitf" F_HEX_1 F_EOL , info->u.s.bitf ); break; case DT_ERROR: printf( "(ERROR)" F_EOL ); break; default: printf( "(UNKNOWN=" F_HEX_4 ")" F_EOL , info->target ); break; } if( info->type != NULL ) { DumpFullType( info->type ); } } else { printf( F_EOL ); } }