Changeset 78 in dev for BasicCompiler_Common/WatchList.cpp


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

CTypeDef → TypeDef
Houseクラスを追加。
オーバーロードレベルの種類を追加(レベル1に挿入)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/WatchList.cpp

    r76 r78  
    338338    // ローカル変数
    339339    /////////////////
    340     const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( VarName );
    341     if( pVar ){
    342         //ポインタ変数の場合
    343         if( pVar->IsPointer() ){
    344             if( !pVar->IsArray() ){
    345                 lstrcpy(lpPtrOffset,array);
    346                 array[0]=0;
    347             }
     340    if( UserProc::IsLocalAreaCompiling() ){
     341        const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( VarName );
     342
     343        if( pVar ){
     344            //ポインタ変数の場合
     345            if( pVar->IsPointer() ){
     346                if( !pVar->IsArray() ){
     347                    lstrcpy(lpPtrOffset,array);
     348                    array[0]=0;
     349                }
     350            }
     351            else{
     352                if(lpPtrOffset[0]) return 0;
     353            }
     354
     355            pRelativeVar->offset = pVar->offset;
     356            if( pVar->IsRef() ){
     357                pRelativeVar->dwKind=VAR_REFLOCAL;
     358            }
     359            else{
     360                pRelativeVar->dwKind=VAR_LOCAL;
     361            }
     362            resultType = *pVar;
     363            isArray = pVar->IsArray();
     364            pSubScripts = pVar->GetSubScriptsPtr();
     365        }
     366    }
     367
     368    if(pobj_CompilingClass){
     369        ///////////////////////
     370        // クラスメンバの参照
     371        ///////////////////////
     372
     373        if(memicmp(variable,"This.",5)==0){
     374            //Thisオブジェクトのメンバを参照するとき
     375            SlideString(variable+5,-5);
     376            lstrcpy(VarName,variable);
    348377        }
    349378        else{
    350             if(lpPtrOffset[0]) return 0;
    351         }
    352 
    353         pRelativeVar->offset = pVar->offset;
    354         if( pVar->IsRef() ){
    355             pRelativeVar->dwKind=VAR_REFLOCAL;
    356         }
    357         else{
    358             pRelativeVar->dwKind=VAR_LOCAL;
    359         }
    360         resultType = *pVar;
    361         isArray = pVar->IsArray();
    362         pSubScripts = pVar->GetSubScriptsPtr();
    363     }
    364     else{
    365         if(pobj_CompilingClass){
    366             ///////////////////////
    367             // クラスメンバの参照
    368             ///////////////////////
    369 
    370             if(memicmp(variable,"This.",5)==0){
    371                 //Thisオブジェクトのメンバを参照するとき
    372                 SlideString(variable+5,-5);
    373                 lstrcpy(VarName,variable);
    374             }
    375             else{
    376                 //クラス内メンバを参照するとき(通常)
    377 
    378                 for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    379                     if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
    380                 }
    381                 if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
    382             }
    383 
    384             /////////////////////////////
    385             // thisポインタを取得
    386 
    387             extern HWND hDebugWnd;
    388             i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
    389             i2=pobj_dti->iProcLevel-i2;
    390 
    391             lpData=Debugging_GetThisPtrOffset(pobj_dti->lplpObp[i2]);
    392             if(!lpData){
    393                 //式エラー
    394                 return 0;
    395             }
    396             lpData+=pobj_dti->lplpSpBase[i2];
    397             if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&accessBytes)){
    398                 //メモリにアクセスできないとき
    399                 return -1;
    400             }
    401 
    402             pRelativeVar->dwKind=VAR_DIRECTMEM;
    403 
    404             i3=Debugging_GetMember(*pobj_CompilingClass,variable,pRelativeVar,resultType,1);
    405             if(i3==0){
    406                 //式エラー
    407                 return 0;
    408             }
    409             if(i3==-1){
    410                 //アクセスエラー
    411                 return -1;
    412             }
    413 
    414             return 1;
    415         }
     379            //クラス内メンバを参照するとき(通常)
     380
     381            for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
     382                if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
     383            }
     384            if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     385        }
     386
     387        /////////////////////////////
     388        // thisポインタを取得
     389
     390        extern HWND hDebugWnd;
     391        i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
     392        i2=pobj_dti->iProcLevel-i2;
     393
     394        lpData=Debugging_GetThisPtrOffset(pobj_dti->lplpObp[i2]);
     395        if(!lpData){
     396            //式エラー
     397            return 0;
     398        }
     399        lpData+=pobj_dti->lplpSpBase[i2];
     400        if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&accessBytes)){
     401            //メモリにアクセスできないとき
     402            return -1;
     403        }
     404
     405        pRelativeVar->dwKind=VAR_DIRECTMEM;
     406
     407        i3=Debugging_GetMember(*pobj_CompilingClass,variable,pRelativeVar,resultType,1);
     408        if(i3==0){
     409            //式エラー
     410            return 0;
     411        }
     412        if(i3==-1){
     413            //アクセスエラー
     414            return -1;
     415        }
     416
     417        return 1;
     418    }
    416419
    417420NonClassMember:
    418421
     422    {
    419423        ///////////////////
    420424        // グローバル変数
Note: See TracChangeset for help on using the changeset viewer.