public override Expression GenerateRead(Compilation.AstGenerator gen) { bool assign, post; var type = GetExpressionType(operation, out assign, out post); Expression ret; if (assign) { Assert.IsTrue(() => value is WritableNode); WritableNode writable = (WritableNode)value; if (post) { ParameterExpression temp = Expression.Variable(typeof(TotemObject), "temp"); var read = value.GenerateRead(gen); ret = Expression.Block( new ParameterExpression[] { temp }, Expression.Assign(temp, read), writable.GenerateWrite(gen, ExpressionType.Assign, gen.Unary(type, read)), temp ); } else { var read = value.GenerateRead(gen); ret = writable.GenerateWrite(gen, ExpressionType.Assign, gen.Unary(type, read)); } } else ret = gen.Unary( type, value.GenerateRead(gen) ); return ret; }