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, ";");
            }
Beispiel #2
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)
 {
     generator.OutputIdentifier(TokenType.Identifier, ArgumentName);
     generator.Write(TokenType.Punctuation, ':');
     generator.Write(TokenType.Space, ' ');
     Value.Generate(generator);
 }
        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, 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, ");");
 }
Beispiel #6
0
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineBeforeEnteringBlock();
     generator.EnterLocalScope();
     generator.Write(TokenType.Keyword, "using");
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Punctuation, '(');
     InitStatement.Generate(generator, CodeStatementEmitOptions.OmitSemiColon);
     generator.Write(TokenType.Punctuation, ')');
     if (Statements.Count > 0)
     {
         generator.WriteOpeningBrace();
         generator.Indent++;
         generator.EnterLocalScope();
         Statements.ReserveLocals(generator, default(CodeStatementEmitOptions));
         Statements.Generate(generator, default(CodeStatementEmitOptions));
         generator.ExitLocalScope();
         generator.Indent--;
         generator.WriteClosingBrace();
     }
     else
     {
         generator.WriteEmptyBlock();
     }
     generator.ExitLocalScope();
 }
        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--;
        }
        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();
            }
        }
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            Modifiers.Generate(generator);

            generator.OutputIdentifier(TokenType.Identifier, enclosingType.Name);
            generator.Write(TokenType.Punctuation, '(');
            Parameters.GenerateCommaSeparated(generator);
            generator.Write(TokenType.Punctuation, ')');

            if (Initializer != null)
            {
                Initializer.Generate(generator);
            }

            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();
            }
        }
Beispiel #10
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, ";");
            }
        protected override void GenerateInner(CodeGenerator generator)
        {
            generator.Write(TokenType.Punctuation, '(');
            TargetType.Generate(generator);
            generator.Write(TokenType.Punctuation, ')');

            bool parenthesized = Expression.Precedence > PrecedenceGroup.Unary;

            // CS0075: To cast a negative value, you must enclose the value in parentheses
            if (!parenthesized && Expression is CodePrimitiveExpression primitive && primitive.Value != null && primitive.Value.GetType().IsNumeric())
            {
                if (Convert.ToDouble(primitive.Value) < 0)
                {
                    parenthesized = true;
                }
            }

            if (parenthesized)
            {
                generator.Write(TokenType.Punctuation, '(');
            }
            Expression.Generate(generator);
            if (parenthesized)
            {
                generator.Write(TokenType.Punctuation, ')');
            }
        }
 protected override void GeneratePropertyName(CodeGenerator generator)
 {
     generator.Write(TokenType.Keyword, "this");
     generator.Write(TokenType.Punctuation, '[');
     Parameters.GenerateCommaSeparated(generator);
     generator.Write(TokenType.Punctuation, ']');
 }
 protected override void GenerateInner(CodeGenerator generator)
 {
     Method.Generate(generator);
     generator.Write(TokenType.Punctuation, '(');
     Arguments.GenerateCommaSeparated(generator);
     generator.Write(TokenType.Punctuation, ')');
 }
        protected override void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            generator.Write(TokenType.Keyword, "static");
            generator.Write(TokenType.Space, ' ');
            generator.Write(TokenType.Identifier, enclosingType.Name);
            generator.Write(TokenType.Punctuation, "()");

            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();
            }
        }
        protected override void GenerateInner(CodeGenerator generator)
        {
            Modifiers.Generate(generator);

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

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

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

                foreach (var member in Members)
                {
                    member.Generate(generator);
                }

                generator.Indent--;
                generator.WriteClosingBrace();
            }
            else
            {
                generator.WriteEmptyBlock();
            }
        }
Beispiel #16
0
 protected override void GenerateInner(CodeGenerator generator)
 {
     generator.Write(TokenType.Keyword, "typeof");
     generator.Write(TokenType.Punctuation, '(');
     Type.Generate(generator);
     generator.Write(TokenType.Punctuation, ')');
 }
        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();
                }
            }
        }
