Changeset 570 in dev for trunk/ab5.0/abdev/BasicCompiler_Common
- Timestamp:
- May 6, 2008, 8:31:52 PM (17 years ago)
- Location:
- trunk/ab5.0/abdev/BasicCompiler_Common
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp
r564 r570 565 565 ///////////////// 566 566 567 pVar = compiler.GetCompilingUserProc().GetLocalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) ); 567 pVar = compiler.GetCompilingUserProc().GetLocalVars().BackSearch( 568 LexicalAnalyzer::FullNameToSymbol( VarName ), 569 compiler.codeGenerator.lexicalScopes.GetNowLevel() 570 ); 568 571 if( pVar ){ 569 572 goto ok; … … 669 672 //////////////////// 670 673 671 pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) ); 674 pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( 675 LexicalAnalyzer::FullNameToSymbol( VarName ), 676 compiler.codeGenerator.lexicalScopes.GetNowLevel() 677 ); 672 678 if( pVar ){ 673 679 goto ok; … … 943 949 ///////////////////////// 944 950 945 if( compiler.GetObjectModule().meta.GetGlobalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( name ) ) ){951 if( compiler.GetObjectModule().meta.GetGlobalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( name ), compiler.codeGenerator.lexicalScopes.GetNowLevel() ) ){ 946 952 //2重定義のエラー 947 953 compiler.errorMessenger.Output(15,name,cp); -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Variable.h
r529 r570 222 222 } 223 223 224 bool DuplicateCheck( const Symbol &symbol ) const;225 226 const Variable *BackSearch( const Symbol &symbol ) const;224 bool DuplicateCheck( const Symbol &symbol, int nowScopeLevel ) const; 225 226 const Variable *BackSearch( const Symbol &symbol, int nowScopeLevel ) const; 227 227 const Variable *Find( const Symbol &symbol )const; 228 228 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Variable.cpp
r523 r570 43 43 44 44 45 bool Variables::DuplicateCheck( const Symbol &symbol ) const45 bool Variables::DuplicateCheck( const Symbol &symbol, int nowScopeLevel ) const 46 46 { 47 47 //レキシカルスコープを考慮して重複判定 48 48 for( int i=(int)this->size()-1; i>=0 ; i-- ){ 49 49 const Variable *pVar = (*this)[i]; 50 if( pVar->isLiving 51 && pVar->GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel()//現在のスコープと同一レベル50 if( pVar->isLiving //現在のスコープで有効なもの 51 && pVar->GetScopeLevel() == nowScopeLevel //現在のスコープと同一レベル 52 52 ) 53 53 { … … 60 60 } 61 61 62 const Variable *Variables::BackSearch( const Symbol &symbol ) const62 const Variable *Variables::BackSearch( const Symbol &symbol, int nowScopeLevel ) const 63 63 { 64 64 //レキシカルスコープを考慮してバックサーチ 65 65 for( int i=(int)this->size()-1; i>=0 ; i-- ){ 66 66 const Variable *pVar = (*this)[i]; 67 if( pVar->isLiving 68 && pVar->GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel()//現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)67 if( pVar->isLiving //現在のスコープで有効なもの 68 && pVar->GetScopeLevel() <= nowScopeLevel //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮) 69 69 ){ 70 70 if( pVar->IsEqualSymbol( symbol ) ){
Note:
See TracChangeset
for help on using the changeset viewer.