Changeset 75 in dev for BasicCompiler64/varlist.cpp
- Timestamp:
- Mar 20, 2007, 4:36:16 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/varlist.cpp
r73 r75 7 7 HWND hVarTree_Global,hVarTree_Local,hVarTree_This; 8 8 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,c har *VarName,int type,LONG_PTR offset,LONG_PTR lpIndex){9 int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,const Type &type,const int *SubScripts); 10 void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,const CClass &objClass,BOOL bPtr); 11 void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,const char *VarName,const Type &type,LONG_PTR offset){ 12 12 extern HANDLE hDebugProcess; 13 13 int i2; … … 22 22 _int64 i64data; 23 23 24 if( type==DEF_OBJECT||type==DEF_STRUCT){25 if( type ==DEF_OBJECT){24 if( type.IsObject() || type.IsStruct() ){ 25 if( type.IsObject() ){ 26 26 // 参照型ということを考慮する 27 27 ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes); … … 34 34 hParent=TreeView_InsertItem(hVarTree,lptv); 35 35 36 VarList_Member(hVarTree,hParent,offset, (CClass *)lpIndex,0);36 VarList_Member(hVarTree,hParent,offset,type.GetClass(),0); 37 37 return; 38 38 } 39 if(type==DEF_PTR_OBJECT||type==DEF_PTR_STRUCT){39 else if( type.IsObjectPtr() || type.IsStructPtr() ){ 40 40 i2=ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes); 41 41 … … 45 45 hParent=TreeView_InsertItem(hVarTree,lptv); 46 46 47 if(i2) VarList_Member(hVarTree,hParent,pData, (CClass *)lpIndex,1);47 if(i2) VarList_Member(hVarTree,hParent,pData,type.GetClass(),1); 48 48 return; 49 49 } 50 50 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)){ 52 52 if(ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes)){ 53 53 for(i2=0;;i2++){ … … 67 67 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 68 68 } 69 else if(type ==DEF_DOUBLE){69 else if(type.IsDouble()){ 70 70 if(ReadProcessMemory(hDebugProcess,(void *)offset,&dbl,sizeof(double),&stAccBytes)){ 71 71 sprintf(lptv->item.pszText,"%s %.15g",VarName,dbl); … … 73 73 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 74 74 } 75 else if(type ==DEF_SINGLE){75 else if(type.IsSingle()){ 76 76 if(ReadProcessMemory(hDebugProcess,(void *)offset,&flt,sizeof(float),&stAccBytes)){ 77 77 sprintf(lptv->item.pszText,"%s %.6g",VarName,flt); … … 79 79 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 80 80 } 81 else if(type ==DEF_INT64){81 else if(type.IsInt64()){ 82 82 _int64 i64data; 83 83 if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){ … … 89 89 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 90 90 } 91 else if(type ==DEF_QWORD||IsPtrType(type)){91 else if(type.IsQWord()||type.IsPointer()){ 92 92 if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){ 93 93 _ui64toa(i64data,temporary,10); … … 98 98 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 99 99 } 100 else if(type ==DEF_LONG){100 else if(type.IsLong()){ 101 101 if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){ 102 102 sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,i64data,i64data); … … 104 104 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 105 105 } 106 else if(type ==DEF_DWORD){106 else if(type.IsDWord()){ 107 107 if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){ 108 108 sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,i64data,i64data); … … 110 110 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 111 111 } 112 else if(type ==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){112 else if(type.IsInteger()){ 113 113 if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){ 114 114 sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData); … … 116 116 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 117 117 } 118 else if(type ==DEF_WORD){118 else if(type.IsWord()){ 119 119 if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){ 120 120 sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,wData,wData); … … 122 122 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 123 123 } 124 else if(type ==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){124 else if(type.IsSByte()){ 125 125 if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){ 126 126 temporary[0]=byteData; … … 130 130 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 131 131 } 132 else if(type ==DEF_BYTE){132 else if(type.IsByte()){ 133 133 if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){ 134 134 temporary[0]=byteData; … … 138 138 else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS); 139 139 } 140 else if(type ==DEF_BOOLEAN){140 else if(type.IsBoolean()){ 141 141 if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){ 142 142 if( byteData ) lstrcpy( temporary, "True" ); … … 152 152 TreeView_InsertItem(hVarTree,lptv); 153 153 } 154 void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset, CClass *pobj_c,BOOL bPtr){154 void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,const CClass &objClass,BOOL bPtr){ 155 155 int i,i2; 156 156 char VarData[VN_SIZE],VarName[VN_SIZE]; … … 163 163 tv.item.pszText=VarData; 164 164 165 for(i=0;i< pobj_c->iMemberNum;i++){165 for(i=0;i<objClass.iMemberNum;i++){ 166 166 if(bPtr){ 167 167 lstrcpy(VarName,"->"); 168 lstrcat(VarName, pobj_c->ppobj_Member[i]->name);168 lstrcat(VarName,objClass.ppobj_Member[i]->name); 169 169 } 170 170 else{ 171 171 lstrcpy(VarName,"."); 172 lstrcat(VarName, pobj_c->ppobj_Member[i]->name);172 lstrcat(VarName,objClass.ppobj_Member[i]->name); 173 173 } 174 174 175 175 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){ 179 179 //構造体内の配列 180 180 sprintf(VarData,"%s %s(&H%X)",VarName,STRING_ARRAY,pTopOffset+offset); … … 185 185 i2=VarList_Array(hVarTree,hParent, 186 186 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); 190 189 } 191 190 else{ … … 194 193 &tv, 195 194 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 } 200 int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,const Type &type,const int *SubScripts ){ 201 int i,i2,i3,ElementNum,MemCounter,UseCount[255]; 204 202 char temporary[VN_SIZE],temp2[DIGIT_SIZE]; 205 203 … … 210 208 tv.hParent=hParent; 211 209 tv.item.pszText=temporary; 212 213 TypeSize=GetTypeSize(type,lpIndex);214 210 215 211 for(i=0;i<255;i++){ … … 240 236 241 237 VarList_Insert(hVarTree,&tv,temporary,type, 242 offset+MemCounter*TypeSize, 243 lpIndex); 238 offset+MemCounter*type.GetSize()); 244 239 } 245 240 … … 254 249 void RefreshGlobalVar(void){ 255 250 extern DWORD ImageBase; 256 int i;257 251 char temporary[VN_SIZE]; 258 252 TV_INSERTSTRUCT tv; … … 269 263 extern HANDLE hDebugProcess; 270 264 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 ){ 276 267 277 268 //スコープ外の場合は無視 … … 289 280 290 281 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; 294 285 } 295 286 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; 297 288 } 298 289 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; 302 293 } 303 294 304 295 //静的メンバ 305 if(strstr(pVar-> name,".")) continue;306 307 if(pVar-> bArray){296 if(strstr(pVar->GetName().c_str(),".")) continue; 297 298 if(pVar->IsArray()){ 308 299 sprintf(temporary,"%s %s(&H%X)", 309 pVar-> name,300 pVar->GetName().c_str(), 310 301 STRING_ARRAY, 311 302 ImageBase+MemPos_RWSection+pVar->offset); … … 316 307 VarList_Array(hVarTree_Global,hParent, 317 308 (LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset), 318 pVar->type, 319 pVar->SubScripts, 320 pVar->u.index); 309 *pVar, 310 pVar->GetSubScriptsPtr()); 321 311 } 322 312 else{ 323 313 VarList_Insert(hVarTree_Global, 324 314 &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)); 329 318 } 330 319 } … … 354 343 if(pobj_dti->lplpSpBase[i2]==0) return; 355 344 356 extern SubInfo**ppSubHash;357 SubInfo *psi;345 extern UserProc **ppSubHash; 346 UserProc *pUserProc; 358 347 for(i3=0,sw=0;i3<MAX_HASH;i3++){ 359 p si=ppSubHash[i3];360 while(p si){361 if(rva_to_real(p si->CompileAddress) <= pobj_dti->lplpObp[i2] &&362 pobj_dti->lplpObp[i2] < rva_to_real(p si->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)){ 363 352 sw=1; 364 353 break; 365 354 } 366 355 367 p si=psi->pNextData;356 pUserProc=pUserProc->pNextData; 368 357 } 369 358 if(sw) break; 370 359 } 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 ){ 375 363 376 364 //スコープ外の場合は無視 … … 386 374 } 387 375 388 if(pVar-> bArray){376 if(pVar->IsArray()){ 389 377 sprintf(temporary,"%s %s(&H%X)", 390 pVar-> name,378 pVar->GetName().c_str(), 391 379 STRING_ARRAY, 392 380 pobj_dti->lplpSpBase[i2]+pVar->offset); … … 397 385 VarList_Array(hVarTree_Local,hParent, 398 386 pobj_dti->lplpSpBase[i2]+pVar->offset, 399 pVar->type, 400 pVar->SubScripts, 401 pVar->u.index); 387 *pVar, 388 pVar->GetSubScriptsPtr()); 402 389 } 403 390 else{ 404 391 offset=pobj_dti->lplpSpBase[i2]+pVar->offset; 405 if(pVar-> fRef){392 if(pVar->IsRef()){ 406 393 ReadProcessMemory(hDebugProcess,(void *)offset,&lpData,sizeof(LONG_PTR),&stAccBytes); 407 394 offset=lpData; 408 395 } 409 396 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); 414 400 } 415 401 } … … 422 408 423 409 TreeView_DeleteAllItems(hVarTree_This); 424 if(!p si->pobj_ParentClass) return;410 if(!pUserProc->GetParentClassPtr()) return; 425 411 426 412 //Thisポインタを取得 427 413 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]+p si->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; 433 419 ReadProcessMemory(hDebugProcess,(void *)lpData,&pThis,sizeof(LONG_PTR),&stAccBytes); 434 420 435 for(i=0;i<p si->pobj_ParentClass->iMemberNum;i++){436 offset=p si->pobj_ParentClass->GetMemberOffset( psi->pobj_ParentClass->ppobj_Member[i]->name,&i2);437 438 if(p si->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){ 439 425 //配列 440 426 sprintf(temporary,"%s %s(&H%X)", 441 p si->pobj_ParentClass->ppobj_Member[i]->name,427 pUserProc->GetParentClassPtr()->ppobj_Member[i]->name, 442 428 STRING_ARRAY, 443 429 (DWORD64)offset); … … 448 434 VarList_Array(hVarTree_This,hParent, 449 435 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); 453 438 } 454 439 else{ 455 440 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); 460 444 } 461 445 } … … 489 473 490 474 void SetCalcToWatchList(HWND hListView,int iItem,char *buffer){ 491 int i;492 475 char temporary[255],temp2[255]; 493 476 … … 498 481 499 482 //カッコを相互チェック 500 if(!CheckParenthesis2(buffer)){ 501 ListView_SetItemText(hListView,iItem,1,"式の解析に失敗"); 483 if(!CheckParenthesis2(buffer)){ListView_SetItemText(hListView,iItem,1,"式の解析に失敗"); 502 484 return; 503 485 } … … 505 487 double dbl; 506 488 _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) ){ 513 492 ListView_SetItemText(hListView,iItem,1,"式の解析に失敗"); 514 493 } 515 else if(i ==-1){494 else if(isMemoryAccessError){ 516 495 ListView_SetItemText(hListView,iItem,1,"アクセスできません"); 517 496 } 518 497 else{ 519 if(IsRealNumberType(i)) 498 if(resultType.IsReal()){ 499 memcpy(&dbl,&i64data,sizeof(double)); 520 500 sprintf(temporary,"%.15g (&H%08X)",dbl,(int)dbl); 521 else if(Is64Type(i)){ 501 } 502 else if(resultType.Is64()){ 522 503 _i64toa(i64data,temporary,10); 523 504 _i64toa(i64data,temp2,16); … … 586 567 587 568 //プロシージャ コンボボックス 588 extern SubInfo**ppSubHash;589 SubInfo *psi;569 extern UserProc **ppSubHash; 570 UserProc *pUserProc; 590 571 int sw; 591 572 SendMessage(hProcCombo,CB_RESETCONTENT,0,0); 592 573 for(i2=pobj_dti->iProcLevel;i2>=0;i2--){ 593 574 for(i3=0,sw=0;i3<MAX_HASH;i3++){ 594 p si=ppSubHash[i3];595 while(p si){596 if(rva_to_real(p si->CompileAddress) <= pobj_dti->lplpObp[i2] &&597 pobj_dti->lplpObp[i2] < rva_to_real(p si->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; 601 582 } 602 p si=psi->pNextData;583 pUserProc=pUserProc->pNextData; 603 584 } 604 585 if(sw) break; 605 586 } 606 if(!p si){587 if(!pUserProc){ 607 588 if(i2==0){ 608 589 lstrcpy(temporary,"Global"); … … 699 680 /////////////////////////////////////////////// 700 681 701 extern VARIABLE *LocalVar;702 extern int MaxLocalVarNum;703 682 int sw; 704 705 MaxLocalVarNum=0;706 683 707 684 i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0); … … 709 686 710 687 if(pobj_dti->lplpSpBase[i2]){ 711 extern SubInfo**ppSubHash;712 SubInfo *psi;688 extern UserProc **ppSubHash; 689 UserProc *pUserProc; 713 690 for(i3=0,sw=0;i3<MAX_HASH;i3++){ 714 p si=ppSubHash[i3];715 while(p si){716 if(rva_to_real(p si->CompileAddress) <= pobj_dti->lplpObp[i2] &&717 pobj_dti->lplpObp[i2] < rva_to_real(p si->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)){ 718 695 sw=1; 719 696 break; 720 697 } 721 698 722 p si=psi->pNextData;699 pUserProc=pUserProc->pNextData; 723 700 } 724 701 if(sw) break; … … 726 703 727 704 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 ); 733 708 } 734 709 }
Note:
See TracChangeset
for help on using the changeset viewer.