diff options
Diffstat (limited to 'tests/generics/tgeneric_closure.nim')
-rw-r--r-- | tests/generics/tgeneric_closure.nim | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/generics/tgeneric_closure.nim b/tests/generics/tgeneric_closure.nim new file mode 100644 index 000000000..7198dce96 --- /dev/null +++ b/tests/generics/tgeneric_closure.nim @@ -0,0 +1,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() |