public override VfpExpression Visit(VfpCaseExpression expression) { Debug.Assert(expression.When.Count == expression.Then.Count); Write("ICASE("); for (var index = 0; index < expression.When.Count; index++) { if (index > 0) { Write(","); } expression.When[index].Accept(this); Write(","); expression.Then[index].Accept(this); } if (expression.Else != null && !(expression.Else is VfpNullExpression)) { Write(","); expression.Else.Accept(this); } Write(")"); return(expression); }
private static bool IsEmptyCaseExpression(VfpCaseExpression expression) { if (expression == null || expression.When.Count != 1 || expression.Then.Count != 1) { return(false); } if (!(expression.When.First() is VfpIsEmptyExpression)) { return(false); } if (!(expression.Then[0] is VfpConstantExpression constant1) || constant1.ConstantKind != PrimitiveTypeKind.Boolean || !(bool)constant1.Value) { return(false); } if (!(expression.Else is VfpConstantExpression constant2) || constant2.ConstantKind != PrimitiveTypeKind.Boolean || (bool)constant2.Value) { return(false); } return(true); }
private static bool IsExpectedCaseExpression(VfpCaseExpression expression) { if (expression == null || expression.When.Count != 2 || expression.Then.Count != 2) { return(false); } var constant1 = expression.Then[0] as VfpConstantExpression; if (constant1 == null || constant1.ConstantKind != PrimitiveTypeKind.Boolean) { return(false); } var constant2 = expression.Then[1] as VfpConstantExpression; if (constant2 == null || constant2.ConstantKind != PrimitiveTypeKind.Boolean) { return(false); } if (!(bool)constant1.Value) { return(false); } if ((bool)constant2.Value) { return(false); } return(true); }
public virtual VfpExpression Visit(VfpCaseExpression expression) { return(new VfpCaseExpression(expression.ResultType, VisitVfpExpressionList(expression.When), VisitVfpExpressionList(expression.Then), expression.Else.Accept(this))); }
public override VfpExpression Visit(VfpCaseExpression expression) { if (!_canRewrite || !NullGatherer.Gather(expression).Any()) { return(expression); } return(expression.Cast(expression.ResultType)); }
private static bool IsComparisonCaseExpression(VfpCaseExpression expression) { if (expression == null || expression.When.Count != 2 || expression.Then.Count != 2) { return(false); } if (!(expression.Then[0] is VfpConstantExpression constant1) || constant1.ConstantKind != PrimitiveTypeKind.Boolean || !(bool)constant1.Value) { return(false); } if (!(expression.Then[1] is VfpConstantExpression constant2) || constant2.ConstantKind != PrimitiveTypeKind.Boolean || (bool)constant2.Value) { return(false); } return(true); }
private static bool IsExpectedCaseExpression(VfpCaseExpression expression) => IsComparisonCaseExpression(expression) || IsEmptyCaseExpression(expression) || IsNotAndIsEmptyCaseExpression(expression);
public override VfpExpression Visit(VfpCaseExpression expression) { return(IsExpectedCaseExpression(expression) ? base.Visit(expression.When[0]) : base.Visit(expression)); }