Exemplo n.º 1
0
 public override void Visit(ElseConstruction elseCon, IfConstruction ifCon)
 {
     for (int position = currentPosition; position < fileData.Length && ifCon.Stop; ++position)
     {
         if (fileData[position] == StaticData.MacroSeparator)
         {
             string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position);
             if (table.Contains(macrosName))
             {
                 if (macrosName == "#else" || macrosName == "#elseif")
                 {
                     HandleEndOfElseConstruction(elseCon, position);
                     HandleElseConstructionAtPosition(ifCon, macrosName, ref position);
                 }
                 else if (macrosName == "#end")
                 {
                     HandleEndConstructionAtPosition(elseCon, position);
                     elseCon.SetFatherStop();
                     return;
                 }
                 else
                 {
                     HandleConstructionAtPosition(elseCon, macrosName, ref position);
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
        private void HandleElseConstructionAtPosition(IfConstruction ifCon, string name, ref int position)
        {
            ifCon.AddUnit(
                new StaticText(ifCon, fileData.Substring(currentPosition, position - currentPosition)));
            string macrosData = null;

            if (name == "#elseif")
            {
                int macrosDataEndPos = ParseUtilites.GetMacrosCloseBracketPosAfterMacroSep(fileData, position);
                macrosData      = ParseUtilites.GetMacrossData(fileData, position, macrosDataEndPos);
                currentPosition = macrosDataEndPos + 1;
            }
            else
            {
                currentPosition = currentPosition + "#else".Length;
            }
            ElseConstruction compositePart = (ElseConstruction)PredefinedMacros.GetMacro(ifCon, name, fileData, macrosData);

            compositePart.SetFatherIfConstruction(ifCon);
            ifCon.AddElseConstruction(compositePart);
            compositePart.StartPositionInFile = position;
            compositePart.Accept(this);
            position = currentPosition;
        }
Exemplo n.º 3
0
 public abstract void Visit(ElseConstruction elseCon, IfConstruction ifCon);
Exemplo n.º 4
0
 public abstract void Visit(IfConstruction ifCon);