Ignore:
Timestamp:
Jun 15, 2007, 4:00:25 AM (17 years ago)
Author:
dai_9181
Message:

traceログ機能を搭載
動的メンバをstl::vectorにまとめた
シンボルをクラス化した

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/WatchList.cpp

    r137 r140  
    104104
    105105int Debugging_GetMember( const CClass &objClass,char *member,RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
    106     int i,i2;
     106    int i2;
    107107
    108108    //直接参照に切り替え
     
    124124    ////////////////////////////
    125125
    126     int offset = objClass.GetMemberOffset( VarName, &i );
    127     if(i==objClass.iMemberNum) return 0;
     126    int memberIndex;
     127    int offset = objClass.GetMemberOffset( VarName, &memberIndex );
     128    if(memberIndex==objClass.GetDynamicMembers().size()) return 0;
     129
     130    CMember *pMember = objClass.GetDynamicMembers()[memberIndex];
    128131
    129132
    130133    //アクセシビリティをチェック
    131     if(( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsPrivate() )||
    132         objClass.ppobj_Member[i]->IsNoneAccess() ){
     134    if(( bPrivateAccess==0 && pMember->IsPrivate() )||
     135        pMember->IsNoneAccess() ){
    133136        return 0;
    134137    }
    135     else if(bPrivateAccess==0&&objClass.ppobj_Member[i]->IsProtected())
     138    else if(bPrivateAccess==0&&pMember->IsProtected())
    136139        return 0;
    137140
    138     resultType = objClass.ppobj_Member[i]->GetType();
     141    resultType = pMember->GetType();
    139142
    140143    //ポインタ変数の場合
    141144    if( resultType.IsPointer() ){
    142         if(objClass.ppobj_Member[i]->SubScripts[0]==-1){
     145        if(pMember->SubScripts[0]==-1){
    143146            lstrcpy(lpPtrOffset,array);
    144147            array[0]=0;
     
    154157        //配列オフセット
    155158        i2=Debugging_GetArray(
    156             objClass.ppobj_Member[i]->SubScripts,
     159            pMember->SubScripts,
    157160            array,
    158161            resultType,
     
    167170        }
    168171    }
    169     else if(objClass.ppobj_Member[i]->SubScripts[0]!=-1){
     172    else if(pMember->SubScripts[0]!=-1){
    170173        resultType.SetBasicType( resultType.GetBasicType() | FLAG_PTR );
    171174    }
     
    209212        }
    210213
    211         i2=Debugging_GetMember(objClass.ppobj_Member[i]->GetType().GetClass(),
     214        i2=Debugging_GetMember(pMember->GetType().GetClass(),
    212215            NestMember,
    213216            pRelativeVar,
     
    322325int Debugging_GetVarOffset( char *variable,RELATIVE_VAR *pRelativeVar, Type &resultType, int *pss){
    323326    extern HANDLE hDebugProcess;
    324     int i,i2,i3;
     327    int i2,i3;
    325328    char member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
    326329    LONG_PTR lpData;
     
    339342    /////////////////
    340343    if( UserProc::IsLocalAreaCompiling() ){
    341         const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( VarName );
     344        const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( Symbol( VarName ) );
    342345
    343346        if( pVar ){
     
    379382            //クラス内メンバを参照するとき(通常)
    380383
    381             for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    382                 if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
     384            bool isFound = false;
     385            BOOST_FOREACH( CMember *pMember, pobj_CompilingClass->GetDynamicMembers() ){
     386                if( pMember->GetName() == VarName ){
     387                    isFound = true;
    383388                    break;
    384389                }
    385390            }
    386             if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     391            if( !isFound ) goto NonClassMember;
    387392        }
    388393
Note: See TracChangeset for help on using the changeset viewer.