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).