/// <summary> /// 获取二元表达式 /// </summary> /// <param name="type">表达式类型</param> /// <param name="left">左表达式</param> /// <param name="right">右表达式</param> /// <param name="method">运算符重载函数</param> /// <returns>二元表达式</returns> internal static TmphBinaryExpression Get(TmphExpressionType type, TmphExpression left, TmphExpression right, MethodInfo method) { var expression = TmphTypePool<TmphBinaryExpression>.Pop() ?? new TmphBinaryExpression(); expression.NodeType = type; expression.Method = method; ++(expression.Left = left.SimpleExpression).ExpressionCount; ++(expression.Right = right.SimpleExpression).ExpressionCount; return expression; }
/// <summary> /// 一元表达式 /// </summary> /// <param name="type">表达式类型</param> /// <param name="expression">表达式</param> /// <param name="method">运算符重载函数</param> protected void set(TmphExpressionType type, TmphExpression expression, MethodInfo method) { NodeType = type; Method = method; ++(Expression = expression.SimpleExpression).ExpressionCount; }
/// <summary> /// 获取一元表达式 /// </summary> /// <param name="type">表达式类型</param> /// <param name="expression">表达式</param> /// <param name="method">运算符重载函数</param> /// <returns>一元表达式</returns> internal static TmphUnaryExpression Get(TmphExpressionType type, TmphExpression expression, MethodInfo method) { var unaryExpression = TmphTypePool<TmphUnaryExpression>.Pop() ?? new TmphUnaryExpression(); unaryExpression.set(type, expression, method); return unaryExpression; }
/// <summary> /// 获取常量转换处理函数 /// </summary> /// <param name="type">数据类型</param> /// <returns>失败返回null</returns> public Action<TmphConverter, TmphExpression> this[TmphExpressionType type] { get { return converters[(int)type]; } }