Changeset 75 in dev for BasicCompiler64/varlist.cpp


Ignore:
Timestamp:
Mar 20, 2007, 4:36:16 AM (17 years ago)
Author:
dai_9181
Message:

TYPEINFO→Typeへのリファクタリングを実施。64bitはほぼ完了。32bitが全般的に未完成。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/varlist.cpp

    r73 r75  
    77HWND hVarTree_Global,hVarTree_Local,hVarTree_This;
    88
    9 int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,int type,int *SubScripts,LONG_PTR lpIndex);
    10 void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,CClass *pobj_c,BOOL bPtr);
    11 void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,char *VarName,int type,LONG_PTR offset,LONG_PTR lpIndex){
     9int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,const Type &type,const int *SubScripts);
     10void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,const CClass &objClass,BOOL bPtr);
     11void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,const char *VarName,const Type &type,LONG_PTR offset){
    1212    extern HANDLE hDebugProcess;
    1313    int i2;
     
    2222    _int64 i64data;
    2323
    24     if(type==DEF_OBJECT||type==DEF_STRUCT){
    25         if( type==DEF_OBJECT ){
     24    if( type.IsObject() || type.IsStruct() ){
     25        if( type.IsObject() ){
    2626            // 参照型ということを考慮する
    2727            ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes);
     
    3434        hParent=TreeView_InsertItem(hVarTree,lptv);
    3535
    36         VarList_Member(hVarTree,hParent,offset,(CClass *)lpIndex,0);
     36        VarList_Member(hVarTree,hParent,offset,type.GetClass(),0);
    3737        return;
    3838    }
    39     if(type==DEF_PTR_OBJECT||type==DEF_PTR_STRUCT){
     39    else if( type.IsObjectPtr() || type.IsStructPtr() ){
    4040        i2=ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes);
    4141
     
    4545        hParent=TreeView_InsertItem(hVarTree,lptv);
    4646
    47         if(i2) VarList_Member(hVarTree,hParent,pData,(CClass *)lpIndex,1);
     47        if(i2) VarList_Member(hVarTree,hParent,pData,type.GetClass(),1);
    4848        return;
    4949    }
    5050    else{
    51         if(type==MAKE_PTR_TYPE(DEF_SBYTE,1)||type==MAKE_PTR_TYPE(DEF_BYTE,1)){
     51        if(type.GetBasicType()==MAKE_PTR_TYPE(DEF_SBYTE,1)||type.GetBasicType()==MAKE_PTR_TYPE(DEF_BYTE,1)){
    5252            if(ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes)){
    5353                for(i2=0;;i2++){
     
    6767            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    6868        }
    69         else if(type==DEF_DOUBLE){
     69        else if(type.IsDouble()){
    7070            if(ReadProcessMemory(hDebugProcess,(void *)offset,&dbl,sizeof(double),&stAccBytes)){
    7171                sprintf(lptv->item.pszText,"%s %.15g",VarName,dbl);
     
    7373            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    7474        }
    75         else if(type==DEF_SINGLE){
     75        else if(type.IsSingle()){
    7676            if(ReadProcessMemory(hDebugProcess,(void *)offset,&flt,sizeof(float),&stAccBytes)){
    7777                sprintf(lptv->item.pszText,"%s %.6g",VarName,flt);
     
    7979            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    8080        }
    81         else if(type==DEF_INT64){
     81        else if(type.IsInt64()){
    8282            _int64 i64data;
    8383            if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
     
    8989            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    9090        }
    91         else if(type==DEF_QWORD||IsPtrType(type)){
     91        else if(type.IsQWord()||type.IsPointer()){
    9292            if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
    9393                _ui64toa(i64data,temporary,10);
     
    9898            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    9999        }
    100         else if(type==DEF_LONG){
     100        else if(type.IsLong()){
    101101            if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
    102102                sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,i64data,i64data);
     
    104104            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    105105        }
    106         else if(type==DEF_DWORD){
     106        else if(type.IsDWord()){
    107107            if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
    108108                sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,i64data,i64data);
     
    110110            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    111111        }
    112         else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
     112        else if(type.IsInteger()){
    113113            if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){
    114114                sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
     
    116116            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    117117        }
    118         else if(type==DEF_WORD){
     118        else if(type.IsWord()){
    119119            if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){
    120120                sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,wData,wData);
     
    122122            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    123123        }
    124         else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
     124        else if(type.IsSByte()){
    125125            if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
    126126                temporary[0]=byteData;
     
    130130            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    131131        }
    132         else if(type==DEF_BYTE){
     132        else if(type.IsByte()){
    133133            if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
    134134                temporary[0]=byteData;
     
    138138            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    139139        }
    140         else if(type==DEF_BOOLEAN){
     140        else if(type.IsBoolean()){
    141141            if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
    142142                if( byteData ) lstrcpy( temporary, "True" );
     
    152152    TreeView_InsertItem(hVarTree,lptv);
    153153}
    154 void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,CClass *pobj_c,BOOL bPtr){
     154void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,const CClass &objClass,BOOL bPtr){
    155155    int i,i2;
    156156    char VarData[VN_SIZE],VarName[VN_SIZE];
     
    163163    tv.item.pszText=VarData;
    164164
    165     for(i=0;i<pobj_c->iMemberNum;i++){
     165    for(i=0;i<objClass.iMemberNum;i++){
    166166        if(bPtr){
    167167            lstrcpy(VarName,"->");
    168             lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
     168            lstrcat(VarName,objClass.ppobj_Member[i]->name);
    169169        }
    170170        else{
    171171            lstrcpy(VarName,".");
    172             lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
     172            lstrcat(VarName,objClass.ppobj_Member[i]->name);
    173173        }
    174174
    175175        LONG_PTR offset;
    176         offset=pobj_c->GetMemberOffset( pobj_c->ppobj_Member[i]->name, &i2 );
    177 
    178         if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
     176        offset=objClass.GetMemberOffset( objClass.ppobj_Member[i]->name, &i2 );
     177
     178        if(objClass.ppobj_Member[i]->SubScripts[0]!=-1){
    179179            //構造体内の配列
    180180            sprintf(VarData,"%s %s(&H%X)",VarName,STRING_ARRAY,pTopOffset+offset);
     
    185185            i2=VarList_Array(hVarTree,hParent,
    186186                pTopOffset+offset,
    187                 pobj_c->ppobj_Member[i]->TypeInfo.type,
    188                 pobj_c->ppobj_Member[i]->SubScripts,
    189                 pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
     187                *objClass.ppobj_Member[i],
     188                objClass.ppobj_Member[i]->SubScripts);
    190189        }
    191190        else{
     
    194193                &tv,
    195194                VarName,
    196                 pobj_c->ppobj_Member[i]->TypeInfo.type,
    197                 pTopOffset+offset,
    198                 pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
    199         }
    200     }
    201 }
    202 int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,int type,int *SubScripts,LONG_PTR lpIndex){
    203     int i,i2,i3,ElementNum,MemCounter,UseCount[255],TypeSize;
     195                *objClass.ppobj_Member[i],
     196                pTopOffset+offset);
     197        }
     198    }
     199}
     200int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,const Type &type,const int *SubScripts ){
     201    int i,i2,i3,ElementNum,MemCounter,UseCount[255];
    204202    char temporary[VN_SIZE],temp2[DIGIT_SIZE];
    205203
     
    210208    tv.hParent=hParent;
    211209    tv.item.pszText=temporary;
    212 
    213     TypeSize=GetTypeSize(type,lpIndex);
    214210
    215211    for(i=0;i<255;i++){
     
    240236
    241237            VarList_Insert(hVarTree,&tv,temporary,type,
    242                 offset+MemCounter*TypeSize,
    243                 lpIndex);
     238                offset+MemCounter*type.GetSize());
    244239        }
    245240
     
    254249void RefreshGlobalVar(void){
    255250    extern DWORD ImageBase;
    256     int i;
    257251    char temporary[VN_SIZE];
    258252    TV_INSERTSTRUCT tv;
     
    269263    extern HANDLE hDebugProcess;
    270264    extern int MemPos_RWSection;
    271     extern int MaxGlobalVarNum;
    272     extern VARIABLE *GlobalVar;
    273 
    274     for(i=0;i<MaxGlobalVarNum;i++){
    275         VARIABLE *pVar=&GlobalVar[i];
     265
     266    foreach( Variable *pVar, globalVars ){
    276267
    277268        //スコープ外の場合は無視
     
    289280
    290281        if(!pobj_nv->bShow_DefaultSystem_Var){
    291             if(memcmp(pVar->name,"_System_",8)==0||
    292                 memcmp(pVar->name,"_DebugSys_",10)==0||
    293                 memcmp(pVar->name,"_PromptSys_",11)==0) continue;
     282            if(memcmp(pVar->GetName().c_str(),"_System_",8)==0||
     283                memcmp(pVar->GetName().c_str(),"_DebugSys_",10)==0||
     284                memcmp(pVar->GetName().c_str(),"_PromptSys_",11)==0) continue;
    294285        }
    295286        if(!pobj_nv->bShow_Rad_Var){
    296             if(memcmp(pVar->name,"_RadSys_",8)==0) continue;
     287            if(memcmp(pVar->GetName().c_str(),"_RadSys_",8)==0) continue;
    297288        }
    298289        if(!pobj_nv->bShow_GUID_Var){
    299             if(memcmp(pVar->name,"GUID_",5)==0||
    300                 memcmp(pVar->name,"IID_",4)==0||
    301                 memcmp(pVar->name,"CLSID_",6)==0) continue;
     290            if(memcmp(pVar->GetName().c_str(),"GUID_",5)==0||
     291                memcmp(pVar->GetName().c_str(),"IID_",4)==0||
     292                memcmp(pVar->GetName().c_str(),"CLSID_",6)==0) continue;
    302293        }
    303294
    304295        //静的メンバ
    305         if(strstr(pVar->name,".")) continue;
    306 
    307         if(pVar->bArray){
     296        if(strstr(pVar->GetName().c_str(),".")) continue;
     297
     298        if(pVar->IsArray()){
    308299            sprintf(temporary,"%s %s(&H%X)",
    309                 pVar->name,
     300                pVar->GetName().c_str(),
    310301                STRING_ARRAY,
    311302                ImageBase+MemPos_RWSection+pVar->offset);
     
    316307            VarList_Array(hVarTree_Global,hParent,
    317308                (LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset),
    318                 pVar->type,
    319                 pVar->SubScripts,
    320                 pVar->u.index);
     309                *pVar,
     310                pVar->GetSubScriptsPtr());
    321311        }
    322312        else{
    323313            VarList_Insert(hVarTree_Global,
    324314                &tv,
    325                 pVar->name,
    326                 pVar->type,
    327                 (LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset),
    328                 pVar->u.index);
     315                pVar->GetName().c_str(),
     316                *pVar,
     317                (LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset));
    329318        }
    330319    }
     
    354343    if(pobj_dti->lplpSpBase[i2]==0) return;
    355344
    356     extern SubInfo **ppSubHash;
    357     SubInfo *psi;
     345    extern UserProc **ppSubHash;
     346    UserProc *pUserProc;
    358347    for(i3=0,sw=0;i3<MAX_HASH;i3++){
    359         psi=ppSubHash[i3];
    360         while(psi){
    361             if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
    362                 pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
     348        pUserProc=ppSubHash[i3];
     349        while(pUserProc){
     350            if(rva_to_real(pUserProc->beginOpAddress) <= pobj_dti->lplpObp[i2]  &&
     351                pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->endOpAddress)){
    363352                sw=1;
    364353                break;
    365354            }
    366355
    367             psi=psi->pNextData;
     356            pUserProc=pUserProc->pNextData;
    368357        }
    369358        if(sw) break;
    370359    }
    371     if(!psi) return;
    372 
    373     for(i=0;i<psi->VarNum;i++){
    374         VARIABLE *pVar=&psi->pVar[i];
     360    if(!pUserProc) return;
     361
     362    foreach( Variable *pVar, UserProc::CompilingUserProc().localVars ){
    375363
    376364        //スコープ外の場合は無視
     
    386374        }
    387375
    388         if(pVar->bArray){
     376        if(pVar->IsArray()){
    389377            sprintf(temporary,"%s %s(&H%X)",
    390                 pVar->name,
     378                pVar->GetName().c_str(),
    391379                STRING_ARRAY,
    392380                pobj_dti->lplpSpBase[i2]+pVar->offset);
     
    397385            VarList_Array(hVarTree_Local,hParent,
    398386                pobj_dti->lplpSpBase[i2]+pVar->offset,
    399                 pVar->type,
    400                 pVar->SubScripts,
    401                 pVar->u.index);
     387                *pVar,
     388                pVar->GetSubScriptsPtr());
    402389        }
    403390        else{
    404391            offset=pobj_dti->lplpSpBase[i2]+pVar->offset;
    405             if(pVar->fRef){
     392            if(pVar->IsRef()){
    406393                ReadProcessMemory(hDebugProcess,(void *)offset,&lpData,sizeof(LONG_PTR),&stAccBytes);
    407394                offset=lpData;
    408395            }
    409396            VarList_Insert(hVarTree_Local,&tv,
    410                 pVar->name,
    411                 pVar->type,
    412                 offset,
    413                 pVar->u.index);
     397                pVar->GetName().c_str(),
     398                *pVar,
     399                offset);
    414400        }
    415401    }
     
    422408
    423409    TreeView_DeleteAllItems(hVarTree_This);
    424     if(!psi->pobj_ParentClass) return;
     410    if(!pUserProc->GetParentClassPtr()) return;
    425411
    426412    //Thisポインタを取得
    427413    LONG_PTR pThis;
    428     for(i=0;i<psi->VarNum;i++){
    429         if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
    430     }
    431     if(i==psi->VarNum) return;
    432     lpData=pobj_dti->lplpSpBase[i2]+psi->pVar[i].offset;
     414    const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( "_System_LocalThis" );
     415    if( !pVar ){
     416        return;
     417    }
     418    lpData=pobj_dti->lplpSpBase[i2]+pVar->offset;
    433419    ReadProcessMemory(hDebugProcess,(void *)lpData,&pThis,sizeof(LONG_PTR),&stAccBytes);
    434420
    435     for(i=0;i<psi->pobj_ParentClass->iMemberNum;i++){
    436         offset=psi->pobj_ParentClass->GetMemberOffset( psi->pobj_ParentClass->ppobj_Member[i]->name,&i2);
    437 
    438         if(psi->pobj_ParentClass->ppobj_Member[i]->SubScripts[0]!=-1){
     421    for(i=0;i<pUserProc->GetParentClassPtr()->iMemberNum;i++){
     422        offset=pUserProc->GetParentClassPtr()->GetMemberOffset( pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,&i2);
     423
     424        if(pUserProc->GetParentClassPtr()->ppobj_Member[i]->SubScripts[0]!=-1){
    439425            //配列
    440426            sprintf(temporary,"%s %s(&H%X)",
    441                 psi->pobj_ParentClass->ppobj_Member[i]->name,
     427                pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,
    442428                STRING_ARRAY,
    443429                (DWORD64)offset);
     
    448434            VarList_Array(hVarTree_This,hParent,
    449435                pThis+offset,
    450                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
    451                 psi->pobj_ParentClass->ppobj_Member[i]->SubScripts,
    452                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
     436                *pUserProc->GetParentClassPtr()->ppobj_Member[i],
     437                pUserProc->GetParentClassPtr()->ppobj_Member[i]->SubScripts);
    453438        }
    454439        else{
    455440            VarList_Insert(hVarTree_This,&tv,
    456                 psi->pobj_ParentClass->ppobj_Member[i]->name,
    457                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
    458                 pThis+offset,
    459                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
     441                pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,
     442                *pUserProc->GetParentClassPtr()->ppobj_Member[i],
     443                pThis+offset);
    460444        }
    461445    }
     
    489473
    490474void SetCalcToWatchList(HWND hListView,int iItem,char *buffer){
    491     int i;
    492475    char temporary[255],temp2[255];
    493476
     
    498481
    499482    //カッコを相互チェック
    500     if(!CheckParenthesis2(buffer)){
    501         ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
     483    if(!CheckParenthesis2(buffer)){ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
    502484        return;
    503485    }
     
    505487    double dbl;
    506488    _int64 i64data;
    507     i=StaticCalculation(true, buffer,0,&i64data,0,1);
    508     if(IsRealNumberType(i)){
    509         memcpy(&dbl,&i64data,sizeof(double));
    510     }
    511 
    512     if(i==0){
     489    Type resultType;
     490    bool isMemoryAccessError;
     491    if( !StaticCalculation(true, buffer,0,&i64data,resultType,1,&isMemoryAccessError) ){
    513492        ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
    514493    }
    515     else if(i==-1){
     494    else if(isMemoryAccessError){
    516495        ListView_SetItemText(hListView,iItem,1,"アクセスできません");
    517496    }
    518497    else{
    519         if(IsRealNumberType(i))
     498        if(resultType.IsReal()){
     499            memcpy(&dbl,&i64data,sizeof(double));
    520500            sprintf(temporary,"%.15g (&H%08X)",dbl,(int)dbl);
    521         else if(Is64Type(i)){
     501        }
     502        else if(resultType.Is64()){
    522503            _i64toa(i64data,temporary,10);
    523504            _i64toa(i64data,temp2,16);
     
    586567
    587568    //プロシージャ コンボボックス
    588     extern SubInfo **ppSubHash;
    589     SubInfo *psi;
     569    extern UserProc **ppSubHash;
     570    UserProc *pUserProc;
    590571    int sw;
    591572    SendMessage(hProcCombo,CB_RESETCONTENT,0,0);
    592573    for(i2=pobj_dti->iProcLevel;i2>=0;i2--){
    593574        for(i3=0,sw=0;i3<MAX_HASH;i3++){
    594             psi=ppSubHash[i3];
    595             while(psi){
    596                 if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
    597                     pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
    598                     lstrcpy(temporary,psi->name);
    599                     sw=1;
    600                     break;
     575            pUserProc=ppSubHash[i3];
     576            while(pUserProc){
     577                if(rva_to_real(pUserProc->beginOpAddress) <= pobj_dti->lplpObp[i2]  &&
     578                    pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->endOpAddress)){
     579                        lstrcpy(temporary,pUserProc->GetName().c_str());
     580                        sw=1;
     581                        break;
    601582                }
    602                 psi=psi->pNextData;
     583                pUserProc=pUserProc->pNextData;
    603584            }
    604585            if(sw) break;
    605586        }
    606         if(!psi){
     587        if(!pUserProc){
    607588            if(i2==0){
    608589                lstrcpy(temporary,"Global");
     
    699680    ///////////////////////////////////////////////
    700681
    701     extern VARIABLE *LocalVar;
    702     extern int MaxLocalVarNum;
    703682    int sw;
    704 
    705     MaxLocalVarNum=0;
    706683
    707684    i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
     
    709686
    710687    if(pobj_dti->lplpSpBase[i2]){
    711         extern SubInfo **ppSubHash;
    712         SubInfo *psi;
     688        extern UserProc **ppSubHash;
     689        UserProc *pUserProc;
    713690        for(i3=0,sw=0;i3<MAX_HASH;i3++){
    714             psi=ppSubHash[i3];
    715             while(psi){
    716                 if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
    717                     pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
     691            pUserProc=ppSubHash[i3];
     692            while(pUserProc){
     693                if(rva_to_real(pUserProc->beginOpAddress) <= pobj_dti->lplpObp[i2]  &&
     694                    pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->endOpAddress)){
    718695                    sw=1;
    719696                    break;
    720697                }
    721698
    722                 psi=psi->pNextData;
     699                pUserProc=pUserProc->pNextData;
    723700            }
    724701            if(sw) break;
     
    726703
    727704
    728         if(psi){
    729             LocalVar=psi->pVar;
    730             MaxLocalVarNum=psi->VarNum;
    731 
    732             pobj_CompilingClass=psi->pobj_ParentClass;
     705        if(pUserProc){
     706            pobj_CompilingClass=pUserProc->GetParentClassPtr();
     707            UserProc::CompileStartForUserProc( pUserProc );
    733708        }
    734709    }
Note: See TracChangeset for help on using the changeset viewer.