Exemple #1
0
        internal override Expression BuildExpression(Expression callerExpression = null)
        {
            var left  = Left.BuildExpression(callerExpression);
            var right = Right.BuildExpression(callerExpression);

            return(Expression.MakeIndex(left, left.Type.GetProperty("Item", new[] { right.Type }), new [] { right }));
        }
        internal override Expression BuildExpression(Expression callerExpression = null)
        {
            var rightType = Right.BuildExpression(callerExpression).Type;

            if (!rightType.IsNullable())
            {
                rightType = rightType.MakeNullableType();
            }
            return(Expression.TypeAs(Left.BuildExpression(callerExpression), rightType));
        }
        internal override Expression BuildExpression(Expression callerExpression = null)
        {
            var left  = Left.BuildExpression(callerExpression);
            var right = Right.BuildExpression(callerExpression);

            if (left is ConstantExpression leftValue && leftValue.Value == null)
            {
                left = Expression.Convert(left, right.Type);
            }
            return(Expression.Coalesce(left, right));
        }
Exemple #4
0
        internal override Expression BuildExpression(Expression callerExpression = null)
        {
            var left  = Left.BuildExpression(callerExpression);
            var right = Right.BuildExpression(Left.BuildExpression(callerExpression));

            if (!right.Type.IsNullable())
            {
                right = Expression.Convert(right, right.Type.MakeNullableType());
            }
            return(Expression.Condition(Expression.Equal(left, Expression.Constant(null, left.Type)), Expression.Constant(null, right.Type), right));
        }
        internal override Expression BuildExpression(Expression callerExpression = null)
        {
            if (callerExpression == null)
            {
                throw new ArgumentNullException(nameof(callerExpression));
            }
            var parameterName = ((IdentifierNode)Left).Name;
            var parameterType = GetParameterType();

            Debug.Assert(parameterType != null);
            var parameterExpression = Expression.Parameter(parameterType, parameterName);

            return(Expression.Lambda(Right.BuildExpression(parameterExpression), parameterExpression));

            Type GetParameterType()
            {
                return(callerExpression.Type == typeof(string) ? typeof(char) :
                       callerExpression.Type.IsArray?callerExpression.Type.GetElementType() :
                           callerExpression.Type.GetGenericArguments()[0]);
            }
        }
 internal override Expression BuildExpression(Expression callerExpression = null)
 {
     return(Expression.Divide(Left.BuildExpression(callerExpression), Right.BuildExpression(callerExpression)));
 }
 internal override Expression BuildExpression(Expression callerExpression = null)
 {
     return(Expression.TypeIs(Left.BuildExpression(callerExpression), Right.BuildExpression(callerExpression).Type));
 }
 internal override Expression BuildExpression(Expression callerExpression = null)
 {
     return(Expression.LessThanOrEqual(Left.BuildExpression(callerExpression), Right.BuildExpression(callerExpression)));
 }