summary refs log tree commit diff stats
path: root/tests/closure/tclosure2.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/closure/tclosure2.nim')
-rw-r--r--tests/closure/tclosure2.nim101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/closure/tclosure2.nim b/tests/closure/tclosure2.nim
new file mode 100644
index 000000000..d2c16eac9
--- /dev/null
+++ b/tests/closure/tclosure2.nim
@@ -0,0 +1,101 @@
+discard """
+  output: '''0
+11
+1
+11
+2
+11
+3
+11
+4
+11
+5
+11
+6
+11
+7
+11
+8
+11
+9
+11
+11
+py
+py
+py
+py
+px
+6'''
+"""
+
+when true:
+  proc ax =
+    for xxxx in 0..9:
+      var i = 0
+      proc bx =
+        if i > 10: 
+          echo xxxx
+          return
+        i += 1
+        #for j in 0 .. 0: echo i
+        bx()
+      
+      bx()
+      echo i
+
+  ax()
+
+when true:
+  proc accumulator(start: int): (proc(): int {.closure.}) =
+    var x = start-1
+    #let dummy = proc =
+    #  discard start
+    
+    result = proc (): int = 
+      #var x = 9
+      for i in 0 .. 0: x = x + 1
+      
+      return x
+
+  var a = accumulator(3)
+  let b = accumulator(4)
+  echo a() + b() + a()
+
+
+  proc outer =
+
+    proc py() =
+      # no closure here:
+      for i in 0..3: echo "py"
+
+    py()
+    
+  outer()
+
+
+when true:
+  proc outer2 =
+    var errorValue = 3
+    proc fac[T](n: T): T =
+      if n < 0: result = errorValue
+      elif n <= 1: result = 1
+      else: result = n * fac(n-1)
+  
+    proc px() {.closure.} =
+      echo "px"
+
+    proc py() {.closure.} =
+      echo "py"
+
+    const
+      mapping = {
+        "abc": px,
+        "xyz": py
+      }
+    mapping[0][1]()
+    
+    echo fac(3)
+
+
+  outer2()
+