diff options
-rw-r--r-- | lib/pure/options.nim | 4 | ||||
-rw-r--r-- | tests/stdlib/toptions.nim | 8 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/pure/options.nim b/lib/pure/options.nim index 10a46cc94..b7a6a6212 100644 --- a/lib/pure/options.nim +++ b/lib/pure/options.nim @@ -82,7 +82,7 @@ when defined(nimPreviewSlimSystem): when (NimMajor, NimMinor) >= (1, 1): type - SomePointer = ref | ptr | pointer | proc + SomePointer = ref | ptr | pointer | proc | iterator {.closure.} else: type SomePointer = ref | ptr | pointer @@ -90,7 +90,7 @@ else: type Option*[T] = object ## An optional type that may or may not contain a value of type `T`. - ## When `T` is a a pointer type (`ptr`, `pointer`, `ref` or `proc`), + ## When `T` is a a pointer type (`ptr`, `pointer`, `ref`, `proc` or `iterator {.closure.}`), ## `none(T)` is represented as `nil`. when T is SomePointer: val: T diff --git a/tests/stdlib/toptions.nim b/tests/stdlib/toptions.nim index 4f1251abb..63a10e746 100644 --- a/tests/stdlib/toptions.nim +++ b/tests/stdlib/toptions.nim @@ -196,6 +196,12 @@ proc main() = doAssert x.isNone doAssert $x == "none(cstring)" - static: main() main() + +when not defined(js): + block: # bug #22932 + var it = iterator: int {.closure.} = discard + doAssert it.option.isSome # Passes. + it = nil + doAssert it.option.isNone # Passes. |