Show
Ignore:
Timestamp:
04/25/09 13:20:14 (6 years ago)
Author:
tekisuke
Message:

マクロ再帰呼び出しの検出に不具合があったということでarcheさんの修正をコミット。

Location:
lang/actionscript/flmml/trunk/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MML.as

    r32278 r32797  
    523523 
    524524        // 09/04/03 arche [ADD] begin 
    525         protected function replaceMacro(macroTable:Array):void { 
     525        protected function replaceMacro(macroTable:Array):Boolean { 
    526526            for each(var macro:Object in macroTable){ 
    527527                if(m_string.substr(m_letter, macro.id.length) == macro.id){ 
     
    560560                    m_letter = start - 1; 
    561561                    //trace(m_string.substring(m_letter)); 
    562                     break; 
    563                 } 
    564             } 
     562                    return true; 
     563                } 
     564            } 
     565            return false; 
    565566        } 
    566567        // 09/04/03 arche [ADD] end 
     
    636637                                                while(m_letter < last){ 
    637638                                                    if(c == "$"){ 
    638                                                         if(m_string.substr(m_letter, id.length) == id){ 
    639                                                             m_letter--; 
    640                                                             m_string = remove(m_string, m_letter, m_letter + id.length); 
    641                                                             warning(MWarning.RECURSIVE_MACRO, id); 
    642                                                         }else{ 
    643                                                             replaceMacro(macroTable); 
    644                                                         } 
     639                                                        if(!replaceMacro(macroTable)){ 
     640                                                        if(m_string.substr(m_letter, id.length) == id){ 
     641                                                            m_letter--; 
     642                                                            m_string = remove(m_string, m_letter, m_letter + id.length); 
     643                                                            warning(MWarning.RECURSIVE_MACRO, id); 
     644                                                        } 
     645                                                    } 
    645646                                                        last = m_string.indexOf(";", m_letter); 
    646647                                                    } 
     
    649650                                                var pos:int = 0; 
    650651                                                for(; pos < macroTable.length; pos++){ 
     652                                                 if(macroTable[pos].id == id){ 
     653                                                     macroTable.splice(pos, 1); 
     654                                                     pos--; 
     655                                                     continue; 
     656                                                 } 
    651657                                                        if(macroTable[pos].id.length < id.length){ 
    652658                                                                break;