Changeset 49 in dev for BasicCompiler64
- Timestamp:
- Feb 10, 2007, 6:13:37 AM (18 years ago)
- Location:
- BasicCompiler64
- Files:
-
- 3 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は変数ベースアドレスからの相対オフセットを示す -
BasicCompiler64/NumOpe.cpp
r41 r49 314 314 315 315 if(idProc){ 316 //閉じカッコ")"に続く文字がNULLでないときはエラーにする 317 if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp); 316 //閉じカッコ")"に続く文字がNULLでないとき 317 if(term[i2+1+i4+1]!='\0'){ 318 if( term[i2+1+i4+1] == '.' 319 || term[i2+1+i4+1] == 1 && term[i2+1+i4+2] == ESC_PSMEM ){ 320 goto NonProc; 321 } 322 else{ 323 SetError(42,NULL,cp); 324 } 325 } 318 326 319 327 … … 402 410 } 403 411 } 412 NonProc: 404 413 405 414 -
BasicCompiler64/Opcode.h
r46 r49 62 62 extern int obp; 63 63 extern char *OpBuffer; 64 65 #define breakpoint OpBuffer[obp++]=(char)0xCC; 66 64 67 65 68 //ラベルアドレス
Note:
See TracChangeset
for help on using the changeset viewer.