mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-23 03:16:53 +00:00
Consider proc as a pointer type in options (#13460)
* Consider proc as a pointer type in options * Add version annotation for SomePointer having proc in options * Log procs as pointers for options in changelog
This commit is contained in:
@@ -25,6 +25,8 @@
|
||||
It didn't work well together with the existing inplace version of the same proc
|
||||
(`tables.merge(var CountTable, CountTable)`).
|
||||
It was an oversight to be included in v1.0.
|
||||
- `options` now treats `proc` like other pointer types, meaning `nil` proc variables
|
||||
are converted to `None`.
|
||||
|
||||
|
||||
### Breaking changes in the compiler
|
||||
|
||||
@@ -58,8 +58,12 @@
|
||||
|
||||
import typetraits
|
||||
|
||||
type
|
||||
SomePointer = ref | ptr | pointer
|
||||
when (NimMajor, NimMinor) >= (1, 1):
|
||||
type
|
||||
SomePointer = ref | ptr | pointer | proc
|
||||
else:
|
||||
type
|
||||
SomePointer = ref | ptr | pointer
|
||||
|
||||
type
|
||||
Option*[T] = object
|
||||
@@ -74,7 +78,7 @@ type
|
||||
|
||||
|
||||
proc option*[T](val: T): Option[T] =
|
||||
## Can be used to convert a pointer type (`ptr` or `ref`) to an option type.
|
||||
## Can be used to convert a pointer type (`ptr` or `ref` or `proc`) to an option type.
|
||||
## It converts `nil` to `None`.
|
||||
##
|
||||
## See also:
|
||||
@@ -482,6 +486,11 @@ when isMainModule:
|
||||
|
||||
let tmp = option(intref)
|
||||
check(sizeof(tmp) == sizeof(ptr int))
|
||||
|
||||
var prc = proc (x: int): int = x + 1
|
||||
check(option(prc).isSome)
|
||||
prc = nil
|
||||
check(option(prc).isNone)
|
||||
|
||||
test "none[T]":
|
||||
check(none[int]().isNone)
|
||||
|
||||
Reference in New Issue
Block a user