Beispiel #18
0
 protected override void GenerateInner(CodeGenerator generator)
 {
     Left.Generate(generator);
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Punctuation, '=');
     generator.Write(TokenType.Space, ' ');
     Right.Generate(generator);
 }
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineIfJustExitedBlock();
     generator.Write(TokenType.Keyword, "goto");
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Keyword, "case");
     generator.Write(TokenType.Space, ' ');
     Value.Generate(generator);
     generator.WriteStatementEnd(emitOptions);
 }
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineIfJustExitedBlock();
     generator.Write(TokenType.Keyword, "yield");
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Keyword, "return");
     generator.Write(TokenType.Space, ' ');
     Expression.Generate(generator);
     generator.WriteStatementEnd(emitOptions);
 }
Beispiel #21
0
 protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineIfJustExitedBlock();
     generator.Write(TokenType.Keyword, "throw");
     if (ToThrow != null)
     {
         generator.Write(TokenType.Space, ' ');
         ToThrow.Generate(generator);
     }
     generator.WriteStatementEnd(emitOptions);
 }
        public static void Generate(this CodeParameterDirection dir, CodeGenerator generator)
        {
            switch (dir)
            {
            case CodeParameterDirection.Default: break;

            case CodeParameterDirection.Out: generator.Write(TokenType.Keyword, "out"); generator.Write(TokenType.Space, ' '); break;

            case CodeParameterDirection.Ref: generator.Write(TokenType.Keyword, "ref"); generator.Write(TokenType.Space, ' '); break;
            }
        }
 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, ");");
 }
Beispiel #24
0
        protected override void GenerateInner(CodeGenerator generator)
        {
            generator.Write(TokenType.Keyword, "default");

            if (Type != null)
            {
                generator.Write(TokenType.Punctuation, '(');
                Type.Generate(generator);
                generator.Write(TokenType.Punctuation, ')');
            }
        }
Beispiel #25
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, CodeStatementEmitOptions emitOptions)
 {
     generator.WriteBlankLineBeforeEnteringBlock();
     generator.EnterLocalScope();
     generator.Write(TokenType.Keyword, "foreach");
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Punctuation, '(');
     Declaration.Type.Generate(generator);
     generator.Write(TokenType.Space, ' ');
     generator.OutputIdentifier(TokenType.Identifier, Declaration.Name);
     generator.Write(TokenType.Space, ' ');
     generator.Write(TokenType.Keyword, "in");
     generator.Write(TokenType.Space, ' ');
     Expression.Generate(generator);
     generator.Write(TokenType.Punctuation, ')');
     if (Statements.Count > 0)
     {
         generator.WriteOpeningBrace();
         generator.Indent++;
         generator.EnterLocalScope();
         Statements.ReserveLocals(generator, default(CodeStatementEmitOptions));
         Statements.Generate(generator, default(CodeStatementEmitOptions));
         generator.ExitLocalScope();
         generator.Indent--;
         generator.WriteClosingBrace();
     }
     else
     {
         generator.WriteEmptyBlock();
     }
     generator.ExitLocalScope();
 }
        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)
        {
            generator.Write(TokenType.Keyword, "new");
            generator.Write(TokenType.Space, ' ');

            if (Lengths.Count > 0)
            {
                CreateType.NestedElementType.Generate(generator);
                generator.Write(TokenType.Punctuation, '[');
                Lengths.GenerateCommaSeparated(generator);
                generator.Write(TokenType.Punctuation, ']');
                generator.Write(TokenType.Punctuation, CreateType.ArrayElementType.CompleteArraySuffix);
            }
            else
            {
                CreateType.Generate(generator);
            }

            if (Initializer.Count > 0 || Lengths.Count == 0)
            {
                generator.Write(TokenType.Punctuation, '{');
                Initializer.GenerateCommaSeparated(generator);
                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)
 {
     Comment.Generate(generator);
     if (Expression != null)
     {
         generator.Write(TokenType.Space, ' ');
         Expression.Generate(generator);
     }
 }