Changeset 49 in dev for BasicCompiler64/Compile_Var.cpp
- Timestamp:
- Feb 10, 2007, 6:13:37 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_Var.cpp
r41 r49 388 388 extern BOOL bCompilingGlobal; 389 389 int i,RefType; 390 LONG_PTR lpIndex; 390 391 char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE]; 391 392 … … 396 397 else lstrcpy(variable,NameBuffer); 397 398 399 if( FormatUseProcReturnObject( variable, VarName, array, RefType, member ) ){ 400 // 戻り値オブジェクトのメンバを直接参照しているとき 401 //例: func().member 402 403 void *pInfo; 404 int idProc=GetProc(VarName,&pInfo); 405 406 if(idProc){ 407 pRelativeVar->dwKind=VAR_DIRECTMEM; 408 409 ////////////////////////////////////////////////////// 410 ///// レジスタ資源のバックアップ 411 { BACKUP_REGISTER_RESOURCE 412 ////////////////////////////////////////////////////// 413 414 //////////////// 415 // 呼び出し 416 //////////////// 417 418 *pType=CallProc(idProc,pInfo,VarName,array,&lpIndex); 419 420 //戻り値をr11にコピー 421 op_mov_RR( REG_R11, REG_RAX ); 422 423 ///////////////////////////////////////////// 424 ////// レジスタ資源を復元 425 RESTORE_REGISTER_RESOURCE 426 }//////////////////////////////////////////// 427 428 LONG_PTR lp2; 429 if(!GetMemberOffset( 430 isErrorEnabled, 431 isWriteAccess, 432 (CClass *)lpIndex, 433 member,pType,pRelativeVar,&lp2,0)) return 0; 434 if(plpIndex) *plpIndex=lp2; 435 436 return 1; 437 } 438 } 439 440 441 398 442 lstrcpy(VarName,variable); 399 443 GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType); 400 444 401 LONG_PTR lpIndex;402 445 int *pSubScripts; 403 446 bool bConst = false; … … 565 608 } 566 609 567 568 610 ///////////////////// 569 611 // グローバル変数 … … 635 677 } 636 678 637 if( array[0]||member[0]){679 if( array[0] || member[0] ){ 638 680 //xor r11,r11(r11を0に初期化する) 639 681 //※r11は変数ベースアドレスからの相対オフセットを示す
Note:
See TracChangeset
for help on using the changeset viewer.