Changeset 34 in dev for BasicCompiler_Common/Variable.cpp


Ignore:
Timestamp:
Jan 14, 2007, 6:11:23 AM (17 years ago)
Author:
dai_9181
Message:

スコープ処理を統一した。関数の途中でReturnしても、スコープにあるローカルオブジェクトを正確に破棄できるようにした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Variable.cpp

    r29 r34  
    648648
    649649        for(i=MaxLocalVarNum-1;i>=0;i--){   //レキシカルスコープを考慮してバックサーチ
    650             if(LocalVar[i].bLiving){
    651                 if(lstrcmp(VarName,LocalVar[i].name)==0) break;
     650            if( LocalVar[i].bLiving                                         //現在のスコープで有効なもの
     651                && LocalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()    //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     652                ){
     653                    if(lstrcmp(VarName,LocalVar[i].name)==0) break;
    652654            }
    653655        }
     
    766768
    767769    for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
    768         if(GlobalVar[i].bLiving){
    769             if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
     770        if( GlobalVar[i].bLiving                                        //現在のスコープで有効なもの
     771            && GlobalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()   //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     772            ){
     773                if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
    770774        }
    771775    }
Note: See TracChangeset for help on using the changeset viewer.