summary refs log blame commit diff stats
path: root/tests/closure/tclosure2.nim
blob: d331388cf1519e41051e817a73884afb4119a3b7 (plain) (tree)
1
2
3
4
5
6
7
8
9
           



              
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
  


  


    



           


                     
                  

                   


                                
 
          
            


      
          



                                                           

                           

                                
 













                              
 


         






                                   
 











                           
 
               

 
          
 
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()