although esc(expr) is incorrect if you have something that does not come from the argument (e.g., esc(:($obj = setdataΔ($obj, $x))) probably does something bad).
@Tamas_Papp Maybe a better example of what you were pointing out is qr!(A)? The caller allows the callee to modify the input A but it is done in an unspecified way. I think not mutating the input at all is an acceptable implementation. Generalizing it, there are ! functions that may mutate the arguments because they are treated as workspace. I do agree this and my first comment was perhaps generalizing too much. However, I don’t think it’s popular to expose a public API that may or may not mutate “output argument” (e.g., the first argument of push!). At least I don’t remember seeing such API in Julia.