Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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)));
 }
Esempio n. 5
0
        public override VfpExpression Visit(VfpCaseExpression expression)
        {
            if (!_canRewrite || !NullGatherer.Gather(expression).Any())
            {
                return(expression);
            }

            return(expression.Cast(expression.ResultType));
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 private static bool IsExpectedCaseExpression(VfpCaseExpression expression) =>
 IsComparisonCaseExpression(expression) || IsEmptyCaseExpression(expression) || IsNotAndIsEmptyCaseExpression(expression);
Esempio n. 8
0
 public override VfpExpression Visit(VfpCaseExpression expression)
 {
     return(IsExpectedCaseExpression(expression) ? base.Visit(expression.When[0]) : base.Visit(expression));
 }