Changeset 248 in dev for trunk/abdev/BasicCompiler32


Ignore:
Timestamp:
Jul 29, 2007, 12:33:04 PM (17 years ago)
Author:
dai_9181
Message:

BreakPertialScheduleをリファクタリング

Location:
trunk/abdev/BasicCompiler32
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/BasicCompiler.vcproj

    r237 r248  
    12811281                    </File>
    12821282                    <File
    1283                         RelativePath="..\BasicCompiler_Common\src\LexicalScopingImpl.cpp"
     1283                        RelativePath="..\BasicCompiler_Common\src\LexicalScope.cpp"
    12841284                        >
    12851285                    </File>
     
    14191419                </File>
    14201420                <File
    1421                     RelativePath="..\BasicCompiler_Common\include\LexicalScopingImpl.h"
     1421                    RelativePath="..\BasicCompiler_Common\include\LexicalScope.h"
    14221422                    >
    14231423                </File>
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r247 r248  
    66#include <Program.h>
    77#include <Compiler.h>
    8 #include <LexicalScopingImpl.h>
     8#include <LexicalScope.h>
    99#include <Class.h>
    1010#include <Variable.h>
     
    9797        UserProc::CompileStartForGlobalArea();
    9898
    99         GetLexicalScopes().CallDestructorsOfScopeEnd();
     99        compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
    100100
    101101        UserProc::CompileStartForUserProc( pBackUserProc );
     
    349349
    350350        //レキシカルスコープ情報
    351         pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
    352         pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
     351        pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
     352        pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
    353353        pVar->bLiving=TRUE;
    354354
     
    615615
    616616    //ローカルオブジェクトの解放処理
    617     GetLexicalScopes().CallDestructorsOfScopeEnd();
     617    compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
    618618
    619619    //プロシージャ抜け出しスケジュール(Exit Sub/Function)
  • trunk/abdev/BasicCompiler32/Compile_Statement.cpp

    r247 r248  
    33#include <jenga/include/smoothie/LexicalAnalysis.h>
    44
    5 #include <LexicalScopingImpl.h>
     5#include <LexicalScope.h>
    66#include <Compiler.h>
    77
     
    140140    }
    141141
    142     const CodeGenerator::PertialSchedule *pIfPertialSchedule = NULL;
     142    const PertialSchedule *pIfPertialSchedule = NULL;
    143143    if( !NumOpe(Parameter,Type(),tempType) ){
    144144        //NumOpe内でエラー
     
    207207
    208208        //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 );
    210210
    211211        //cmp ebx,0
     
    213213
    214214        //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 );
    216216
    217217        //jmp (endif、または else までジャンプ)
     
    240240
    241241    //レキシカルスコープをレベルアップ
    242     GetLexicalScopes().Start( obp, SCOPE_TYPE_IF );
     242    compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
    243243
    244244    i2=CompileBuffer(ESC_ENDIF,0);
    245245
    246246    //レキシカルスコープをレベルダウン
    247     GetLexicalScopes().End();
     247    compiler.codeGenerator.lexicalScopes.End();
    248248
    249249
     
    252252    if(i2==ESC_ELSE){
    253253        //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 );
    255255
    256256        compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
     
    262262
    263263        //レキシカルスコープをレベルアップ
    264         GetLexicalScopes().Start( obp, SCOPE_TYPE_IF );
     264        compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
    265265
    266266        CompileBuffer(ESC_ENDIF,0);
    267267
    268268        //レキシカルスコープをレベルダウン
    269         GetLexicalScopes().End();
     269        compiler.codeGenerator.lexicalScopes.End();
    270270
    271271
     
    340340    if(!Parameter[0]) SetError(10,"While",cp);
    341341
    342     const CodeGenerator::PertialSchedule *pWhilePertialSchedule = NULL;
     342    const PertialSchedule *pWhilePertialSchedule = NULL;
    343343    Type tempType;
    344344    if( !NumOpe(Parameter,Type(),tempType) ){
     
    408408
    409409        //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 );
    411411
    412412        //cmp ebx,0
     
    414414
    415415        //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 );
    417417
    418418        //jmp (Wendまでジャンプ)
     
    436436
    437437    //レキシカルスコープをレベルアップ
    438     GetLexicalScopes().Start( obp, SCOPE_TYPE_WHILE );
     438    compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE );
    439439
    440440    //While内をコンパイル
    441441    CompileBuffer(0,COM_WEND);
    442442
    443     GetLexicalScopes().CallDestructorsOfScopeEnd();
     443    compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
    444444
    445445    //jmp ...
     
    447447
    448448    //レキシカルスコープをレベルダウン
    449     GetLexicalScopes().End();
     449    compiler.codeGenerator.lexicalScopes.End();
    450450
    451451    if( pWhilePertialSchedule )
     
    486486
    487487    //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 );
    489489
    490490    //Continueアドレスのバックアップとセット
     
    528528
    529529    //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 );
    531531
    532532    //jeジャンプ先のオフセット値
     
    552552
    553553    //レキシカルスコープをレベルアップ
    554     GetLexicalScopes().Start( obp, SCOPE_TYPE_FOR );
     554    compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR );
    555555
    556556    //For内をコンパイル
    557557    CompileBuffer(0,COM_NEXT);
    558558
    559     GetLexicalScopes().CallDestructorsOfScopeEnd();
     559    compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
    560560
    561561    if(szNextVariable[0]){
     
    569569
    570570    //レキシカルスコープをレベルダウン
    571     GetLexicalScopes().End();
     571    compiler.codeGenerator.lexicalScopes.End();
    572572
    573573    //jeジャンプ先のオフセット値
     
    588588
    589589    //レキシカルスコープをレベルアップ
    590     GetLexicalScopes().Start( obp, SCOPE_TYPE_DO );
     590    compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO );
    591591
    592592    //Do内をコンパイル
    593593    CompileBuffer(0,COM_LOOP);
    594594
    595     GetLexicalScopes().CallDestructorsOfScopeEnd();
    596 
    597     const CodeGenerator::PertialSchedule *pDoPertialSchedule = NULL;
     595    compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
     596
     597    const PertialSchedule *pDoPertialSchedule = NULL;
    598598
    599599    extern char *basbuf;
     
    702702
    703703                //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 );
    705705
    706706                //cmp ebx,0
     
    708708
    709709                //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 );
    711711
    712712                if(basbuf[i3]=='0'){
     
    723723
    724724                    //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 );
    726726
    727727                    compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 );
     
    767767
    768768    //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 );
    770770
    771771    //レキシカルスコープをレベルダウン
    772     GetLexicalScopes().End();
     772    compiler.codeGenerator.lexicalScopes.End();
    773773
    774774    //jmpジャンプ先のオフセット値
     
    792792
    793793    //未解放のローカルオブジェクトのデストラクタを呼び出す
    794     GetLexicalScopes().CallDestructorsOfReturn();
     794    compiler.codeGenerator.lexicalScopes.CallDestructorsOfReturn();
    795795
    796796    //jmp ...(End Sub/Function)
     
    10491049
    10501050    //レキシカルスコープをレベルアップ
    1051     GetLexicalScopes().Start( obp, SCOPE_TYPE_SELECT );
     1051    compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT );
    10521052
    10531053    //Select Case内をコンパイル
     
    10661066
    10671067    //レキシカルスコープをレベルダウン
    1068     GetLexicalScopes().End();
     1068    compiler.codeGenerator.lexicalScopes.End();
    10691069
    10701070    pCaseSchedule=temp_pCaseSchedule;
  • trunk/abdev/BasicCompiler32/Compile_Var.cpp

    r241 r248  
    44#include <jenga/include/smoothie/LexicalAnalysis.h>
    55
    6 #include <LexicalScopingImpl.h>
     6#include <LexicalScope.h>
    77#include <CodeGenerator.h>
    88#include <Compiler.h>
     
    10551055
    10561056        //レキシカルスコープ
    1057         pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
    1058         pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
     1057        pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
     1058        pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
    10591059        pVar->bLiving=TRUE;
    10601060
     
    10901090
    10911091        //レキシカルスコープ
    1092         pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
    1093         pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
     1092        pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
     1093        pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
    10941094        pVar->bLiving=TRUE;
    10951095
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r246 r248  
    55#include <jenga/include/smoothie/Smoothie.h>
    66
    7 #include <LexicalScopingImpl.h>
     7#include <LexicalScope.h>
    88#include <Class.h>
    99#include <Compiler.h>
     
    387387
    388388    //レキシカルスコープ情報を初期化
    389     GetLexicalScopes().Init(obp);
     389    compiler.codeGenerator.lexicalScopes.Init(obp);
    390390
    391391
  • trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp

    r245 r248  
    142142        compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
    143143
    144         const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;
     144        const PertialSchedule *pFalsePertialSchedule1;
    145145        if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
    146146            //符号なし演算
     
    156156        }
    157157
    158         const CodeGenerator::PertialSchedule *pTruePertialSchedule;
     158        const PertialSchedule *pTruePertialSchedule;
    159159        if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
    160160            //符号なし演算
     
    174174
    175175        //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 );
    177177
    178178        //TrueScheduleのジャンプ先の設定
     
    351351        compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
    352352
    353         const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;
     353        const PertialSchedule *pFalsePertialSchedule1;
    354354        if(IsSignedType(AnswerType)){
    355355            //符号あり演算
     
    365365        }
    366366
    367         const CodeGenerator::PertialSchedule *pTruePertialSchedule;
     367        const PertialSchedule *pTruePertialSchedule;
    368368        if(IsSignedType(AnswerType)){
    369369            //符号あり演算
     
    383383
    384384        //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 );
    386386
    387387        //TrueScheduleのジャンプ先の設定
     
    563563        compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
    564564
    565         const CodeGenerator::PertialSchedule *pTruePertialSchedule1;
     565        const PertialSchedule *pTruePertialSchedule1;
    566566        if(IsSignedType(AnswerType)){
    567567            //符号あり演算
     
    577577        }
    578578
    579         const CodeGenerator::PertialSchedule *pFalsePertialSchedule;
     579        const PertialSchedule *pFalsePertialSchedule;
    580580        if(IsSignedType(AnswerType)){
    581581            //符号あり演算
     
    595595
    596596        //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 );
    598598
    599599        //FalseScheduleのジャンプ先の設定
     
    771771        compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
    772772
    773         const CodeGenerator::PertialSchedule *pTruePertialSchedule1;
     773        const PertialSchedule *pTruePertialSchedule1;
    774774        if(IsSignedType(AnswerType)){
    775775            //符号有り
     
    785785        }
    786786
    787         const CodeGenerator::PertialSchedule *pFalsePertialSchedule;
     787        const PertialSchedule *pFalsePertialSchedule;
    788788        if(IsSignedType(AnswerType)){
    789789            //符号有り
     
    803803
    804804        //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 );
    806806
    807807        //FalseScheduleのジャンプ先の設定
     
    975975
    976976        //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 );
    978978
    979979        //cmp edx,ecx
     
    981981
    982982        //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 );
    984984
    985985        //xor eax,eax(eaxを0にする)
     
    11411141
    11421142        //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 );
    11441144
    11451145        //cmp edx,ecx
     
    11471147
    11481148        //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 );
    11501150
    11511151        //mov eax,1
Note: See TracChangeset for help on using the changeset viewer.