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)); }
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) });
private static Expression ReduceIndexCSharp(IndexCSharpExpression index, Func <Expression, Expression> functionalOp, bool prefix, LambdaExpression leftConversion) { return(index.ReduceAssign(x => ReduceVariable(x, functionalOp, prefix, leftConversion))); }
internal override ConditionalAccessCSharpExpression <IndexCSharpExpression> Rewrite(Expression receiver, ConditionalReceiver nonNullReceiver, IndexCSharpExpression whenNotNull) { return(new MethodBased(receiver, nonNullReceiver, whenNotNull)); }
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)); }
protected internal virtual Expression VisitIndex(IndexCSharpExpression node) { return(node.Update(Visit(node.Object), Visit(node.Arguments, VisitParameterAssignment))); }
private static Expression ReduceIndexCSharp(IndexCSharpExpression index, Func<Expression, Expression> functionalOp, bool prefix, LambdaExpression leftConversion) { return index.ReduceAssign(x => ReduceVariable(x, functionalOp, prefix, leftConversion)); }
internal override ConditionalAccessCSharpExpression <IndexCSharpExpression> Rewrite(Expression receiver, ConditionalReceiver nonNullReceiver, IndexCSharpExpression whenNotNull) => new PropertyBased(receiver, nonNullReceiver, whenNotNull);