summary refs log tree commit diff stats
path: root/tests/procvar/tprocvar.nim
blob: 14f24efdc405b7381a0cd8af4abc733e20d284b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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