Files
Nim/tests/arc/tfuncobj.nim
2024-12-13 15:04:49 +01:00

39 lines
709 B
Nim

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