Changeset 78 in dev for BasicCompiler_Common/WatchList.cpp
- Timestamp:
- Mar 25, 2007, 2:47:49 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/WatchList.cpp
r76 r78 338 338 // ローカル変数 339 339 ///////////////// 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); 348 377 } 349 378 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 } 416 419 417 420 NonClassMember: 418 421 422 { 419 423 /////////////////// 420 424 // グローバル変数
Note:
See TracChangeset
for help on using the changeset viewer.