I know why it doesn't compile but my reply would be identical to the compiler's
error message. You need to define your destructor earlier, like so:
when defined(gcDestructors):
proc `=destroy`*(self: var typeof(Event()[])) =
if not self.ignoreFinalizer and self.impl != nil:
echo "gdk_event_unref(self.impl)"
self.impl = nil
template fnew*(a: untyped; finalizer: untyped) =
when defined(gcDestructors):
new(a)
else:
new(a, finalizer)
proc `ref`*(self: Event): Event =
fnew(result, generic_gdk_event_unref)
echo "result.impl = gdk_event_ref(cast[ptr Event00](self.impl))"
proc generic_gdk_event_unref*[T](self: ref T) =
if not self.ignoreFinalizer:
echo "gdk_event_unref(self.impl)"
Run