private static void WriteConversionExpression(ConversionExpression node, IndentedTextWriter writer) { writer.WriteTypeIdentifier(node.Type.Name); writer.WritePunctuation(TokenKind.OpenParenthesis); node.Expression.WriteTo(writer); writer.WritePunctuation(TokenKind.CloseParenthesis); }
private Expression BindConversion(SyntaxNode node, Expression fromExpression, TypeSymbol toType, bool allowExplicit = false, bool noDiagnostics = false) { // We can always build the expression; however, it is not always valid! var conversionExpression = new ConversionExpression(toType, fromExpression); var conversion = Conversions.GetConversionKind(fromExpression.Type, toType); if (!conversion.Exists) { if (!noDiagnostics && fromExpression.Type != BuiltinTypes.Invalid && toType != BuiltinTypes.Invalid) { diagnostics.ReportImpossibleConversion(node.MainToken, fromExpression.Type, toType); } return(new InvalidExpression(conversionExpression)); } if (!allowExplicit && conversion.IsExplicit) { if (!noDiagnostics) { diagnostics.ReportImpossibleImplicitConversion(node.MainToken, fromExpression.Type, toType); } return(new InvalidExpression(conversionExpression)); } return(conversion.IsIdentity ? fromExpression : conversionExpression); }
public StronkConfig() { From = new SourceExpression(this); Write = new WriterExpression(this); Map = new MapExpression(this); Convert = new ConversionExpression(this); Validate = new ValidationExpression(this); Log = new LogExpression(this); }
protected override void Visit(ConversionExpression node) { Visit((UnaryExpression)node); }