summary refs log tree commit diff stats
path: root/tests/generics/tforward_generic.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generics/tforward_generic.nim')
-rw-r--r--tests/generics/tforward_generic.nim28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/generics/tforward_generic.nim b/tests/generics/tforward_generic.nim
new file mode 100644
index 000000000..169279cb3
--- /dev/null
+++ b/tests/generics/tforward_generic.nim
@@ -0,0 +1,28 @@
+discard """
+  output: '''b()
+720 120.0'''
+"""
+
+# bug #3055
+proc b(t: int | string)
+proc a(t: int) = b(t)
+proc b(t: int | string) = echo "b()"
+a(1)
+
+# test recursive generics still work:
+proc fac[T](x: T): T =
+  if x == 0: return 1
+  else: return fac(x-1)*x
+
+echo fac(6), " ", fac(5.0)
+
+when false:
+  # This still doesn't work...
+  # test recursive generic with forwarding:
+  proc fac2[T](x: T): T
+
+  echo fac2(6), " ", fac2(5.0)
+
+  proc fac2[T](x: T): T =
+    if x == 0: return 1
+    else: return fac2(x-1)*x