Changeset 34 in dev for BasicCompiler64/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
  • BasicCompiler64/Compile_Var.cpp

    r28 r34  
    408408
    409409        for(i=MaxLocalVarNum-1;i>=0;i--){   //レキシカルスコープを考慮してバックサーチ
    410             if(LocalVar[i].bLiving){
    411                 if(lstrcmp(VarName,LocalVar[i].name)==0) break;
     410            if( LocalVar[i].bLiving                                         //現在のスコープで有効なもの
     411                && LocalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()    //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     412                ){
     413                    if(lstrcmp(VarName,LocalVar[i].name)==0) break;
    412414            }
    413415        }
     
    564566
    565567    for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
    566         if(GlobalVar[i].bLiving){
    567             if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
     568        if( GlobalVar[i].bLiving                                        //現在のスコープで有効なもの
     569            && GlobalVar[i].ScopeLevel <= obj_LexScopes.GetNowLevel()   //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)
     570            ){
     571                if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
    568572        }
    569573    }
Note: See TracChangeset for help on using the changeset viewer.