summary refs log tree commit diff stats
path: root/tests/proc/tprocvar.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/proc/tprocvar.nim')
-rw-r--r--tests/proc/tprocvar.nim39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/proc/tprocvar.nim b/tests/proc/tprocvar.nim
new file mode 100644
index 000000000..14f24efdc
--- /dev/null
+++ b/tests/proc/tprocvar.nim
@@ -0,0 +1,39 @@
+discard """
+  output: '''
+papbpcpdpe7
+'''
+"""
+
+block genericprocvar:
+  proc foo[T](thing: T) =
+    discard thing
+  var a: proc (thing: int) {.nimcall.} = foo[int]
+
+
+block tprocvar2:
+  proc pa() {.cdecl.} = write(stdout, "pa")
+  proc pb() {.cdecl.} = write(stdout, "pb")
+  proc pc() {.cdecl.} = write(stdout, "pc")
+  proc pd() {.cdecl.} = write(stdout, "pd")
+  proc pe() {.cdecl.} = write(stdout, "pe")
+
+  const algos = [pa, pb, pc, pd, pe]
+  var x: proc (a, b: int): int {.cdecl.}
+
+  proc ha(c, d: int): int {.cdecl.} =
+    echo(c + d)
+    result = c + d
+
+  for a in items(algos):
+    a()
+
+  x = ha
+  discard x(3, 4)
+
+
+block tprocvars:
+  proc doSomething(v: int, x: proc(v:int):int): int = return x(v)
+  proc doSomething(v: int, x: proc(v:int)) = x(v)
+
+  doAssert doSomething(10, proc(v: int): int = return v div 2) == 5
+