Пример #1
0
        protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
        {
            generator.Indent--;
            generator.Write(TokenType.Keyword, "case ");
            Value.Generate(generator);
            generator.WriteLine(TokenType.Punctuation, ':');
            generator.Indent++;

            if (!Fallthrough)
            {
                generator.EnterLocalScope();
                Statements.ReserveLocals(generator, default(CodeStatementEmitOptions));
            }

            Statements.Generate(generator, default(CodeStatementEmitOptions));

            if (!Fallthrough)
            {
                bool needsBreak = true;
                if (Statements.Count > 0)
                {
                    var lastStatement = Statements[Statements.Count - 1];
                    needsBreak = !lastStatement.IsTerminator;
                }

                if (needsBreak)
                {
                    generator.Write(TokenType.Keyword, "break");
                    generator.WriteLine(TokenType.Punctuation, ';');
                }
                generator.ExitLocalScope();
            }
        }
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineBeforeEnteringBlock();
     generator.WriteLine(TokenType.Keyword, "do");
     if (Statements.Count > 0)
     {
         generator.WriteOpeningBrace();
         generator.Indent++;
         generator.EnterLocalScope();
         Statements.ReserveLocals(generator, default(CodeStatementEmitOptions));
         Statements.Generate(generator, default(CodeStatementEmitOptions));
         generator.EnterLocalScope();
         generator.Indent--;
         generator.WriteMiddleClosingBrace(true);
     }
     else
     {
         generator.WriteEmptyBlock(true);
     }
     generator.Write(TokenType.Keyword, "while");
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Punctuation, '(');
     Condition.Generate(generator);
     generator.WriteLine(TokenType.Punctuation, ");");
 }
Пример #3
0
        protected override void GenerateInner(CodeGenerator generator)
        {
            generator.Write(TokenType.Keyword, "new");
            generator.Write(TokenType.Space, ' ');
            CreateType.Generate(generator);
            generator.Write(TokenType.Punctuation, '(');
            Arguments.GenerateCommaSeparated(generator);
            generator.Write(TokenType.Punctuation, ')');

            if (CollectionInitializerItems.Count > 0)
            {
                generator.Write(TokenType.Space, ' ');
                generator.WriteLine(TokenType.Punctuation, '{');
                generator.Indent++;
                for (int i = 0; i < CollectionInitializerItems.Count; i++)
                {
                    var collectionInitializerItem = CollectionInitializerItems[i];

                    if (collectionInitializerItem.Count != 1)
                    {
                        generator.Write(TokenType.Punctuation, '{');
                        collectionInitializerItem.GenerateCommaSeparated(generator);
                        generator.Write(TokenType.Punctuation, '}');
                    }
                    else
                    {
                        collectionInitializerItem.First().Generate(generator);
                    }

                    generator.WriteLine(TokenType.Punctuation, i < CollectionInitializerItems.Count - 1 ? "," : "");
                }
                generator.Indent--;
                generator.Write(TokenType.Punctuation, '}');
            }
        }
        protected override void GenerateInner(CodeGenerator generator)
        {
            generator.Write(TokenType.Keyword, "new");
            generator.Write(TokenType.Space, ' ');
            if (CreateType != null)
            {
                CreateType.Generate(generator);
            }
            generator.Write(TokenType.Space, ' ');
            generator.WriteLine(TokenType.Punctuation, '{');

            generator.Indent++;
            for (int i = 0; i < Members.Count; i++)
            {
                var member = Members[i];
                generator.OutputIdentifier(TokenType.Identifier, member.Key);
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Operator, '=');
                generator.Write(TokenType.Space, ' ');
                member.Value.Generate(generator);
                generator.WriteLine(TokenType.Punctuation, i < Members.Count - 1 ? "," : "");
            }
            generator.Indent--;

            generator.Write(TokenType.Punctuation, '}');
        }
        protected override void GenerateInner(CodeGenerator generator)
        {
            if (Warnings != null && Warnings.Any())
            {
                generator.Write(TokenType.Directive, "#pragma warning ");

                switch (Setting)
                {
                case CodePragmaWarningSetting.Disable: generator.Write(TokenType.Directive, "disable "); break;

                case CodePragmaWarningSetting.Restore: generator.Write(TokenType.Directive, "restore "); break;
                }

                bool first = true;
                foreach (var warning in Warnings)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        generator.Write(TokenType.Punctuation, ", ");
                    }

                    generator.Write(TokenType.IntLiteral, warning.ToString(CultureInfo.InvariantCulture));
                }
                generator.WriteLine();
            }
        }
