Changeset 248 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Jul 29, 2007, 12:33:04 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/BasicCompiler.vcproj
r237 r248 1281 1281 </File> 1282 1282 <File 1283 RelativePath="..\BasicCompiler_Common\src\LexicalScop ingImpl.cpp"1283 RelativePath="..\BasicCompiler_Common\src\LexicalScope.cpp" 1284 1284 > 1285 1285 </File> … … 1419 1419 </File> 1420 1420 <File 1421 RelativePath="..\BasicCompiler_Common\include\LexicalScop ingImpl.h"1421 RelativePath="..\BasicCompiler_Common\include\LexicalScope.h" 1422 1422 > 1423 1423 </File> -
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r247 r248 6 6 #include <Program.h> 7 7 #include <Compiler.h> 8 #include <LexicalScop ingImpl.h>8 #include <LexicalScope.h> 9 9 #include <Class.h> 10 10 #include <Variable.h> … … 97 97 UserProc::CompileStartForGlobalArea(); 98 98 99 GetLexicalScopes().CallDestructorsOfScopeEnd();99 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 100 100 101 101 UserProc::CompileStartForUserProc( pBackUserProc ); … … 349 349 350 350 //レキシカルスコープ情報 351 pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );352 pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );351 pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() ); 352 pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() ); 353 353 pVar->bLiving=TRUE; 354 354 … … 615 615 616 616 //ローカルオブジェクトの解放処理 617 GetLexicalScopes().CallDestructorsOfScopeEnd();617 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 618 618 619 619 //プロシージャ抜け出しスケジュール(Exit Sub/Function) -
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; -
trunk/abdev/BasicCompiler32/Compile_Var.cpp
r241 r248 4 4 #include <jenga/include/smoothie/LexicalAnalysis.h> 5 5 6 #include <LexicalScop ingImpl.h>6 #include <LexicalScope.h> 7 7 #include <CodeGenerator.h> 8 8 #include <Compiler.h> … … 1055 1055 1056 1056 //レキシカルスコープ 1057 pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );1058 pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );1057 pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() ); 1058 pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() ); 1059 1059 pVar->bLiving=TRUE; 1060 1060 … … 1090 1090 1091 1091 //レキシカルスコープ 1092 pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );1093 pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );1092 pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() ); 1093 pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() ); 1094 1094 pVar->bLiving=TRUE; 1095 1095 -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r246 r248 5 5 #include <jenga/include/smoothie/Smoothie.h> 6 6 7 #include <LexicalScop ingImpl.h>7 #include <LexicalScope.h> 8 8 #include <Class.h> 9 9 #include <Compiler.h> … … 387 387 388 388 //レキシカルスコープ情報を初期化 389 GetLexicalScopes().Init(obp);389 compiler.codeGenerator.lexicalScopes.Init(obp); 390 390 391 391 -
trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
r245 r248 142 142 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 143 143 144 const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;144 const PertialSchedule *pFalsePertialSchedule1; 145 145 if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){ 146 146 //符号なし演算 … … 156 156 } 157 157 158 const CodeGenerator::PertialSchedule *pTruePertialSchedule;158 const PertialSchedule *pTruePertialSchedule; 159 159 if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){ 160 160 //符号なし演算 … … 174 174 175 175 //ja FalseSchedule2(偽へジャンプ) 176 const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );176 const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true ); 177 177 178 178 //TrueScheduleのジャンプ先の設定 … … 351 351 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 352 352 353 const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;353 const PertialSchedule *pFalsePertialSchedule1; 354 354 if(IsSignedType(AnswerType)){ 355 355 //符号あり演算 … … 365 365 } 366 366 367 const CodeGenerator::PertialSchedule *pTruePertialSchedule;367 const PertialSchedule *pTruePertialSchedule; 368 368 if(IsSignedType(AnswerType)){ 369 369 //符号あり演算 … … 383 383 384 384 //jb FalseSchedule2(偽へジャンプ) 385 const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );385 const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true ); 386 386 387 387 //TrueScheduleのジャンプ先の設定 … … 563 563 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 564 564 565 const CodeGenerator::PertialSchedule *pTruePertialSchedule1;565 const PertialSchedule *pTruePertialSchedule1; 566 566 if(IsSignedType(AnswerType)){ 567 567 //符号あり演算 … … 577 577 } 578 578 579 const CodeGenerator::PertialSchedule *pFalsePertialSchedule;579 const PertialSchedule *pFalsePertialSchedule; 580 580 if(IsSignedType(AnswerType)){ 581 581 //符号あり演算 … … 595 595 596 596 //jb TrueSchedule2(真へジャンプ) 597 const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );597 const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true ); 598 598 599 599 //FalseScheduleのジャンプ先の設定 … … 771 771 compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX ); 772 772 773 const CodeGenerator::PertialSchedule *pTruePertialSchedule1;773 const PertialSchedule *pTruePertialSchedule1; 774 774 if(IsSignedType(AnswerType)){ 775 775 //符号有り … … 785 785 } 786 786 787 const CodeGenerator::PertialSchedule *pFalsePertialSchedule;787 const PertialSchedule *pFalsePertialSchedule; 788 788 if(IsSignedType(AnswerType)){ 789 789 //符号有り … … 803 803 804 804 //ja TrueSchedule2(真へジャンプ) 805 const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );805 const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true ); 806 806 807 807 //FalseScheduleのジャンプ先の設定 … … 975 975 976 976 //jne TrueSchedule1(真へジャンプ) 977 const CodeGenerator::PertialSchedule *pTruePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );977 const PertialSchedule *pTruePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 978 978 979 979 //cmp edx,ecx … … 981 981 982 982 //jne TrueSchedule2(真へジャンプ) 983 const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );983 const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 984 984 985 985 //xor eax,eax(eaxを0にする) … … 1141 1141 1142 1142 //jne FalseSchedule1(偽へジャンプ) 1143 const CodeGenerator::PertialSchedule *pFalsePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );1143 const PertialSchedule *pFalsePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 1144 1144 1145 1145 //cmp edx,ecx … … 1147 1147 1148 1148 //jne FalseSchedule2(偽へジャンプ) 1149 const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );1149 const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true ); 1150 1150 1151 1151 //mov eax,1
Note:
See TracChangeset
for help on using the changeset viewer.