private object EvaluateConversionExpression(BoundConversionExpression node) { var value = EvaluateExpression(node.Expression); if (node.Type == TypeSymbol.Object) { return(value); } if ((node.Type.Caps & TypeSymbolCaps.Arithmetic) != TypeSymbolCaps.None) { if (value is string s) { return(s.Equals("true") ? 1 : s.Equals("false") ? 0 : throw new Exception($"Value {value} can not be cast to type {node.Type}")); } return(Conversion.Convert(node.Type, value)); } else if (node.Type == TypeSymbol.String) { if (node.Expression.Type == TypeSymbol.Bool) { return((byte)value == 0 ? "false" : "true"); } return(Convert.ToString(value)); } else { throw new Exception($"Unexpected type {node.Type}"); } }
private object EvaluateConversionExpression(BoundConversionExpression node) { var value = EvaluateExpression(node.Expression); if (node.Type == TypeSymbol.Any) { return(value); } else if (node.Type == TypeSymbol.Bool) { return(Convert.ToBoolean(value)); } else if (node.Type == TypeSymbol.Int) { return(Convert.ToInt32(value)); } else if (node.Type == TypeSymbol.String) { return(Convert.ToString(value)); } else { throw new Exception($"Unexpected type {node.Type}."); } }
private object EvaluateConversionExpression(BoundConversionExpression node) { var value = this.EvaluateExpression(node.Expression); if (node.Type == BuiltinTypes.Any) { return(value !); // TODO: remove ! } else if (node.Type == BuiltinTypes.Bool) { return(Convert.ToBoolean(value)); } else if (node.Type == BuiltinTypes.Int) { return(Convert.ToInt32(value)); } else if (node.Type == BuiltinTypes.String) { return(Convert.ToString(value) !); } else { throw new Exception($"Unexpected type {node.Type}"); } }
private object EvaluateConversionExpression(BoundConversionExpression node) { var value = EvaluateExpression(node.Expression); try { if (node.Type == TypeSymbol.Bool) { return(Convert.ToBoolean(value)); } else if (node.Type == TypeSymbol.Int) { return(Convert.ToInt32(value)); } else if (node.Type == TypeSymbol.String) { return(Convert.ToString(value)); } else { throw new Exception($"Unexpected type {node.Type}"); } } catch (Exception ex) when(ex is FormatException || ex is OverflowException) { throw new EvaluatorException($"Cannot convert '{value}' to type '{node.Type}'.", ex); } }
public override void VisitConversionExpression(BoundConversionExpression node) { //TODO: writer.WriteIdentifier(node.Type.Name); _writer.WriteIdentifier(node.Type.ToString()); _writer.WritePunctuation("("); node.Expression.Accept(this); _writer.WritePunctuation(")"); }
protected override BoundExpression RewriteConversionExpression(BoundConversionExpression node) { var rewriteExpression = RewriteExpression(node.Expression); var expr = IsSimpleNode(rewriteExpression) ? rewriteExpression : CreateTemporary(rewriteExpression); if (expr == node.Expression) { return(node); } return(new BoundConversionExpression(node.Syntax, node.Type, expr)); }
private Expression BuildConversionExpression(BoundConversionExpression expression) { if (expression.Expression.Type.IsNull()) { return(BuildNullValue(expression.Type)); } var input = BuildCachedExpression(expression.Expression); var targetType = expression.Type; var conversionMethod = expression.Conversion.ConversionMethods.SingleOrDefault(); return (Expression.Condition( BuildNullCheck(input), BuildNullValue(targetType), BuildLiftedExpression( Expression.Convert( input, targetType, conversionMethod ) ) )); }
private static void WriteBoundConversionExpression(this IndentedTextWriter writer, BoundConversionExpression node) { writer.WriteBlueKeyword(node.ResultType.Name); writer.ColorWrite('('); writer.WriteBoundNode(node.Expression); writer.ColorWrite(')'); }
protected virtual void VisitConversionExpression(BoundConversionExpression node) { VisitExpression(node.Expression); }
public virtual void VisitConversionExpression(BoundConversionExpression node) => this.DefaultVisit(node);
private void EmitConversionExpression(ILProcessor ilProcessor, BoundConversionExpression node) { throw new NotImplementedException(); }