dg.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 1,246 行 · 第 1/3 页
C
1,246 行
Action( "( %s, %d )", Tipe( ptr_tipe ), base );
TypDbg( "(%d) Pointer <%s>, base==%d%n", ++TypeIdx, Tipe(ptr_tipe),
base );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
extern struct_list *DBBegNameStruct( char *nm, cg_type tipe, char is_struct ) {
/********************************************************************/
struct_list *st;
is_struct = is_struct;
tipe = tipe;
Action( "DBBegNameStruct(%s)", nm );
st = CGAlloc( sizeof( struct_list ) );
st->num = 0;
st->list = NULL;
// st->me = DBG_NIL_TYPE;
Action( " -> %p%n", st );
return( st );
}
extern struct_list *DBBegStruct( cg_type tipe, char is_struct ) {
//====================================================================
struct_list *st;
is_struct = is_struct;
tipe = tipe;
Action( "DBBegStruct()" );
st = CGAlloc( sizeof( struct_list ) );
st->num = 0;
st->list = NULL;
// st->me = DBG_NIL_TYPE;
Action( " -> %p%n", st );
return( st );
}
static field_member *CreateMember( char *nm, byte strt, byte len,
dbg_type base, uint attr ) {
/******************************************************************/
uint n_len;
field_member *field;
n_len = strlen( nm );
field = CGAlloc( sizeof( field_member ) + n_len );
strcpy( field->name, nm );
field->attr = attr;
field->len = n_len;
field->base = base;
field->b_strt = strt;
field->b_len = len;
return( field );
}
static void AddField( struct_list *st, field_any *field ){
/***************************************************************/
field_entry *curr;
field_entry **owner;
owner = &st->list;
for(;;) {
curr = *owner;
if( curr == NULL ) break;
owner = &curr->next;
}
field->entry.next = NULL;
*owner = field;
st->num++;
}
extern void DBAddBitField(struct_list *st,unsigned_32 off,byte strt,byte len,char *nm,dbg_type base) {
field_member *field;
Action( "DBAddBitField( %p, %l, %d, %d, %s, %d )%n",
st, off, strt, len, nm, base );
field = CreateMember( nm, strt, len, base, 0 );
field->entry.field_type = FIELD_OFFSET;
field->u.off= off;
AddField( st, field );
}
extern void DBAddLocField( struct_list *st, dbg_loc loc, uint attr,
byte strt, byte len, char *nm, dbg_type base ) {
/******************************************************************/
field_member *field;
Action( "DBAddLocField( %p, %s, %d, %d, %d, %s, %d )%n",
st, Location(loc), attr, strt, len, nm, base );
field = CreateMember( nm, strt, len, base, attr );
field->entry.field_type = FIELD_LOC;
field->u.loc = loc;
AddField( st, field );
}
extern void DBAddField(struct_list *st,unsigned_32 off,char *nm,dbg_type base) {
//==============================================================================
field_member *field;
Action( "DBAddField( %p, %l, %s, %d )%n", st, off, nm, base );
field = CreateMember( nm, 0, 0, base, 0 );
field->entry.field_type = FIELD_OFFSET;
field->u.off= off;
AddField( st, field );
}
extern void DBAddStField( struct_list *st, dbg_loc loc, char *nm, uint attr,
dbg_type base ) {
/*************************************************************/
uint n_len;
field_stfield *field;
Action( "DBAddStField( %p, %s, %s, %d, %d )%n",
st, Location(loc),nm, attr, base );
n_len = strlen( nm );
field = CGAlloc( sizeof( field_stfield ) + n_len );
strcpy( field->name, nm );
field->entry.field_type = FIELD_STFIELD;
field->attr = attr;
field->base = base;
AddField( st, field );
}
extern void DBAddMethod( struct_list *st, dbg_loc loc,
uint attr, uint kind,
char *nm, dbg_type base ) {
/******************************************************************/
uint n_len;
field_method *field;
Action( "DBAddMethod( %p, %s, %d, %s, %d )%n",
st, Location(loc), attr, nm, base );
n_len = strlen( nm );
field = CGAlloc( sizeof( field_method ) + n_len );
strcpy( field->name, nm );
field->entry.field_type = FIELD_METHOD;
field->u.loc = loc;
field->attr = attr;
field->kind = kind;
field->len = n_len;
field->base = base;
AddField( st, field );
}
extern void DBAddNestedType( struct_list *st, char *nm,
dbg_type base ) {
/******************************************************************/
uint n_len;
field_nested *field;
Action( "DBAddNestedType( %p, %s, %d )%n",
st, nm, base );
n_len = strlen( nm );
field = CGAlloc( sizeof( field_nested ) + n_len );
strcpy( field->name, nm );
field->entry.field_type = FIELD_NESTED;
field->base = base;
AddField( st, field );
st->is_cnested = TRUE;
}
extern void DBAddInheritance( struct_list *st, dbg_type inherit,
uint attr, uint kind, dbg_loc loc ) {
//===========================================================================
field_bclass *field;
Action( "DBAddInheritance( %p, %d, %p )%n", st, inherit, loc );
field = CGAlloc( sizeof( field_bclass ) );
field->entry.field_type = FIELD_INHERIT;
field->attr = attr;
field->base = inherit;
field->attr = attr;
field->kind = kind;
field->u.adjustor = loc;
AddField( st, field );
}
extern void DBAddBaseInfo( struct_list *st, unsigned_32 vb_off, unsigned_32 esize,
dbg_type vtbl, cg_type ptr_type ){
/*******************************************************************/
st->vtbl_off = vb_off;
st->vtbl_type = vtbl;
st->ptr_type = ptr_type;
st->vtbl_esize = esize;
Action( "DBAddBaseInfo( %p, %d, %d, %d,%s )%n", st, vb_off,
esize, vtbl, Tipe( ptr_type) );
}
extern void DBAddVFuncInfo( struct_list *st, unsigned_32 vfptr_off,
int size,
cg_type vft_cgtype ){
//======================================================================
Action( "DBAddVFuncInfo( %p, %d, %d,%s )%n", st, vfptr_off,
size,Tipe( vft_cgtype) );
}
extern dbg_type DBEndStruct( struct_list *st ) {
//======================================================
field_any *curr;
uint toff;
Action( "DBEndStruct( %p )", st );
TypDbg( "(%d) Struct #fields == %d%n", ++TypeIdx, st->num );
for(;;) {
curr = st->list;
if( curr == NULL ) break;
switch( curr->entry.field_type ) {
case FIELD_OFFSET:{
field_member *field = curr;
toff = field->u.off;
TypDbg( " '%s' base==%d, offset==%d", field->name, field->base,
toff );
if( field->len != 0 ) {
TypDbg( "{%d:%d}", field->b_strt, field->b_len );
}
break;
}
case FIELD_LOC:{
field_member *field = curr;
TypDbg( " '%s' base==%d, attr==%h, location==%s", field->name, field->base,
field->attr, Location( field->u.loc ) );
if( field->len != 0 ) {
TypDbg( "{%d:%d}", field->b_strt, field->b_len );
}
break;
}
case FIELD_INHERIT:{
field_bclass *field = curr;
TypDbg( " inherit base==%d, adjust==%s", field->base,
Location( field->u.adjustor ) );
break;
}
}
TypDbg( "%n" );
st->list = curr->entry.next;
curr->entry.next = NULL;
CGFree( curr );
}
CGFree( st );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
extern char DBNested( char flag ){
/***************************************/
Action( "DBNested( %d )", flag );
return( 0 );
}
extern dbg_type DBStructForward( struct_list *st ) {
//===========================================================
Action( "DBStructForward( %p )", st );
return( DBG_NIL_TYPE );
}
extern enum_list *DBBegEnum( cg_type tipe ) {
//==================================================
enum_list *en;
Action( "DBBegEnum" );
Action( "( %s )%n", Tipe( tipe ) );
en = CGAlloc( sizeof( enum_list ) );
en->num = 0;
en->list = NULL;
en->tipe = tipe;
Action( " -> %p%n", en );
return( en );
}
extern void DBAddConst( enum_list *en, char *nm, signed_32 val ) {
//====================================================================
const_entry *cons;
Action( "DBAddConst( %p, %s, %l )%n", en, nm, val );
cons = CGAlloc( sizeof( const_entry ) );
cons->next = en->list;
en->list = cons;
en->num++;
cons->name = ACopyOf( nm );
cons->val = val;
}
extern dbg_type DBEndEnum( enum_list *en ) {
//==================================================
const_entry *cons;
int tval;
Action( "DBEndEnum( %p )", en );
TypDbg( "(%d) Enumerated base==%s, &consts==%d%n", ++TypeIdx,
Tipe( en->tipe ), en->num );
for(;;) {
cons = en->list;
if( cons == NULL ) break;
tval = cons->val;
TypDbg( " '%s' == %d%n", cons->name, tval );
en->list = cons->next;
cons->next = NULL;
CGFree( cons->name );
CGFree( cons );
}
CGFree( en );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
extern proc_list *DBBegProc( cg_type call_type, dbg_type ret ) {
//=====================================================================
proc_list *pr;
Action( "DBBegProc" );
Action( "( %s, %d )", Tipe( call_type ), ret );
pr = CGAlloc( sizeof( proc_list ) );
pr->num = 0;
pr->list = NULL;
pr->call = call_type;
pr->ret = ret;
Action( " -> %p%n", pr );
return(pr);
}
extern void DBAddMethParms( proc_list *pr, dbg_type cls, dbg_type this ) {
/************************************************************************/
Action( "DBAddMethParms" );
Action( "(%d %d, %d )%n", pr, cls, this );
}
extern void DBAddParm( proc_list *pr, dbg_type tipe ) {
//=========================================================
parm_entry *parm;
parm_entry **owner;
Action( "DBAddParm( %p, %d )", pr, tipe );
parm = CGAlloc( sizeof( parm_entry ) );
pr->num++;
owner = &pr->list;
while( *owner != NULL ) {
owner = &(*owner)->next;
}
*owner = parm;
parm->tipe = tipe;
parm->next = NULL;
}
extern dbg_type DBEndProc( proc_list *pr ) {
//==================================================
parm_entry *parm;
Action( "DBEndProc( %p )", pr );
TypDbg( "(%d) Procedure %s, return==%d, &parms==%d%n", ++TypeIdx,
Tipe(pr->call), pr->ret, pr->num );
for(;;) {
parm = pr->list;
if( parm == NULL ) break;
TypDbg( " type == %d%n", parm->tipe );
pr->list = parm->next;
parm->next = NULL;
CGFree( parm );
}
CGFree( pr );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
extern void DBGenStMem(cg_sym_handle sym,dbg_loc loc) {
//=================================================================
Action( "DBGenStMem" );
Action( "( %s, %s )%n", FEName((pointer)sym), Location( loc ) );
}
extern void DBGenSym(cg_sym_handle sym,dbg_loc loc,int scope) {
//=========================================================================
Action( "DBGenSym" );
Action( "( %s )%n", FEName((pointer)sym) );
if( (FEAttr((pointer)sym) & FE_IMPORT) == 0 ) {
/* Should remember and print FEDbgType(sym) later! */
SymDbg( "GenSym %s'%s' ==> %s%n",
scope ? "(scoped) " : "", FEName((pointer)sym),
Location( loc ) );
}
}
extern dbg_type DBBasedPtr(cg_type ptr_tipe ,dbg_type base,dbg_loc loc) {
//===============================================================================
Action( "DBBasedPtr" );
Action( "( %s, %d )", Tipe( ptr_tipe ), base );
TypDbg( "(%d) BPointer <%s>, base==%d%n seg_loc=%s", ++TypeIdx, Tipe(ptr_tipe),
base, Location( loc ) );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
extern dbg_type DBBasedPtrK(cg_type ptr_tipe ,dbg_type base,
cg_sym_handle sym, int kind ){
//==================================================================
Action( "DBBasedPtrK" );
Action( "( %s, %d %s %d)", Tipe( ptr_tipe ), base,
kind, FEName((pointer)sym) );
Action( " -> %d%n", TypeIdx );
return( TypeIdx );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?