Changeset 34 in dev for BasicCompiler32/Compile_Var.cpp


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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Var.cpp

    r28 r34  
    381381
    382382        for(i=MaxLocalVarNum-1;i>=0;i--){   //レキシカルスコープを考慮してバックサーチ
    383             if(LocalVar[i].bLiving){
    384                 if(lstrcmp(VarName,LocalVar[i].name)==0) break;
     383            if( LocalVar[i].bLiving                                         //現在のスコープで有効なもの
     384                && LocalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()    //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     385                ){
     386                    if(lstrcmp(VarName,LocalVar[i].name)==0) break;
    385387            }
    386388        }
     
    540542
    541543    for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
    542         if(GlobalVar[i].bLiving){
    543             if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
     544        if( GlobalVar[i].bLiving                                        //現在のスコープで有効なもの
     545            && GlobalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()   //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     546            ){
     547                if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
    544548        }
    545549    }
Note: See TracChangeset for help on using the changeset viewer.