Beispiel #1
0
        /// <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);
        }