Exemplo n.º 1
0
        protected internal override Expression VisitIndex(IndexCSharpExpression node)
        {
            var obj  = Visit(node.Object);
            var args = Visit(nameof(node.Arguments), node.Arguments, Visit);

            return(Push(node, new XAttribute(nameof(node.Indexer), node.Indexer), new XElement(nameof(node.Object), obj), args));
        }
Exemplo n.º 2
0
 private static void EnsureCanWrite(IndexCSharpExpression index, string paramName)
 {
     if (!index.Indexer.CanWrite)
     {
         throw new ArgumentException(System.Linq.Expressions.Strings.ExpressionMustBeWriteable, paramName);
     }
 }
        /// <summary>
        /// Reduces the expression node to a simpler expression.
        /// </summary>
        /// <returns>The reduced expression.</returns>
        public override Expression Reduce()
        {
            var left = MakeWriteable(Left);

            if (CSharpNodeType == CSharpExpressionType.NullCoalescingAssign)
            {
                // NB: NullCoalescingAssign is handled by the Reduce implementation on the derived type.

                throw ContractUtils.Unreachable;
            }

            if (CSharpNodeType == CSharpExpressionType.Assign)
            {
                // NB: We still use `ReduceAssignment` here to deal with IndexCSharpExpression which is not
                //     a valid LHS to Expression.Assign.

                return(left switch
                {
                    IndexCSharpExpression indexCSharp => indexCSharp.ReduceAssign(lhs => Expression.Assign(lhs, Right)),
                    ArrayAccessCSharpExpression arrayAccessCSharp => arrayAccessCSharp.ReduceAssign(lhs => Expression.Assign(lhs, Right)),
                    IndexerAccessCSharpExpression indexerAccessCSharp => indexerAccessCSharp.ReduceAssign(lhs => Expression.Assign(lhs, Right)),
                    _ => Expression.Assign(left, Right)
                });
Exemplo n.º 4
0
 private static Expression ReduceIndexCSharp(IndexCSharpExpression index, Func <Expression, Expression> functionalOp, bool prefix, LambdaExpression leftConversion)
 {
     return(index.ReduceAssign(x => ReduceVariable(x, functionalOp, prefix, leftConversion)));
 }
Exemplo n.º 5
0
 internal override ConditionalAccessCSharpExpression <IndexCSharpExpression> Rewrite(Expression receiver, ConditionalReceiver nonNullReceiver, IndexCSharpExpression whenNotNull)
 {
     return(new MethodBased(receiver, nonNullReceiver, whenNotNull));
 }
Exemplo n.º 6
0
 private MethodBased(Expression @object, ConditionalReceiver receiver, IndexCSharpExpression access)
     : base(@object, receiver, access)
 {
 }
 public IndexCSharpExpressionProxy(IndexCSharpExpression node)
 {
     _node = node;
 }
 protected internal virtual Expression VisitIndex(IndexCSharpExpression node)
 {
     return node.Update(Visit(node.Object), Visit(node.Arguments, VisitParameterAssignment));
 }
Exemplo n.º 9
0
 protected internal virtual Expression VisitIndex(IndexCSharpExpression node)
 {
     return(node.Update(Visit(node.Object), Visit(node.Arguments, VisitParameterAssignment)));
 }
Exemplo n.º 10
0
 private static void EnsureCanWrite(IndexCSharpExpression index, string paramName)
 {
     if (!index.Indexer.CanWrite)
     {
         throw new ArgumentException(System.Linq.Expressions.Strings.ExpressionMustBeWriteable, paramName);
     }
 }
Exemplo n.º 11
0
 private static Expression ReduceIndexCSharp(IndexCSharpExpression index, Func<Expression, Expression> functionalOp, bool prefix, LambdaExpression leftConversion)
 {
     return index.ReduceAssign(x => ReduceVariable(x, functionalOp, prefix, leftConversion));
 }
 public IndexCSharpExpressionProxy(IndexCSharpExpression node)
 {
     _node = node;
 }
 internal override ConditionalAccessCSharpExpression <IndexCSharpExpression> Rewrite(Expression receiver, ConditionalReceiver nonNullReceiver, IndexCSharpExpression whenNotNull) =>
 new PropertyBased(receiver, nonNullReceiver, whenNotNull);