diff options
Diffstat (limited to 'tests/closure/tclosure0.nim')
-rw-r--r-- | tests/closure/tclosure0.nim | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/tests/closure/tclosure0.nim b/tests/closure/tclosure0.nim deleted file mode 100644 index 9952268d5..000000000 --- a/tests/closure/tclosure0.nim +++ /dev/null @@ -1,87 +0,0 @@ -discard """ - output: '''foo88 -23 24foo 88 -18 -18 -99 -99 -99 -99 99 -99 99 -12 99 99 -12 99 99''' -""" - -when true: - # test simple closure within dummy 'main': - proc dummy = - proc main2(param: int) = - var fooB = 23 - proc outer(outerParam: string) = - var outerVar = 88 - echo outerParam, outerVar - proc inner() = - block Test: - echo fooB, " ", param, outerParam, " ", outerVar - inner() - outer("foo") - main2(24) - - dummy() - -when true: - proc outer2(x:int) : proc(y:int):int = # curry-ed application - return proc(y:int):int = x*y - - var fn = outer2(6) # the closure - echo fn(3) # it works - - var rawP = fn.rawProc() - var rawE = fn.rawEnv() - - # A type to cast the function pointer into a nimcall - type - TimesClosure = proc(a: int, x: pointer): int {.nimcall.} - - # Call the function with its closure - echo cast[TimesClosure](rawP)(3, rawE) - -when true: - proc outer = - var x, y: int = 99 - proc innerA = echo x - proc innerB = - echo y - innerA() - - innerA() - innerB() - - outer() - -when true: - proc indirectDep = - var x, y: int = 99 - proc innerA = echo x, " ", y - proc innerB = - innerA() - - innerA() - innerB() - - indirectDep() - -when true: - proc needlessIndirection = - var x, y: int = 99 - proc indirection = - var z = 12 - proc innerA = echo z, " ", x, " ", y - proc innerB = - innerA() - - innerA() - innerB() - indirection() - - needlessIndirection() |