Ejemplo n.º 1
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();
            }
        }
        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, ";");
            }
        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();
            }
        }
Ejemplo n.º 4
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();
                }
            }
        }
        public void Generate(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType)
        {
            generator.EnterElement(this);

            StartDirectives.Generate(generator);
            Comments.Generate(generator);
            generator.GenerateAttributes(CustomAttributes);
            GenerateInner(generator, enclosingType);
            EndDirectives.Generate(generator);

            generator.ExitElement();
        }
Ejemplo n.º 6
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, ';');
        }
Ejemplo n.º 8
0
        public static void GenerateCodeFromCompositeTypeMember(CodeCompositeTypeMember member, CodeCompositeTypeDeclaration enclosingType, ICodeWriter writer, CodeGeneratorOptions options)
        {
            var generator = new CodeGenerator(writer, options);

            member.Generate(generator, enclosingType);
        }
Ejemplo n.º 9
0
 protected abstract void GenerateInner(CodeGenerator generator, string name, CodeBasicPropertyMember property, CodeCompositeTypeDeclaration enclosingType);
Ejemplo n.º 10
0
        public void Generate(CodeGenerator generator, string name, CodeBasicPropertyMember property, CodeCompositeTypeDeclaration enclosingType)
        {
            generator.EnterElement(this);

            StartDirectives.Generate(generator);
            Comments.Generate(generator);
            Modifiers.Generate(generator);
            GenerateInner(generator, name, property, enclosingType);
            EndDirectives.Generate(generator);

            generator.ExitElement();
        }
 protected abstract void GenerateInner(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType);
Ejemplo n.º 12
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, ";");
            }