/// <summary>
        /// The save.
        /// </summary>
        /// <param name="localVariable">
        /// The local variable.
        /// </param>
        private void Save(VariableDeclarationStatement localVariable)
        {
            var storesaveVariablesMode = this.saveVariablesMode;

            if (localVariable.Constant)
            {
                // must be static for C++ as well
                if (storesaveVariablesMode == SaveVariablesMode.DefaultSourceInitializers)
                {
                    this.cppWriter.Write("const ");
                }
                else
                {
                    this.cppWriter.Write("const static ");
                }
            }

            this.Save(localVariable.InnerExpression);

            this.saveVariablesMode = storesaveVariablesMode;
        }
        /// <summary>
        /// The save.
        /// </summary>
        /// <param name="foreachStatement">
        /// The foreach statement.
        /// </param>
        private void Save(ForeachStatement foreachStatement)
        {
            this.cppWriter.Write("for (");

            this.saveVariablesMode = SaveVariablesMode.AppendRightReferene;
            this.Save(foreachStatement.Variable);
            this.saveVariablesMode = SaveVariablesMode.Default;

            this.cppWriter.Write(" : ");
            @switch(foreachStatement.Item);
            this.cppWriter.Write(")");

            this.Save(foreachStatement.EmbeddedStatement);
        }
        /// <summary>
        /// The save.
        /// </summary>
        /// <param name="fieldDeclaration">
        /// The field declaration.
        /// </param>
        private void Save(Field fieldDeclaration)
        {
            var isStatic = fieldDeclaration.Declaration.ContainsModifier(CsTokenType.Static);

            this.Save(fieldDeclaration.AccessModifier);
            this.headerWriter.Write(": ");

            if (isStatic)
            {
                this.headerWriter.Write("static ");
            }

            this.SwitchStreams();

            this.saveVariablesMode = SaveVariablesMode.DoNotSaveInitializers;

            this.Save(fieldDeclaration.VariableDeclarationStatement);

            this.saveVariablesMode = SaveVariablesMode.Default;

            this.SwitchStreams();

            this.headerWriter.WriteLine(';');

            if (isStatic || fieldDeclaration.VariableDeclarationStatement.Constant)
            {
                this.saveVariablesMode = SaveVariablesMode.DefaultSourceInitializers;

                this.Save(fieldDeclaration.VariableDeclarationStatement);

                this.saveVariablesMode = SaveVariablesMode.Default;

                this.cppWriter.WriteLine(';');
                this.cppWriter.WriteLine();
            }
        }