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, 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, ");"); }
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(); } }
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(); } }
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(); } } }
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); }
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, ");"); }
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, ')'); } }
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); } }