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(); } }
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(); }
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 static void GenerateCodeFromCompositeTypeMember(CodeCompositeTypeMember member, CodeCompositeTypeDeclaration enclosingType, ICodeWriter writer, CodeGeneratorOptions options) { var generator = new CodeGenerator(writer, options); member.Generate(generator, enclosingType); }
protected abstract void GenerateInner(CodeGenerator generator, string name, CodeBasicPropertyMember property, CodeCompositeTypeDeclaration enclosingType);
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);
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, ";"); }