/// <summary>
        /// Initializes a new instance of the <see cref="CSharpAsLongAsInstruction"/> class.
        /// </summary>
        /// <param name="context">The creation context.</param>
        /// <param name="parentFeature">The parent feature.</param>
        /// <param name="source">The Easly instruction from which the C# instruction is created.</param>
        protected CSharpAsLongAsInstruction(ICSharpContext context, ICSharpFeature parentFeature, IAsLongAsInstruction source)
            : base(context, parentFeature, source)
        {
            ContinueCondition = CSharpExpression.Create(context, (IExpression)source.ContinueCondition);

            foreach (IContinuation Continuation in source.ContinuationList)
            {
                ICSharpContinuation NewContinuation = CSharpContinuation.Create(context, parentFeature, Continuation);
                ContinuationList.Add(NewContinuation);
            }

            if (source.ElseInstructions.IsAssigned)
            {
                ElseInstructions = CSharpScope.Create(context, parentFeature, (IScope)source.ElseInstructions.Item);
            }
        }
        /// <summary>
        /// Writes down the C# instruction.
        /// </summary>
        /// <param name="writer">The stream on which to write.</param>
        public override void WriteCSharp(ICSharpWriter writer)
        {
            Debug.Assert(WriteDown);

            string ContinueExpressionText;

            for (int i = 0; i < ContinuationList.Count; i++)
            {
                ICSharpContinuation Item = ContinuationList[i];

                if (i > 0)
                {
                    writer.WriteEmptyLine();
                }

                WriteCSharpContinueCondition(writer, out ContinueExpressionText);
                writer.WriteIndentedLine($"if ({ContinueExpressionText})");

                Item.WriteCSharpInstructions(writer);

                int CleanupInstructionCount = 0;
                for (int j = i; j > 0; j--)
                {
                    ICSharpContinuation PreviousItem = ContinuationList[j - 1];
                    CleanupInstructionCount += PreviousItem.CleanupList.Count;
                }

                if (CleanupInstructionCount > 0)
                {
                    writer.WriteIndentedLine("else");

                    if (CleanupInstructionCount > 1)
                    {
                        writer.WriteIndentedLine("{");
                    }

                    writer.IncreaseIndent();

                    for (int j = i; j > 0; j--)
                    {
                        if (j < i)
                        {
                            writer.WriteEmptyLine();
                        }

                        ICSharpContinuation PreviousItem = ContinuationList[j - 1];
                        PreviousItem.WriteCSharpCleanupInstructions(writer);
                    }

                    writer.DecreaseIndent();

                    if (CleanupInstructionCount > 1)
                    {
                        writer.WriteIndentedLine("}");
                    }
                }
            }

            if (ElseInstructions != null)
            {
                writer.WriteEmptyLine();

                WriteCSharpContinueCondition(writer, out ContinueExpressionText);
                writer.WriteIndentedLine($"if (!({ContinueExpressionText}))");

                ElseInstructions.WriteCSharp(writer, CSharpCurlyBracketsInsertions.Mandatory, false);
            }
        }