コード例 #1
0
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 );
}
コード例 #2
0
//
//  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;
        }
    }
}
コード例 #3
0
static void dumpNodeType( PTREE node )
{
    if( node->type == NULL ) {
        printf( " no type" F_EOL );
    } else {
        printf( F_EOL );
        DumpFullType( node->type );
    }
}
コード例 #4
0
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 );
    }
}
コード例 #5
0
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 );
    }
}