Changeset 64 in dev for BasicCompiler32/WatchList.cpp


Ignore:
Timestamp:
Mar 8, 2007, 2:49:34 AM (18 years ago)
Author:
dai_9181
Message:

すべてのオブジェクトを参照型に切り替えた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/WatchList.cpp

    r63 r64  
    7878    if(PTR_LEVEL(*pType)){
    7979        *pType=MAKE_PTR_TYPE(NATURAL_TYPE(*pType),PTR_LEVEL(*pType)-1);
    80         if((*pType)==DEF_OBJECT){
    81             CClass *pClass = (CClass *)lpIndex;
    82             array_num *= pClass->GetSize();
    83         }
    84         else{
    85             array_num *= GetTypeSize(*pType,-1);
    86         }
     80        array_num *= GetTypeSize(*pType,-1);
    8781    }
    8882    else{
     
    114108    char lpPtrOffset[VN_SIZE];  //第2次配列
    115109    char NestMember[VN_SIZE];   //入れ子メンバ
    116     int RefType;                //"."参照のときは0、"->"参照のときは1
     110    CClass::RefType refType;
    117111    lstrcpy(VarName,member);
    118     if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
     112    if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,refType)) return 0;
    119113
    120114
     
    175169        //入れ子構造の場合
    176170
    177         if(*pType==DEF_OBJECT){
    178             if(RefType!=DEF_OBJECT) return 0;
    179         }
    180         else if(*pType==DEF_PTR_OBJECT){
     171        if(*pType==DEF_OBJECT || *pType==DEF_STRUCT){
     172            if( refType != CClass::Dot ) return 0;
     173
     174            if( *pType==DEF_OBJECT ){
     175                extern HANDLE hDebugProcess;
     176                LONG_PTR lpData;
     177                SIZE_T stAccBytes;
     178                lpData=Debugging_GetVarPtr(pRelativeVar);
     179                if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&stAccBytes)) return -1;
     180                pRelativeVar->dwKind=VAR_DIRECTMEM;
     181            }
     182        }
     183        else if(*pType==DEF_PTR_OBJECT || *pType==DEF_PTR_STRUCT){
    181184            //構造体ポインタ型メンバ変数
    182185
    183186            if(lpPtrOffset[0]){
    184                 if(RefType!=DEF_OBJECT) return 0;
     187                if( refType != CClass::Dot ) return 0;
    185188
    186189                //直接参照に切り替え
     
    190193            }
    191194            else{
    192                 if(RefType!=DEF_PTR_OBJECT) return 0;
     195                if( refType != CClass::Pointer ) return 0;
    193196
    194197                extern HANDLE hDebugProcess;
     
    319322int Debugging_GetVarOffset(char *variable,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
    320323    extern HANDLE hDebugProcess;
    321     int i,i2,i3,RefType;
     324    int i,i2,i3;
    322325    char member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
    323326    ULONG_PTR lpData;
     
    325328
    326329    lstrcpy(VarName,variable);
    327     GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
     330    CClass::RefType refType;
     331    GetVarFormatString(VarName,array,lpPtrOffset,member,refType);
    328332
    329333    LONG_PTR lpIndex;
     
    470474    }
    471475    if(member[0]){
    472         if(*pType==DEF_OBJECT){
     476        if(*pType==DEF_OBJECT || *pType==DEF_STRUCT){
    473477            //実態オブジェクトのメンバを参照(obj.member)
    474             if(RefType!=DEF_OBJECT){
     478            if( refType != CClass::Dot ){
    475479                return 0;
    476480            }
     
    489493            *plpIndex=lp2;
    490494        }
    491         else if(*pType==DEF_PTR_OBJECT){
     495        else if(*pType==DEF_PTR_OBJECT || *pType==DEF_PTR_STRUCT){
    492496            //ポインタオブジェクトが示すメンバを参照
    493497            if(lpPtrOffset[0]){
    494498                //pObj[n].member
    495                 if(RefType!=DEF_OBJECT) return 0;
     499                if( refType != CClass::Dot ) return 0;
    496500                Debugging_SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
    497501
     
    511515            else{
    512516                //pObj->member
    513                 if(RefType!=DEF_PTR_OBJECT) return 0;
     517                if( refType != CClass::Pointer ) return 0;
    514518
    515519                pRelativeVar->offset=Debugging_GetVarPtr(pRelativeVar);
Note: See TracChangeset for help on using the changeset viewer.