Changeset 247 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Jul 28, 2007, 4:17:56 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r246 r247 413 413 414 414 //プロシージャ抜け出しスケジュール(Exit Sub/Function) 415 extern DWORD *pExitSubSchedule; 416 extern int ExitSubScheduleNum; 417 pExitSubSchedule=(DWORD *)HeapAlloc(hHeap,0,1); 418 ExitSubScheduleNum=0; 415 compiler.codeGenerator.exitSubCodePositions.clear(); 416 compiler.codeGenerator._exitSubCodePositions_ObpOld.clear(); 419 417 420 418 //ラベル用のメモリを確保 … … 620 618 621 619 //プロシージャ抜け出しスケジュール(Exit Sub/Function) 622 for(i3=0;i3<ExitSubScheduleNum;i3++){ 623 *((long *)(OpBuffer+pExitSubSchedule[i3]))=obp-(pExitSubSchedule[i3]+sizeof(long)); 624 } 625 HeapDefaultFree(pExitSubSchedule); 620 compiler.codeGenerator.ResolveExitSubSchedule(); 626 621 627 622 if(bDebugCompile&&bDebugSupportProc==0){ -
trunk/abdev/BasicCompiler32/Compile_Statement.cpp
r246 r247 580 580 void OpcodeDo(char *Parameter){ 581 581 extern HANDLE hHeap; 582 int i,i2,i3 ,i4;582 int i,i2,i3; 583 583 584 584 if(Parameter[0]) SetError(10,"Do",cp); … … 702 702 703 703 //jne 704 OpBuffer[obp++]=(char)0x0F; 705 OpBuffer[obp++]=(char)0x85; 706 obp+=sizeof(long); 707 i2=obp; 708 704 const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 709 705 710 706 //cmp ebx,0 … … 712 708 713 709 //jne 714 OpBuffer[obp++]=(char)0x0F; 715 OpBuffer[obp++]=(char)0x85; 716 obp+=sizeof(long); 717 i4=obp; 718 710 const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 719 711 720 712 if(basbuf[i3]=='0'){ … … 724 716 pDoPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(char), true ); 725 717 726 *((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;727 *((long *)(OpBuffer+i4-sizeof(long)))=obp-i4;718 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 ); 719 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 ); 728 720 } 729 721 else if(basbuf[i3]=='1'){ … … 731 723 732 724 //jmp 2(ループを続ける) 733 OpBuffer[obp++]=(char)0xEB; 734 OpBuffer[obp++]=(char)0x02; 735 736 *((long *)(OpBuffer+i2-sizeof(long)))=obp-i2; 737 *((long *)(OpBuffer+i4-sizeof(long)))=obp-i4; 725 const CodeGenerator::PertialSchedule *pTempPertialSchedule3 = compiler.codeGenerator.op_jmp( 0, sizeof(char), true ); 726 727 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 ); 728 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 ); 738 729 739 730 //jmp 5(ループ終了) 740 731 pDoPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(char), true ); 732 733 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule3 ); 741 734 } 742 735 } … … 791 784 792 785 void OpcodeExitSub(void){ 793 extern DWORD *pExitSubSchedule;794 extern int ExitSubScheduleNum;795 786 extern HANDLE hHeap; 796 787 … … 804 795 805 796 //jmp ...(End Sub/Function) 806 OpBuffer[obp++]=(char)0xE9; 807 808 pExitSubSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitSubSchedule,(ExitSubScheduleNum+1)*sizeof(DWORD)); 809 pExitSubSchedule[ExitSubScheduleNum]=obp; 810 ExitSubScheduleNum++; 811 812 obp+=sizeof(long); 797 compiler.codeGenerator.op_jmp_exitsub(); 813 798 } 814 799
Note:
See TracChangeset
for help on using the changeset viewer.