discard """ cmd: '''nim c -d:nimAllocStats --newruntime $file''' output: '''button clicked! (allocCount: 6, deallocCount: 6)''' """ import system / ansi_c type Widget* = ref object of RootObj drawImpl: owned(proc (self: Widget)) Button* = ref object of Widget caption: string onclick: owned(proc()) Window* = ref object of Widget elements: seq[owned Widget] proc newButton(caption: string; onclick: owned(proc())): owned Button = proc draw(self: Widget) = let b = Button(self) echo b.caption #result = Button(drawImpl: draw, caption: caption, onclick: onclick) new(result) result.drawImpl = draw result.caption = caption result.onclick = onclick proc newWindow(): owned Window |