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); }