summary refs log tree commit diff stats
path: root/tests/generics/tgeneric_closure.nim
blob: 7198dce96427968c7bf81e898e3c95ffaa947291 (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
# Test to ensure TEventHandler is '.closure'

# bug #1187

type
  TEventArgs* = object
    skip*: bool
  TEventHandler[T] = proc (e: var TEventArgs, data: T) {.closure.}
  TEvent*[T] = object
    #handlers: seq[TEventHandler[T]] # Does not work
    handlers: seq[proc (e: var TEventArgs, data: T) {.closure.}] # works

  TData = object
    x: int

  TSomething = object
    s: TEvent[TData]

proc init*[T](e: var TEvent[T]) =
  e.handlers.newSeq(0)

#proc add*[T](e: var TEvent[T], h: proc (e: var TEventArgs, data: T) {.closure.}) =
# this line works
proc add*[T](e: var TEvent[T], h: TEventHandler[T]) =
  # this line does not work
  e.handlers.add(h)

proc main () =
  var something: TSomething
  something.s.init()
  var fromOutside = 4711

  something.s.add() do (e: var TEventArgs, data: TData):
    var x = data.x
    x = fromOutside

main()