Ignore:
Timestamp:
Aug 17, 2007, 7:36:51 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Variable.cpp

    r287 r288  
    3333    //レキシカルスコープを考慮して重複判定
    3434    for( int i=(int)this->size()-1; i>=0 ; i-- ){
    35         Variable &var = *(*this)[i];
    36         if( var.bLiving                                         //現在のスコープで有効なもの
    37             && var.GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel()    //現在のスコープと同一レベル
     35        const Variable *pVar = (*this)[i];
     36        if( pVar->bLiving                                           //現在のスコープで有効なもの
     37            && pVar->GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel()  //現在のスコープと同一レベル
    3838            )
    3939        {
    40             if( var.IsEqualSymbol( symbol ) ){
     40            if( pVar->IsEqualSymbol( symbol ) ){
    4141                return true;
    4242            }
     
    5050    //レキシカルスコープを考慮してバックサーチ
    5151    for( int i=(int)this->size()-1; i>=0 ; i-- ){
    52         Variable &var = *(*this)[i];
    53         if( var.bLiving                                         //現在のスコープで有効なもの
    54             && var.GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel()    //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     52        const Variable *pVar = (*this)[i];
     53        if( pVar->bLiving                                           //現在のスコープで有効なもの
     54            && pVar->GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel()  //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
    5555            ){
    56                 if( var.IsEqualSymbol( symbol ) ){
    57                     return &var;
     56                if( pVar->IsEqualSymbol( symbol ) ){
     57                    return pVar;
    5858                }
    5959        }
     
    7474}
    7575
    76 void Variables::Add( Variable *pVar, bool isResetOffsetAddress )
     76void GlobalVars::Add( Variable *pVar, bool isResetOffsetAddress )
    7777{
    7878    int alignment = 0;
     
    8484        //初期バッファがあるとき
    8585
    86         if( alignment ){
    87             if( allInitSize % alignment ){
    88                 allInitSize += alignment - (allInitSize % alignment);
    89             }
    90         }
    91 
    9286        if( isResetOffsetAddress )
    9387        {
    94             pVar->SetOffsetAddress( allInitSize );
     88            if( alignment ){
     89                if( initAreaBuffer.GetSize() % alignment ){
     90                    initAreaBuffer.Resize( initAreaBuffer.GetSize() + ( alignment - (initAreaBuffer.GetSize() % alignment) ) );
     91                }
     92            }
     93
     94            pVar->SetOffsetAddress( initAreaBuffer.GetSize() );
     95
     96            initAreaBuffer.Resize( initAreaBuffer.GetSize() + pVar->GetMemorySize() );
    9597        }
    96         allInitSize += pVar->GetMemorySize();
    9798    }
    9899    else{
     
    105106        }
    106107
    107         if( !isResetOffsetAddress )
    108         {
    109             Jenga::Throw( "[Variables::Add] 初期バッファがない変数に対してisResetOffsetAddressをfalseにできない" );
    110         }
    111 
    112108        pVar->SetOffsetAddress( allSize | 0x80000000 );
    113109        allSize += pVar->GetMemorySize();
Note: See TracChangeset for help on using the changeset viewer.