Changeset 684 in dev


Ignore:
Timestamp:
Jul 13, 2008, 2:23:09 AM (16 years ago)
Author:
dai_9181
Message:

・WithInfo周りをリファクタリング。

Location:
trunk/ab5.0/abdev
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/Compile.cpp

    r668 r684  
    1414
    1515//With情報
    16 WITHINFO WithInfo;
     16WithInfos withInfos;
    1717
    1818//デバッグ用行番号情報
     
    318318
    319319            case ESC_WITH:
    320                 extern WITHINFO WithInfo;
    321 
    322                 WithInfo.ppName=(char **)HeapReAlloc(hHeap,0,WithInfo.ppName,(WithInfo.num+1)*sizeof(char **));
    323                 WithInfo.ppName[WithInfo.num]=(char *)HeapAlloc(hHeap,0,lstrlen(Command+2)+1);
    324                 lstrcpy(WithInfo.ppName[WithInfo.num],Command+2);
    325 
    326                 WithInfo.pWithCp=(int *)HeapReAlloc(hHeap,0,WithInfo.pWithCp,(WithInfo.num+1)*sizeof(int));
    327                 WithInfo.pWithCp[WithInfo.num]=cp;
    328 
    329                 WithInfo.num++;
    330                 break;
     320                {
     321                    extern WithInfos withInfos;
     322                    withInfos.push_back( WithInfo( Command+2, cp ) );
     323                    break;
     324                }
    331325            case ESC_ENDWITH:
    332                 if(WithInfo.num<=0){
    333                     compiler.errorMessenger.Output(12,"End With",cp);
    334                     return;
    335                 }
    336                 WithInfo.num--;
    337                 HeapDefaultFree(WithInfo.ppName[WithInfo.num]);
    338                 break;
     326                {
     327                    extern WithInfos withInfos;
     328                    if( withInfos.size() <= 0 )
     329                    {
     330                        compiler.errorMessenger.Output(12,"End With",cp);
     331                        return;
     332                    }
     333
     334                    withInfos.pop_back();
     335                    break;
     336                }
    339337            case ESC_DECLARE:
    340338                if( compiler.IsLocalAreaCompiling() ){
  • trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp

    r649 r684  
    180180
    181181void GetWithName(char *buffer){
    182     extern WITHINFO WithInfo;
    183     int i;
    184 
     182    extern WithInfos withInfos;
    185183    buffer[0]=0;
    186     for(i=0;i<WithInfo.num;i++)
    187         lstrcat(buffer,WithInfo.ppName[i]);
     184    BOOST_FOREACH( const WithInfo &withInfo, withInfos )
     185    {
     186        lstrcat( buffer, withInfo.name.c_str() );
     187    }
    188188}
    189189
  • trunk/ab5.0/abdev/compiler_x86/Compile_ProcOp.cpp

    r677 r684  
    433433    compiler.codeGenerator.gotoLabelSchedules.clear();
    434434
    435     //With情報のメモリを確保
    436     extern WITHINFO WithInfo;
    437     WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
    438     WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
    439     WithInfo.num=0;
     435    //With情報を初期化
     436    extern WithInfos withInfos;
     437    withInfos.clear();
    440438
    441439    // 重複エラー情報をクリア
     
    590588    }
    591589
    592     //With情報のメモリを解放
    593     for(i3=0;i3<WithInfo.num;i3++){
    594         compiler.errorMessenger.Output(22,"With",WithInfo.pWithCp[i3]);
    595         HeapDefaultFree(WithInfo.ppName[i3]);
    596     }
    597     HeapDefaultFree(WithInfo.ppName);
    598     HeapDefaultFree(WithInfo.pWithCp);
    599 
    600590    //push ebp
    601591    AllLocalVarSize+=sizeof(long);
  • trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp

    r645 r684  
    370370    //compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() );
    371371
     372    // 名前空間が初期化されているかをチェック
     373    if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() )
     374    {
     375        compiler.errorMessenger.OutputFatalError();
     376    }
     377
    372378
    373379    /////////////////////////////////////////////////////////////////
     
    394400    compiler.StartGlobalAreaCompile();
    395401
    396     if( !compiler.IsDll() ){
    397         // 名前空間が初期化されているかをチェック
    398         if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() ){
    399             compiler.errorMessenger.OutputFatalError();
    400         }
    401 
     402    if( !compiler.IsDll() )
     403    {
    402404        //ラベル管理オブジェクトを初期化
    403405        compiler.codeGenerator.gotoLabels.clear();
     
    406408        compiler.codeGenerator.gotoLabelSchedules.clear();
    407409
    408         //With情報のメモリを確保
    409         extern WITHINFO WithInfo;
    410         WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
    411         WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
    412         WithInfo.num=0;
     410        //With情報を初期化
     411        extern WithInfos withInfos;
     412        withInfos.clear();
    413413
    414414        //Continueアドレスを初期化
     
    419419
    420420        trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
    421 
    422 
    423         //未完成
    424         //breakpoint;
    425 
    426421
    427422        if( compiler.IsCore() )
     
    472467        extern int GlobalOpBufferSize;
    473468        GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize();
    474 
    475         //With情報のメモリを解放
    476         for(i=0;i<WithInfo.num;i++){
    477             compiler.errorMessenger.Output(22,"With",WithInfo.pWithCp[i]);
    478             HeapDefaultFree(WithInfo.ppName[i]);
    479         }
    480         HeapDefaultFree(WithInfo.ppName);
    481         HeapDefaultFree(WithInfo.pWithCp);
    482469
    483470        // 名前空間が正しく閉じられているかをチェック
  • trunk/ab5.0/abdev/compiler_x86/Opcode.h

    r673 r684  
    2828
    2929//With情報
    30 struct WITHINFO{
    31     char **ppName;
    32     int *pWithCp;
    33     int num;
     30struct WithInfo
     31{
     32    std::string name;
     33    int sourceCodePos;
     34
     35    WithInfo( const std::string &name, int sourceCodePos )
     36        : name( name )
     37        , sourceCodePos( sourceCodePos )
     38    {
     39    }
    3440};
     41typedef std::vector<WithInfo> WithInfos;
    3542
    3643
Note: See TracChangeset for help on using the changeset viewer.