Changeset 247 in dev for trunk/abdev/BasicCompiler_Common
- Timestamp:
- Jul 28, 2007, 4:17:56 PM (18 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/Compile.cpp
r246 r247 28 28 int CaseScheduleNum; 29 29 int NowCaseSchedule; 30 31 //プロシージャ抜け出しスケジュール(Exit Sub/Function)32 DWORD *pExitSubSchedule;33 int ExitSubScheduleNum;34 30 35 31 //グローバル変数初期バッファ -
trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
r246 r247 101 101 public: 102 102 103 // Exit Subスケジュールの管理 104 std::vector<long> exitSubCodePositions; 105 std::vector<int> _exitSubCodePositions_ObpOld; 106 103 107 // Gotoスケジュールの管理 104 108 std::vector<GotoLabelSchedule> gotoLabelSchedules; … … 158 162 return _continueCodePositions_ObpOld[_continueCodePositions_ObpOld.size()-1]; 159 163 } 164 165 void ResolveExitSubSchedule(); 160 166 161 167 void CheckUnresolveSchedule(); … … 183 189 const PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false ); 184 190 void op_jmp_continue(); 191 void op_jmp_exitsub(); 185 192 void op_jmp_goto_schedule( const GotoLabelSchedule &gotoLabelSchedule ); 186 193 -
trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
r246 r247 3 3 #include <CodeGenerator.h> 4 4 5 6 void CodeGenerator::ResolveExitSubSchedule() 7 { 8 BOOST_FOREACH( long exitSubCodePosition, exitSubCodePositions ) 9 { 10 pNativeCode->Overwrite( exitSubCodePosition, (long)( pNativeCode->GetSize()-(exitSubCodePosition+sizeof(long)) ) ); 11 } 12 13 // TODO: 未完成 14 BOOST_FOREACH( long exitSubCodePositionOld, _exitSubCodePositions_ObpOld ) 15 { 16 extern int obp; 17 pNativeCode->OverwriteOld( exitSubCodePositionOld, (long)( obp-(exitSubCodePositionOld+sizeof(long)) ) ); 18 } 19 } 5 20 6 21 void CodeGenerator::CheckUnresolveSchedule() … … 202 217 op_jmp( GetContinueCodePosOld()-obp, sizeof(long), false, true ); 203 218 } 204 void CodeGenerator::op_jmp_ goto_schedule( const GotoLabelSchedule &gotoLabelSchedule)219 void CodeGenerator::op_jmp_exitsub() 205 220 { 206 221 // オペコード 207 222 pNativeCode->Put( (char)0xE9 ); 208 223 224 exitSubCodePositions.push_back( pNativeCode->GetSize() ); 225 226 extern int obp; 227 _exitSubCodePositions_ObpOld.push_back( obp ); 228 229 pNativeCode->Put( (long)0 ); 230 } 231 void CodeGenerator::op_jmp_goto_schedule( const GotoLabelSchedule &gotoLabelSchedule ) 232 { 233 // オペコード 234 pNativeCode->Put( (char)0xE9 ); 235 209 236 gotoLabelSchedules.push_back( gotoLabelSchedule ); 210 237
Note:
See TracChangeset
for help on using the changeset viewer.