Пример #6
0
        protected override void GenerateInner(CodeGenerator generator, string name, CodeBasicPropertyMember property, CodeCompositeTypeDeclaration enclosingType)
        {
            generator.Write(TokenType.Keyword, name);

            generator.EnterLocalScope();

            generator.IsInSetterProperty = name == "set";
            if (generator.IsInSetterProperty)
            {
                generator.ReserveLocal("value");
            }
            if (property is CodeIndexerMember indexer)
            {
                foreach (var parameter in indexer.Parameters)
                {
                    generator.ReserveLocal(parameter.Name);
                }
            }

            generator.ExitLocalScope();

            if (Statements.Count == 1 && Statements[0] is CodeReturnStatement returnStatement && returnStatement.Expression != null)
            {
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Operator, "=>");
                generator.Write(TokenType.Space, ' ');
                returnStatement.Expression.Generate(generator);
                generator.WriteLine(TokenType.Punctuation, ";");
            }
Пример #7
0
        public static void GenerateCommaSeparated(this IEnumerable <CodeParameterDeclaration> parameters, CodeGenerator generator, bool newlineBetweenItems = false)
        {
            bool first = true;

            foreach (var parameter in parameters)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    if (newlineBetweenItems)
                    {
                        generator.WriteLine(TokenType.Punctuation, ',');
                    }
                    else
                    {
                        generator.Write(TokenType.Punctuation, ',');
                        generator.Write(TokenType.Space, ' ');
                    }
                }

                parameter.Generate(generator);
            }
        }
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            if (ExplicitImplementationType == null)
            {
                Modifiers.Generate(generator);
            }

            Type.Generate(generator);
            generator.Write(TokenType.Space, ' ');

            if (ExplicitImplementationType != null)
            {
                ExplicitImplementationType.Generate(generator);
                generator.Write(TokenType.Punctuation, '.');
            }

            GeneratePropertyName(generator);

            if (Getter != null &&
                Setter == null &&
                Getter is CodeUserPropertyAccessor userGetter &&
                userGetter.Statements.Count == 1 &&
                userGetter.Statements[0] is CodeReturnStatement returnStatement &&
                returnStatement.Expression != null)
            {
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Operator, "=>");
                generator.Write(TokenType.Space, ' ');
                returnStatement.Expression.Generate(generator);
                generator.WriteLine(TokenType.Punctuation, ";");
            }
Пример #9
0
        public static void GenerateCommaSeparated(this IEnumerable <CodeExpression> expressions, CodeGenerator generator, bool newlineBetweenItems = false)
        {
            bool first = true;

            //generator.Indent++;

            foreach (var expression in expressions)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    if (newlineBetweenItems)
                    {
                        generator.WriteLine(TokenType.Punctuation, ',');
                    }
                    else
                    {
                        generator.Write(TokenType.Punctuation, ',');
                        generator.Write(TokenType.Space, ' ');
                    }
                }

                expression.Generate(generator);
            }

            //generator.Indent--;
        }
