protected override void GenerateInner(CodeGenerator generator)
 {
     generator.OutputIdentifier(TokenType.Identifier, ArgumentName);
     generator.Write(TokenType.Punctuation, ':');
     generator.Write(TokenType.Space, ' ');
     Value.Generate(generator);
 }
        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();
            }
        }
コード例 #3
0
 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();
 }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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, '}');
        }
コード例 #6
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();
                }
            }
        }
コード例 #7
0
        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();
        }
コード例 #8
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, ");");
 }
コード例 #9
0
        public void Generate(CodeGenerator generator)
        {
            generator.EnterElement(this);

            if (CustomAttributes.Count > 0)
            {
                generator.GenerateAttributes(CustomAttributes, null, true);
            }

            Direction.Generate(generator);
            Type.Generate(generator);
            generator.Write(TokenType.Space, ' ');
            generator.OutputIdentifier(TokenType.Identifier, Name);

            generator.ExitElement();
        }
コード例 #10
0
        protected override void GenerateInner(CodeGenerator generator)
        {
            bool needsTarget = true;

            if (TargetObject is CodeThisReferenceExpression)
            {
                needsTarget = generator.ContainsLocalByName(MethodName);
            }

            if (needsTarget)
            {
                if (TargetObject.Precedence > PrecedenceGroup.Primary)
                {
                    generator.Write(TokenType.Punctuation, '(');
                }
                TargetObject.Generate(generator);
                if (TargetObject.Precedence > PrecedenceGroup.Primary)
                {
                    generator.Write(TokenType.Punctuation, ')');
                }
                generator.Write(TokenType.Punctuation, '.');
            }

            generator.OutputIdentifier(TokenType.Identifier, MethodName);

            if (TypeArguments.Count > 0)
            {
                generator.Write(TokenType.Punctuation, '<');

                bool first = true;
                foreach (var typeArgument in TypeArguments)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        generator.Write(TokenType.Punctuation, ',');
                        generator.Write(TokenType.Space, ' ');
                    }
                    typeArgument.Generate(generator);
                }

                generator.Write(TokenType.Punctuation, '>');
            }
        }
コード例 #11
0
        protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions)
        {
            generator.WriteBlankLineBeforeEnteringBlock();
            generator.Write(TokenType.Keyword, "try");
            generator.WriteOpeningBrace();
            generator.Indent++;
            generator.EnterLocalScope();
            TryStatements.ReserveLocals(generator, default(CodeStatementEmitOptions));
            TryStatements.Generate(generator, default(CodeStatementEmitOptions));
            generator.ExitLocalScope();
            generator.Indent--;

            foreach (var catchClause in CatchClauses)
            {
                generator.WriteMiddleClosingBrace();
                generator.Write(TokenType.Keyword, "catch");
                generator.Write(TokenType.Space, ' ');
                generator.Write(TokenType.Punctuation, '(');
                catchClause.CatchExceptionType.Generate(generator);
                generator.Write(TokenType.Space, ' ');
                generator.OutputIdentifier(TokenType.Identifier, catchClause.LocalName);
                generator.Write(TokenType.Punctuation, ')');
                generator.WriteOpeningBrace();
                generator.Indent++;
                generator.EnterLocalScope();
                generator.ReserveLocal(catchClause.LocalName);
                catchClause.Statements.ReserveLocals(generator, default(CodeStatementEmitOptions));
                catchClause.Statements.Generate(generator, default(CodeStatementEmitOptions));
                generator.ExitLocalScope();
                generator.Indent--;
            }

            if (FinallyStatements.Count > 0)
            {
                generator.WriteMiddleClosingBrace();
                generator.Write(TokenType.Keyword, "finally");
                generator.WriteOpeningBrace();
                generator.Indent++;
                generator.EnterLocalScope();
                FinallyStatements.ReserveLocals(generator, default(CodeStatementEmitOptions));
                FinallyStatements.Generate(generator, default(CodeStatementEmitOptions));
                generator.ExitLocalScope();
                generator.Indent--;
            }
            generator.WriteClosingBrace();
        }
コード例 #12
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, ';');
        }
コード例 #13
0
        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, ';');
        }
コード例 #14
0
        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;
        }
コード例 #15
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)
        {
            bool needsTarget = true;

            if (TargetObject is CodeThisReferenceExpression)
            {
                needsTarget = generator.ContainsLocalByName(FieldName);
            }

            if (needsTarget)
            {
                if (TargetObject.Precedence > PrecedenceGroup.Primary)
                {
                    generator.Write(TokenType.Punctuation, '(');
                }
                TargetObject.Generate(generator);
                if (TargetObject.Precedence > PrecedenceGroup.Primary)
                {
                    generator.Write(TokenType.Punctuation, ')');
                }
                generator.Write(TokenType.Punctuation, '.');
            }
            generator.OutputIdentifier(TokenType.Identifier, FieldName);
        }
コード例 #17
0
        protected override void GenerateInner(CodeGenerator generator)
        {
            bool implicitlyTyped = true;

            foreach (var parameter in Parameters)
            {
                if (parameter.Type.RawName != "var")
                {
                    implicitlyTyped = false;
                }
            }

            generator.EnterLocalScope();

            if (implicitlyTyped)
            {
                if (Parameters.Count == 1)
                {
                    generator.OutputIdentifier(TokenType.Identifier, Parameters[0].Name);
                }
                else
                {
                    generator.Write(TokenType.Punctuation, '(');
                    bool first = true;
                    foreach (var parameter in Parameters)
                    {
                        if (first)
                        {
                            first = false;
                        }
                        else
                        {
                            generator.Write(TokenType.Punctuation, ',');
                            generator.Write(TokenType.Space, ' ');
                        }

                        generator.OutputIdentifier(TokenType.Identifier, parameter.Name);
                    }
                    generator.Write(TokenType.Punctuation, ')');
                }
            }
            else
            {
                generator.Write(TokenType.Punctuation, '(');
                Parameters.GenerateCommaSeparated(generator);
                generator.Write(TokenType.Punctuation, ')');
            }

            generator.Write(TokenType.Space, ' ');
            generator.Write(TokenType.Operator, "=>");
            generator.Write(TokenType.Space, ' ');

            if (ExpressionBody != null)
            {
                ExpressionBody.Generate(generator);
            }
            else
            {
                generator.WriteOpeningBrace();
                generator.Indent++;
                Statements.Generate(generator, default(CodeStatementEmitOptions));
                generator.Indent--;
                generator.WriteClosingBrace(true);
            }

            generator.ExitLocalScope();
        }
        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();
            }
        }