/// <summary> /// /// </summary> /// <param name="statementsDest"></param> /// <param name="statementsSource"></param> /// <param name="containers">Outermost container is first. The bodies of the containers are ignored.</param> internal static void AddStatementWithContainers(IList <IStatement> statementsDest, IList <IStatement> statementsSource, ICollection <IStatement> containers) { if (statementsSource.Count == 0) { return; } if (containers.Count == 0) { statementsDest.AddRange(statementsSource); return; } IStatement outermostContainer = null; IStatement parent = null; List <IStatement> loopBreakers = new List <IStatement>(); foreach (IStatement container in containers) { IStatement child = CreateContainer(container); if (parent != null) { AddToContainer(parent, child); } else { outermostContainer = child; } parent = child; if (child is IBrokenForStatement) { IBrokenForStatement ifs = (IBrokenForStatement)child; loopBreakers.Add(Recognizer.LoopBreakStatement(ifs)); } } AddToContainer(parent, statementsSource); AddToContainer(parent, loopBreakers); statementsDest.Add(outermostContainer); }