Expression ExpandSimpleIncrementDecrement(UnaryExpression node)
{
var oldValue = DeclareOldValueTempIfNeeded(node);
var type = GetExpressionType(node.Operand);
var addition = CodeBuilder.CreateBoundBinaryExpression(
type,
GetEquivalentBinaryOperator(node.Operator),
CloneOrAssignToTemp(oldValue, node.Operand),
CodeBuilder.CreateIntegerLiteral(1));
var assign = CodeBuilder.CreateAssignment(
node.LexicalInfo,
node.Operand,
addition);
// Resolve operator overloads if any
BindArithmeticOperator(addition);
return oldValue == null
? (Expression) assign
: CodeBuilder.CreateEvalInvocation(
node.LexicalInfo,
assign,
CodeBuilder.CreateReference(oldValue));
}