mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-09 22:43:34 +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>
(cherry picked from commit 380dafcc32)
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()
|