Пример #10
0
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            generator.GenerateAttributes(ReturnTypeCustomAttributes, "return");

            if (ExplicitImplementationType == null)
            {
                Modifiers.Generate(generator);
            }

            ReturnType.Generate(generator);
            generator.Write(TokenType.Space, ' ');
            if (ExplicitImplementationType != null)
            {
                ExplicitImplementationType.Generate(generator);
                generator.Write(TokenType.Punctuation, '.');
            }
            generator.OutputIdentifier(TokenType.Identifier, Name);

            generator.OutputTypeParameters(TypeParameters);

            generator.Write(TokenType.Punctuation, '(');
            Parameters.GenerateCommaSeparated(generator);
            generator.Write(TokenType.Punctuation, ')');

            foreach (var typeParameter in TypeParameters)
            {
                typeParameter.GenerateConstraints(generator);
            }

            if (enclosingType.IsInterface ||
                (Modifiers & CodeMemberModifiers.ScopeMask) == CodeMemberModifiers.Abstract)
            {
                generator.WriteLine(TokenType.Punctuation, ';');
            }
            else
            {
                if (Statements.Count > 0)
                {
                    generator.WriteOpeningBrace();
                    generator.Indent++;

                    generator.EnterLocalScope();
                    foreach (var parameter in Parameters)
                    {
                        generator.ReserveLocal(parameter.Name);
                    }

                    Statements.Generate(generator, default(CodeStatementEmitOptions));
                    generator.ExitLocalScope();

                    generator.Indent--;
                    generator.WriteClosingBrace();
                }
                else
                {
                    generator.WriteEmptyBlock();
                }
            }
        }
Пример #11
0
 public static void Generate(this IEnumerable <CodeComment> comments, CodeGenerator generator)
 {
     foreach (var comment in comments)
     {
         comment.Generate(generator);
         generator.WriteLine();
     }
 }
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     if (!generator.JustWroteOpeningBrace && generator.JustWroteVariableDeclaration && (emitOptions & CodeStatementEmitOptions.OmitSemiColon) == 0)
     {
         generator.WriteLine();
     }
     generator.WriteBlankLineIfJustExitedBlock();
     Expression.Generate(generator);
     generator.WriteStatementEnd(emitOptions);
 }
        public void GenerateConstraints(CodeGenerator generator)
        {
            generator.EnterElement(this);

            generator.WriteLine();
            generator.Indent++;

            bool first = true;

            foreach (CodeTypeReference constraint in Constraints)
            {
                if (first)
                {
                    generator.Write(TokenType.Keyword, "where");
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.GenericTypeParameter, Name);
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.Punctuation, ':');
                    generator.Write(TokenType.Space, ' ');
                    first = false;
                }
                else
                {
                    generator.Write(TokenType.Punctuation, ',');
                    generator.Write(TokenType.Space, ' ');
                }
                constraint.Generate(generator);
            }

            if (HasConstructorConstraint)
            {
                if (first)
                {
                    generator.Write(TokenType.Keyword, "where");
                    generator.Write(TokenType.GenericTypeParameter, Name);
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.Punctuation, ':');
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.Keyword, "new");
                    generator.Write(TokenType.Punctuation, "()");
                    first = false;
                }
                else
                {
                    generator.Write(TokenType.Punctuation, ',');
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.Keyword, "new");
                    generator.Write(TokenType.Punctuation, "()");
                }
            }

            generator.Indent--;

            generator.ExitElement();
        }
Пример #14
0
 protected override void GenerateInner(CodeGenerator generator)
 {
     generator.Write(TokenType.Keyword, "delegate");
     generator.Write(TokenType.Space, ' ');
     ReturnType.Generate(generator);
     generator.Write(TokenType.Space, ' ');
     generator.OutputIdentifier(TokenType.TypeIdentifier, Name);
     generator.Write(TokenType.Punctuation, '(');
     Parameters.GenerateCommaSeparated(generator);
     generator.WriteLine(TokenType.Punctuation, ");");
 }
Пример #15
0
        public static void Generate(this IEnumerable <CodeUsingImport> usingImports, CodeGenerator generator)
        {
            var sortedUniqueUsingImports = new List <CodeUsingImport>(new HashSet <CodeUsingImport>(usingImports));

            sortedUniqueUsingImports.Sort((a, b) => string.CompareOrdinal(a.Name, b.Name));

            foreach (var usingImport in sortedUniqueUsingImports)
            {
                usingImport.Generate(generator);
            }

            if (usingImports.Any())
            {
                generator.WriteLine();
            }
        }
