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); } } } } }
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; }
public abstract void Visit(ElseConstruction elseCon, IfConstruction ifCon);
public abstract void Visit(IfConstruction ifCon);