예제 #1
0
            private void PushComparison(Expression lhs, Expression rhs, ComparisonOperator op)
            {
                Visit(lhs);
                object left = Pop();

                Visit(rhs);
                object right = Pop();

                bool areOperandsSwapped = IsCandidateFieldValue(right);

                if (areOperandsSwapped)
                {
                    object temp = left;
                    left  = right;
                    right = temp;
                }

                AssertType(left, typeof(FieldValue), lhs);
                AssertType(right, typeof(IComparisonOperand), rhs);

                Push(new ComparisonExpression((FieldValue)left, (IComparisonOperand)right, op));

                if (areOperandsSwapped && !op.IsSymmetric())
                {
                    Negate();
                }
            }