summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-11-14 14:15:44 +0800
committerGitHub <noreply@github.com>2023-11-14 07:15:44 +0100
commit0dc3513613f87beb6ab5a590360ced7c9d33b1e3 (patch)
treec013f0149196d324c2ec141b6cb135eb194cd430
parent52784f32bbb6c764eb67a1abdbbbd9f54dc6030e (diff)
downloadNim-0dc3513613f87beb6ab5a590360ced7c9d33b1e3.tar.gz
fixes #22932; treats closure iterators as pointers (#22934)
fixes #22932
follow up https://github.com/nim-lang/Nim/pull/21629

---------

Co-authored-by: Nickolay Bukreyev <SirNickolas@users.noreply.github.com>
-rw-r--r--lib/pure/options.nim4
-rw-r--r--tests/stdlib/toptions.nim8
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.