12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- discard """
- targets: "c cpp js"
- """
- template main =
- block: # proc equality
- var prc: proc(): int {.closure.}
- prc = nil
- doAssert prc == nil
- doAssert prc.isNil
- prc = proc(): int =
- result = 123
- doAssert prc != nil
- doAssert not prc.isNil
- doAssert prc == prc
- let prc2 = prc
- doAssert prc == prc2
- doAssert prc2 != nil
- doAssert not prc2.isNil
- doAssert not prc.isNil
- prc = proc(): int =
- result = 456
- doAssert prc != nil
- doAssert not prc.isNil
- doAssert prc != prc2
- block: # iterator equality
- when nimvm: discard # vm does not support closure iterators
- else:
- when not defined(js): # js also does not support closure iterators
- var iter: iterator(): int {.closure.}
- iter = nil
- doAssert iter == nil
- doAssert iter.isNil
- iter = iterator(): int =
- yield 123
- doAssert iter != nil
- doAssert not iter.isNil
- doAssert iter == iter
- let iter2 = iter
- doAssert iter == iter2
- doAssert iter2 != nil
- doAssert not iter2.isNil
- doAssert not iter.isNil
- iter = iterator(): int =
- yield 456
- doAssert iter != nil
- doAssert not iter.isNil
- doAssert iter != iter2
- static: main()
- main()
|