blob: 50cd9425e1fb4286706f7d5aeaa898a4ee1155a7 (
plain) (
tree)
|
|
discard """
outputsub: '''f1
f2
f3'''
cmd: "nim c --gc:orc $file"
valgrind: true
"""
type
FuncObj = object
fn: proc (env: pointer) {.cdecl.}
env: pointer
proc `=destroy`(x: var FuncObj) =
GC_unref(cast[RootRef](x.env))
proc `=copy`(x: var FuncObj, y: FuncObj) {.error.}
# bug #18433
proc main =
var fs: seq[FuncObj]
proc wrap(p: proc()) =
proc closeOver() = p()
let env = rawEnv closeOver
GC_ref(cast[RootRef](env))
fs.add(FuncObj(fn: cast[proc(env: pointer){.cdecl.}](rawProc closeOver), env: env))
wrap(proc() {.closure.} = echo "f1")
wrap(proc() {.closure.} = echo "f2")
wrap(proc() {.closure.} = echo "f3")
for a in fs:
a.fn(a.env)
main()
|