Changeset 288 in dev for trunk/abdev/BasicCompiler_Common/src/Variable.cpp
- Timestamp:
- Aug 17, 2007, 7:36:51 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/Variable.cpp
r287 r288 33 33 //レキシカルスコープを考慮して重複判定 34 34 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() //現在のスコープと同一レベル 38 38 ) 39 39 { 40 if( var.IsEqualSymbol( symbol ) ){40 if( pVar->IsEqualSymbol( symbol ) ){ 41 41 return true; 42 42 } … … 50 50 //レキシカルスコープを考慮してバックサーチ 51 51 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による解放処理中を考慮) 55 55 ){ 56 if( var.IsEqualSymbol( symbol ) ){57 return &var;56 if( pVar->IsEqualSymbol( symbol ) ){ 57 return pVar; 58 58 } 59 59 } … … 74 74 } 75 75 76 void Variables::Add( Variable *pVar, bool isResetOffsetAddress )76 void GlobalVars::Add( Variable *pVar, bool isResetOffsetAddress ) 77 77 { 78 78 int alignment = 0; … … 84 84 //初期バッファがあるとき 85 85 86 if( alignment ){87 if( allInitSize % alignment ){88 allInitSize += alignment - (allInitSize % alignment);89 }90 }91 92 86 if( isResetOffsetAddress ) 93 87 { 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() ); 95 97 } 96 allInitSize += pVar->GetMemorySize();97 98 } 98 99 else{ … … 105 106 } 106 107 107 if( !isResetOffsetAddress )108 {109 Jenga::Throw( "[Variables::Add] 初期バッファがない変数に対してisResetOffsetAddressをfalseにできない" );110 }111 112 108 pVar->SetOffsetAddress( allSize | 0x80000000 ); 113 109 allSize += pVar->GetMemorySize();
Note:
See TracChangeset
for help on using the changeset viewer.