mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
* fix iterator equality + add test also for procs fixes #21706 * all targets * and isNil and repr * separate overloads, fix sameType * more restricted sameType? * merge overloads again?? * remove sametype change for now * fix sameType anyway (CI failure was not related) --------- Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
52 lines
1.3 KiB
Nim
52 lines
1.3 KiB
Nim
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()
|