Changeset 64 in dev for BasicCompiler32/Compile_Calc.cpp
- Timestamp:
- Mar 8, 2007, 2:49:34 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_Calc.cpp
r62 r64 364 364 //push eax 365 365 op_push(REG_EAX); 366 } 367 368 369 370 371 372 373 374 375 376 void RestoreDefaultRegisterFromStackMemory( int type ){ 377 //現在のスタックの内容を実数レジスタに保存する 378 //NumOpeの直後専用 379 if(type==DEF_DOUBLE){ 380 //fld qword ptr[esp] 381 op_fld_ptr_esp(DEF_DOUBLE); 382 383 //add esp,8 384 op_add_esp(8); 385 } 386 else if(type==DEF_SINGLE){ 387 //fld dword ptr[esp] 388 op_fld_ptr_esp(DEF_SINGLE); 389 390 //add esp,4 391 op_add_esp(4); 392 } 393 else if( Is64Type( type ) ){ 394 //pop eax 395 op_pop(REG_EAX); 396 397 //pop edx 398 op_pop(REG_EDX); 399 } 400 else{ 401 //pop eax 402 op_pop(REG_EAX); 403 } 404 } 405 406 void SetVariableFromEax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar){ 407 ///////////////////////////////////////////////// 408 // eaxの内容を変数にコピーするコードを抽出 409 ///////////////////////////////////////////////// 410 411 if(VarType==DEF_BOOLEAN){ 412 //bool 413 SetBooleanVariable(CalcType,pRelativeVar); 414 } 415 else if( IsRealNumberType( VarType ) ){ 416 // Double/Single型変数へレジスタの値を代入 417 SetRealVariable(VarType, CalcType, pRelativeVar); 418 } 419 else if( IsWholeNumberType( VarType ) || VarType == DEF_OBJECT ){ 420 int typeSize = GetTypeSize( VarType, -1 ); 421 422 //整数変数へraxの値を格納する 423 SetWholeVariable( typeSize, CalcType, pRelativeVar ); 424 } 425 else{ 426 SetError(300,NULL,cp); 427 } 366 428 } 367 429 … … 485 547 } 486 548 549 550 if( lstrcmpi( variable, "This" ) == 0 ){ 551 SetError(133,NULL,cp); 552 return; 553 } 554 555 487 556 //////////////////////////////////////// 488 557 // 変数のタイプ型を識別して、演算を行う … … 511 580 else ProcPtr_BaseIndex=-1; 512 581 513 if(VarType==DEF_ OBJECT){514 //代入 演算のオーバーロード オペレータに備える582 if(VarType==DEF_STRUCT){ 583 //代入コピーに備える 515 584 516 585 //変数アドレスを取得 … … 544 613 } 545 614 546 if(VarType==DEF_ OBJECT){615 if(VarType==DEF_STRUCT){ 547 616 //オブジェクトインスタンスへの代入 548 Set ObjectVariable(lpVarIndex,CalcType,lpCalcIndex,bCalcUseHeap);617 SetStructVariable(lpVarIndex,CalcType,lpCalcIndex,bCalcUseHeap); 549 618 return; 550 619 } 551 620 552 if(CalcType==DEF_OBJECT ){621 if(CalcType==DEF_OBJECT && (CalcType!=VarType || lpCalcIndex!=lpVarIndex) ){ 553 622 //キャスト演算子のオーバーロードに対応する 554 623 CallCastOperatorProc(CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex); … … 568 637 ///////////////////////////////////////////////// 569 638 639 //eax、edx:eax、またはst(0)にスタック上のデータを取り出す 640 RestoreDefaultRegisterFromStackMemory( CalcType ); 641 642 SetVariableFromEax( VarType, CalcType, &VarRelativeVar ); 643 /* 644 TODO: 消す 570 645 if(VarType==DEF_BOOLEAN){ 571 646 //bool … … 598 673 //Single型変数へスタックの内容を格納する 599 674 SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset); 600 } 601 } 602 675 }*/ 676 } 677 678 679 // TODO: 消す 680 /* 603 681 void SetRefVariable( const char *varname, const char *expression ){ 604 682 //////////////////////////////////////// … … 721 799 } 722 800 } 801 */
Note:
See TracChangeset
for help on using the changeset viewer.