summary refs log tree commit diff stats
path: root/tests/generics/tgeneric_closure.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generics/tgeneric_closure.nim')
-rw-r--r--tests/generics/tgeneric_closure.nim37
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()