public override Expression Reduce() { // Only reduce OpAssignment expressions. if (IsOpAssignment(NodeType)) { switch (Left.NodeType) { case ExpressionType.MemberAccess: return ReduceMember(); case ExpressionType.Index: return ReduceIndex(); default: return ReduceVariable(); } } return this; }
protected override Expression VisitBinary(BinaryExpression node) { // NB: This reduces assignment operators so that the stack spiller doesn't have to worry about it. if (node.CanReduce) { return node.Reduce(); } return base.VisitBinary(node); }