OVL_EXTERN walk_result FindInternalMod( mod_handle mh, void *d ) { if( !IsInternalMod( mh ) ) return( WR_CONTINUE ); ((internal_mod *)d)->mh = mh; return( WR_STOP ); }
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 ); }
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(); } }