bool available; // true when more specials are available
		
		public SpecialNodesInserter(IEnumerable<ISpecial> specials, SpecialOutputVisitor visitor)
		{
			if (specials == null) throw new ArgumentNullException("specials");
			if (visitor == null) throw new ArgumentNullException("visitor");
			enumerator = specials.GetEnumerator();
			this.visitor = visitor;
			available = enumerator.MoveNext();
		}
        bool available;         // true when more specials are available

        public SpecialNodesInserter(IEnumerable <ISpecial> specials, SpecialOutputVisitor visitor)
        {
            if (specials == null)
            {
                throw new ArgumentNullException("specials");
            }
            if (visitor == null)
            {
                throw new ArgumentNullException("visitor");
            }
            enumerator   = specials.GetEnumerator();
            this.visitor = visitor;
            available    = enumerator.MoveNext();
        }
 public string Convert(string source, SupportedLanguage language)
 {
     CompilationUnit compilationUnit = this.GenerateCompilationUnit(source, language);
     SpecialOutputVisitor specialOutputVisitor = new SpecialOutputVisitor(this);
     this.specialNodesInserter = new SpecialNodesInserter(compilationUnit.UserData as List<ISpecial>, specialOutputVisitor);
     this.entryPointMethods = new List<MethodDeclaration>();
     this.codeBuilder = new PythonCodeBuilder()
     {
         IndentString = this.indentString
     };
     compilationUnit.AcceptVisitor(this, null);
     return this.codeBuilder.ToString().Trim();
 }
		/// <summary>
		/// Converts the source code to Python.
		/// </summary>
		public string Convert(string source, SupportedLanguage language)
		{
			// Convert to NRefactory code DOM.
			CompilationUnit unit = GenerateCompilationUnit(source, language);
			
			SpecialOutputVisitor specialOutputVisitor = new SpecialOutputVisitor(this);
			specialNodesInserter = new SpecialNodesInserter(unit.UserData as List<ISpecial>, specialOutputVisitor);
			
			// Convert to Python code.
			entryPointMethods = new List<MethodDeclaration>();
			codeBuilder = new PythonCodeBuilder();
			codeBuilder.IndentString = indentString;
			unit.AcceptVisitor(this, null);
			
			return codeBuilder.ToString().Trim();
		}