Changeset 248 in dev for trunk/abdev/BasicCompiler32/Compile_Statement.cpp
- Timestamp:
- Jul 29, 2007, 12:33:04 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_Statement.cpp
r247 r248 3 3 #include <jenga/include/smoothie/LexicalAnalysis.h> 4 4 5 #include <LexicalScop ingImpl.h>5 #include <LexicalScope.h> 6 6 #include <Compiler.h> 7 7 … … 140 140 } 141 141 142 const CodeGenerator::PertialSchedule *pIfPertialSchedule = NULL;142 const PertialSchedule *pIfPertialSchedule = NULL; 143 143 if( !NumOpe(Parameter,Type(),tempType) ){ 144 144 //NumOpe内でエラー … … 207 207 208 208 //jne 209 const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );209 const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 210 210 211 211 //cmp ebx,0 … … 213 213 214 214 //jne 215 const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );215 const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 216 216 217 217 //jmp (endif、または else までジャンプ) … … 240 240 241 241 //レキシカルスコープをレベルアップ 242 GetLexicalScopes().Start( obp,SCOPE_TYPE_IF );242 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF ); 243 243 244 244 i2=CompileBuffer(ESC_ENDIF,0); 245 245 246 246 //レキシカルスコープをレベルダウン 247 GetLexicalScopes().End();247 compiler.codeGenerator.lexicalScopes.End(); 248 248 249 249 … … 252 252 if(i2==ESC_ELSE){ 253 253 //jmp (endifまで) 254 const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );254 const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true ); 255 255 256 256 compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule ); … … 262 262 263 263 //レキシカルスコープをレベルアップ 264 GetLexicalScopes().Start( obp,SCOPE_TYPE_IF );264 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF ); 265 265 266 266 CompileBuffer(ESC_ENDIF,0); 267 267 268 268 //レキシカルスコープをレベルダウン 269 GetLexicalScopes().End();269 compiler.codeGenerator.lexicalScopes.End(); 270 270 271 271 … … 340 340 if(!Parameter[0]) SetError(10,"While",cp); 341 341 342 const CodeGenerator::PertialSchedule *pWhilePertialSchedule = NULL;342 const PertialSchedule *pWhilePertialSchedule = NULL; 343 343 Type tempType; 344 344 if( !NumOpe(Parameter,Type(),tempType) ){ … … 408 408 409 409 //jne 410 const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );410 const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 411 411 412 412 //cmp ebx,0 … … 414 414 415 415 //jne 416 const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );416 const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 417 417 418 418 //jmp (Wendまでジャンプ) … … 436 436 437 437 //レキシカルスコープをレベルアップ 438 GetLexicalScopes().Start( obp,SCOPE_TYPE_WHILE );438 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE ); 439 439 440 440 //While内をコンパイル 441 441 CompileBuffer(0,COM_WEND); 442 442 443 GetLexicalScopes().CallDestructorsOfScopeEnd();443 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 444 444 445 445 //jmp ... … … 447 447 448 448 //レキシカルスコープをレベルダウン 449 GetLexicalScopes().End();449 compiler.codeGenerator.lexicalScopes.End(); 450 450 451 451 if( pWhilePertialSchedule ) … … 486 486 487 487 //jmp ... 488 const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );488 const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true ); 489 489 490 490 //Continueアドレスのバックアップとセット … … 528 528 529 529 //jmp [カウンタ減少の場合の判定を飛び越す] 530 const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );530 const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true ); 531 531 532 532 //jeジャンプ先のオフセット値 … … 552 552 553 553 //レキシカルスコープをレベルアップ 554 GetLexicalScopes().Start( obp,SCOPE_TYPE_FOR );554 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR ); 555 555 556 556 //For内をコンパイル 557 557 CompileBuffer(0,COM_NEXT); 558 558 559 GetLexicalScopes().CallDestructorsOfScopeEnd();559 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 560 560 561 561 if(szNextVariable[0]){ … … 569 569 570 570 //レキシカルスコープをレベルダウン 571 GetLexicalScopes().End();571 compiler.codeGenerator.lexicalScopes.End(); 572 572 573 573 //jeジャンプ先のオフセット値 … … 588 588 589 589 //レキシカルスコープをレベルアップ 590 GetLexicalScopes().Start( obp,SCOPE_TYPE_DO );590 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO ); 591 591 592 592 //Do内をコンパイル 593 593 CompileBuffer(0,COM_LOOP); 594 594 595 GetLexicalScopes().CallDestructorsOfScopeEnd();596 597 const CodeGenerator::PertialSchedule *pDoPertialSchedule = NULL;595 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 596 597 const PertialSchedule *pDoPertialSchedule = NULL; 598 598 599 599 extern char *basbuf; … … 702 702 703 703 //jne 704 const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );704 const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 705 705 706 706 //cmp ebx,0 … … 708 708 709 709 //jne 710 const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );710 const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 711 711 712 712 if(basbuf[i3]=='0'){ … … 723 723 724 724 //jmp 2(ループを続ける) 725 const CodeGenerator::PertialSchedule *pTempPertialSchedule3 = compiler.codeGenerator.op_jmp( 0, sizeof(char), true );725 const PertialSchedule *pTempPertialSchedule3 = compiler.codeGenerator.op_jmp( 0, sizeof(char), true ); 726 726 727 727 compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 ); … … 767 767 768 768 //jmp ... 769 const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );769 const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true ); 770 770 771 771 //レキシカルスコープをレベルダウン 772 GetLexicalScopes().End();772 compiler.codeGenerator.lexicalScopes.End(); 773 773 774 774 //jmpジャンプ先のオフセット値 … … 792 792 793 793 //未解放のローカルオブジェクトのデストラクタを呼び出す 794 GetLexicalScopes().CallDestructorsOfReturn();794 compiler.codeGenerator.lexicalScopes.CallDestructorsOfReturn(); 795 795 796 796 //jmp ...(End Sub/Function) … … 1049 1049 1050 1050 //レキシカルスコープをレベルアップ 1051 GetLexicalScopes().Start( obp,SCOPE_TYPE_SELECT );1051 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT ); 1052 1052 1053 1053 //Select Case内をコンパイル … … 1066 1066 1067 1067 //レキシカルスコープをレベルダウン 1068 GetLexicalScopes().End();1068 compiler.codeGenerator.lexicalScopes.End(); 1069 1069 1070 1070 pCaseSchedule=temp_pCaseSchedule;
Note:
See TracChangeset
for help on using the changeset viewer.