/// <summary> /// 获取简单表达式 /// </summary> /// <param name="binaryExpression">二元表达式</param> /// <returns>简单表达式</returns> private static TmphExpression getSimpleNotEqual(TmphBinaryExpression binaryExpression) { if (binaryExpression.Left.IsConstant && binaryExpression.Right.IsConstant) { var leftValue = ((TmphConstantExpression)binaryExpression.Left).Value; var rightValue = ((TmphConstantExpression)binaryExpression.Right).Value; binaryExpression.PushPool(); return TmphLogicConstantExpression.Get(leftValue == null ? rightValue != null : !leftValue.Equals(rightValue)); } return binaryExpression; }
/// <summary> /// 获取简单表达式 /// </summary> /// <param name="binaryExpression">二元表达式</param> /// <returns>简单表达式</returns> private static TmphExpression getSimpleLessThanOrEqual(TmphBinaryExpression binaryExpression) { if (binaryExpression.Left.IsConstant && binaryExpression.Right.IsConstant) { var value = ((IComparable)((TmphConstantExpression)binaryExpression.Left).Value) .CompareTo(((TmphConstantExpression)binaryExpression.Right).Value); binaryExpression.PushPool(); return TmphLogicConstantExpression.Get(value <= 0); } return binaryExpression; }
/// <summary> /// 获取简单表达式 /// </summary> /// <param name="binaryExpression">二元表达式</param> /// <returns>简单表达式</returns> private static TmphExpression getSimpleAndAlso(TmphBinaryExpression binaryExpression) { if (binaryExpression.Left.NodeType == TmphExpressionType.LogicConstant) { TmphExpression expression; if (((TmphLogicConstantExpression)binaryExpression.Left).Value) { expression = binaryExpression.Right; binaryExpression.Right = null; } else { expression = binaryExpression.Left; binaryExpression.Left = null; } --expression.ExpressionCount; binaryExpression.PushPool(); return expression; } if (binaryExpression.Right.NodeType == TmphExpressionType.LogicConstant) { TmphExpression expression; if (((TmphLogicConstantExpression)binaryExpression.Right).Value) { expression = binaryExpression.Left; binaryExpression.Left = null; } else { expression = binaryExpression.Right; binaryExpression.Right = null; } --expression.ExpressionCount; binaryExpression.PushPool(); return expression; } return binaryExpression; }