Пример #16
0
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            Modifiers.Generate(generator);
            Type.Generate(generator);
            generator.Write(TokenType.Space, ' ');
            generator.OutputIdentifier(TokenType.Identifier, Name);

            if (Initializer != null)
            {
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Punctuation, '=');
                generator.Write(TokenType.Space, ' ');
                Initializer.Generate(generator);
            }

            generator.WriteLine(TokenType.Punctuation, ';');
        }
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            if (ExplicitImplementationType == null)
            {
                Modifiers.Generate(generator);
            }
            generator.Write(TokenType.Keyword, "event");
            generator.Write(TokenType.Space, ' ');

            Type.Generate(generator);
            if (ExplicitImplementationType != null)
            {
                ExplicitImplementationType.Generate(generator);
                generator.Write(TokenType.Punctuation, '.');
            }
            generator.OutputIdentifier(TokenType.Identifier, Name);
            generator.WriteLine(TokenType.Punctuation, ';');
        }
        public void Generate(CodeGenerator generator)
        {
            generator.EnterElement(this);

            Comments.Generate(generator);

            generator.Write(TokenType.Keyword, "namespace");
            generator.Write(TokenType.Space, ' ');
            var names = Name.Split('.');

            generator.OutputIdentifier(TokenType.Identifier, names[0]);
            for (int i = 1; i < names.Length; i++)
            {
                generator.Write(TokenType.Punctuation, '.');
                generator.OutputIdentifier(TokenType.Identifier, names[i]);
            }
            generator.WriteOpeningBrace();
            generator.Indent++;

            Usings.Generate(generator);

            Usings.Add(new CodeUsingImport(Name));
            generator.PushUsingSet(Usings);

            bool needsBlankLine = false;

            foreach (var type in Types)
            {
                if (needsBlankLine)
                {
                    generator.WriteLine();
                }

                type.Generate(generator);
                needsBlankLine = true;
            }

            generator.PopUsingSet();

            generator.Indent--;
            generator.WriteClosingBrace();

            generator.ExitElement();
        }
        protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
        {
            if (!generator.JustWroteOpeningBrace && !generator.JustWroteVariableDeclaration && (emitOptions & CodeStatementEmitOptions.OmitSemiColon) == 0)
            {
                generator.WriteLine();
            }
            generator.WriteBlankLineIfJustExitedBlock();

            Type.Generate(generator);
            generator.Write(TokenType.Space, ' ');
            generator.OutputIdentifier(TokenType.Identifier, Name);
            if (InitExpression != null)
            {
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Punctuation, '=');
                generator.Write(TokenType.Space, ' ');
                InitExpression.Generate(generator);
            }
            generator.WriteStatementEnd(emitOptions);
            generator.JustWroteVariableDeclaration = true;
        }
