Exemplo n.º 1
0
OVL_EXTERN walk_result FindInternalMod( mod_handle mh, void *d )
{
    if( !IsInternalMod( mh ) )
        return( WR_CONTINUE );
    ((internal_mod *)d)->mh = mh;
    return( WR_STOP );
}
Exemplo n.º 2
0
inspect_type WndGetExprSPInspectType( address *paddr )
{
    sym_info    info;
    DIPHDL( sym, sh );

    LValue( ExprSP );
    *paddr = NilAddr;
    if( ExprSP->info.kind == TK_FUNCTION ) {
        ExprValue( ExprSP );
        *paddr = ExprSP->v.addr;
        PopEntry();
        return( INSP_CODE );
    } else if( (ExprSP->flags & SF_LOCATION) && ExprSP->th != NULL && !IsInternalMod( TypeMod( ExprSP->th ) ) ) {
        if( ExprSP->v.loc.num == 1 && ExprSP->v.loc.e[0].type == LT_ADDR ) {
            *paddr = ExprSP->v.loc.e[0].u.addr;
        }
        PopEntry();
        return( INSP_DATA );
    } else {
        if( (ExprSP->flags & SF_LOCATION) && ExprSP->v.loc.e[0].type == LT_ADDR ) {
            *paddr = ExprSP->v.loc.e[0].u.addr;
        } else if( ExprSP->info.kind == TK_ADDRESS
                || ExprSP->info.kind == TK_POINTER ) {
            *paddr = ExprSP->v.addr;
        }
        if( !IS_NIL_ADDR( (*paddr) ) ) {
            AddrFloat( paddr );
            if( DeAliasAddrSym( NO_MOD, *paddr, sh ) != SR_NONE ) {
                SymInfo( sh, ExprSP->lc, &info );
                PopEntry();
                switch( info.kind ) {
                case SK_CODE:
                case SK_PROCEDURE:
                    return( INSP_CODE );
                    break;
                default:
                    return( INSP_RAW_DATA );
                    break;
                }
            }
        }
    }
    ExprValue( ExprSP );
    MakeMemoryAddr( TRUE, EXPR_DATA, paddr );
    return( INSP_RAW_DATA );
}
Exemplo n.º 3
0
static bool ProcPending( void )
{
    for( ;; ) {
        for( ;; ) {
            if( InpStack == NULL ) return( FALSE );
            if( InpStack->type & INP_NEW_LANG ) {
                InpStack->type &= ~INP_NEW_LANG;
                if( (CodeAddrMod != NO_MOD) && !IsInternalMod( CodeAddrMod ) ) {
                    NewLang( ModSrcLang( CodeAddrMod ) );
                }
            }
            if( InpStack->type & INP_STOP_PURGE ) return( FALSE );
            if( InpStack->type & INP_NO_CMD ) break;
            if( CurrToken == T_LINE_SEPARATOR ) break;
            _SwitchSet( SW_CMD_INTERACTIVE, !(InpStack->type & (INP_BREAK_POINT|INP_HOOK)));
            _SwitchSet( SW_IN_REPLAY_MODE, (InpStack->type & INP_REPLAYED) );
            ProcACmd();
        }
        if( InpStack->rtn( InpStack->handle, INP_RTN_EOL ) ) continue;
        PopInpStack();
    }
}