/// <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; }
/// <summary> /// 转换表达式 /// </summary> /// <param name="converter">表达式转换器</param> /// <param name="expression">表达式</param> /// <param name="type">操作字符串</param> private void convertBinaryExpression(TmphConverter converter, TmphBinaryExpression binaryExpression, string type) { var stream = converter.Stream; TmphExpression left = binaryExpression.Left, right = binaryExpression.Right; stream.Write('('); if (left.IsSimple) { converters[(int)left.NodeType](converter, left); stream.Write('='); stream.Write('1'); } else converters[(int)left.NodeType](converter, left); stream.Write(')'); stream.WriteNotNull(type); stream.Write('('); if (right.IsSimple) { converters[(int)right.NodeType](converter, right); stream.Write('='); stream.Write('1'); } else converters[(int)right.NodeType](converter, right); stream.Write(')'); }
/// <summary> /// 转换表达式 /// </summary> /// <param name="converter">表达式转换器</param> /// <param name="expression">表达式</param> /// <param name="char1">操作字符1</param> /// <param name="char2">操作字符2</param> protected void convertBinaryExpression(TmphConverter converter, TmphBinaryExpression binaryExpression, char char1, char char2 = ' ') { var stream = converter.Stream; TmphExpression left = binaryExpression.Left, right = binaryExpression.Right; if (left.IsSimple) { converters[(int)left.NodeType](converter, left); } else { stream.Write('('); converters[(int)left.NodeType](converter, left); stream.Write(')'); } stream.Write(char1); stream.Write(char2); if (right.IsSimple) { converters[(int)right.NodeType](converter, right); } else { stream.Write('('); converters[(int)right.NodeType](converter, right); stream.Write(')'); } }
/// <summary> /// 转换表达式 /// </summary> /// <param name="converter">表达式转换器</param> /// <param name="expression">表达式</param> protected virtual void convertNotEqual(TmphConverter converter, TmphBinaryExpression expression) { convertBinaryExpression(converter, expression, '<', '>'); }
/// <summary> /// 转换表达式 /// </summary> /// <param name="converter">表达式转换器</param> /// <param name="expression">表达式</param> protected override void convertNotEqual(Expression.TmphConverter converter, TmphBinaryExpression expression) { convertBinaryExpression(converter, expression, '!', '='); }