Пример #20
0
        public void Generate(CodeGenerator generator)
        {
            generator.EnterElement(this);

            StartDirectives.Generate(generator);
            Comments.Generate(generator);

            generator.GenerateAttributes(CustomAttributes);
            generator.OutputIdentifier(TokenType.Identifier, Name);
            if (Initializer != null)
            {
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Punctuation, '=');
                generator.Write(TokenType.Space, ' ');
                Initializer.Generate(generator);
            }
            generator.WriteLine(TokenType.Punctuation, ',');

            EndDirectives.Generate(generator);

            generator.ExitElement();
        }
        protected override void GenerateInner(CodeGenerator generator)
        {
            Modifiers.Generate(generator);

            if (IsPartial)
            {
                generator.Write(TokenType.Keyword, "partial");
                generator.Write(TokenType.Space, ' ');
            }

            generator.Write(TokenType.Keyword, Keyword);
            generator.Write(TokenType.Space, ' ');
            generator.OutputIdentifier(TokenType.TypeIdentifier, Name);

            generator.OutputTypeParameters(TypeParameters);

            var firstTypeRef = true;

            foreach (CodeTypeReference typeRef in BaseTypes)
            {
                if (firstTypeRef)
                {
                    generator.Write(TokenType.Space, ' ');
                    generator.Write(TokenType.Punctuation, ':');
                    generator.Write(TokenType.Space, ' ');
                    firstTypeRef = false;
                }
                else
                {
                    generator.Write(TokenType.Punctuation, ',');
                    generator.Write(TokenType.Space, ' ');
                }
                typeRef.Generate(generator);
            }

            foreach (var typeParameter in TypeParameters)
            {
                typeParameter.GenerateConstraints(generator);
            }

            if (Members.Count > 0)
            {
                generator.WriteOpeningBrace();
                generator.Indent++;

                CodeCompositeTypeMember previousMember = null;
                var sortedMembers = GetMembersSortedByCategory();

                foreach (var member in sortedMembers)
                {
                    if (previousMember != null && (previousMember.Category != member.Category || ShouldLineSeparateIndividualMember(previousMember.Category)))
                    {
                        generator.WriteLine();
                    }

                    member.Generate(generator, this);
                    previousMember = member;
                }

                generator.Indent--;
                generator.WriteClosingBrace();
            }
            else
            {
                generator.WriteEmptyBlock();
            }
        }
 protected override void GenerateInner(CodeGenerator generator)
 {
     generator.WriteLine(TokenType.Punctuation, '{');
     Arguments.GenerateCommaSeparated(generator);
     generator.Write(TokenType.Punctuation, '}');
 }
Пример #23
0
        public void Generate(CodeGenerator generator)
        {
            generator.EnterElement(this);

            generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------");
            generator.WriteLine(TokenType.Comment, @"//              _______      _____      __       ________       ");
            generator.WriteLine(TokenType.Comment, @"//             |  ___  \    /     \    |  |     |___  ___|      ");
            generator.WriteLine(TokenType.Comment, @"//             | |   \  |  /  ___  \   |  |         / /         ");
            generator.WriteLine(TokenType.Comment, @"//             | |___/ /  /  /   \  \  |  |        / /_         ");
            generator.WriteLine(TokenType.Comment, @"//             | |   \ \  \  \___/  /  |  |       /_  /         ");
            generator.WriteLine(TokenType.Comment, @"//             | |___/  |  \       /   |  |____    | /          ");
            generator.WriteLine(TokenType.Comment, @"//             |_______/    \_____/    |_______|   |/           ");
            generator.WriteLine(TokenType.Comment, @"//                                                              ");
            generator.WriteLine(TokenType.Comment, @"//                 V I S U A L    S C R I P T I N G             ");
            generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------");
            generator.WriteLine(TokenType.Comment, @"//                                                              ");
            generator.WriteLine(TokenType.Comment, @"// THIS FILE IS AUTO-GENERATED.                                 ");
            generator.WriteLine(TokenType.Comment, @"//                                                              ");
            generator.WriteLine(TokenType.Comment, @"// ANY CHANGES WILL BE LOST NEXT TIME THIS SCRIPT IS GENERATED. ");
            generator.WriteLine(TokenType.Comment, @"//                                                              ");
            generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------");

            StartDirectives.Generate(generator);
            if (StartDirectives.Count > 0)
            {
                generator.WriteLine();
            }

            Usings.Generate(generator);

            if (AssemblyCustomAttributes.Count > 0)
            {
                generator.GenerateAttributes(AssemblyCustomAttributes, "assembly");
                generator.WriteLine();
            }

            generator.PushUsingSet(Usings);
            Namespaces.Generate(generator);
            generator.PopUsingSet();

            if (EndDirectives.Count > 0)
            {
                generator.WriteLine();
            }
            EndDirectives.Generate(generator);

            generator.ExitElement();
        }
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineIfJustExitedBlock();
     Comment.Generate(generator);
     generator.WriteLine();
 }