Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 protected override void Visit(ConversionExpression node)
 {
     Visit((UnaryExpression)node);
 }