Maybe there should be a pragma {. expensive .} (or alternatively {. cheap .} which could be set on hooks and which would trigger a warning if they are implicitly invoked?
Also: I was reading the destructor docs in [https://nim-lang.github.io/Nim/destructors.html#swap](https://nim-lang.github.io/Nim/destructors.html#swap) says > Objects that contain pointers that point to the same object are not supported > by Nim's model. Otherwise swapped objects would end up in an inconsistent > state. Is this really true? Seems to me it's just not supported by the "swap" builtin (and that should be fixed, because self-pointing structures do happen and are not always immediately evident from the source code - e.g. a circular linked list with one element).