I was just thinking about how I can prevent a call of destroy from within a proc, because for callbacks we do not want destroy calls for parameters owned by GTK.
But it seems that this tests does not generate a destroy call for proc parameter at all? type O {.bycopy.} = object i: int proc new(o: var O) = echo "new called" proc `=destroy`*(s: var O) = echo "=destroy called" proc `=sink`*(a: var O; b: O) = echo "=sink called" proc createO: O = result.i = 7 proc p(o: O) = echo "working with o" echo o.i proc main = var o: O = createO() p(o) echo o.i main() Run $ ./h =sink called working with o 0 0 =destroy called Run I have added the bycopy pragma, but that makes no difference. There is only one destroy call, and that is for the o var in main. When I add a local var of type O to proc p() we get another destroy call as expected.