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:
parent
0d219d2c67
commit
1276e386fe
2 changed files with 14 additions and 3 deletions
|
|
@ -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:
|
||||
|
|
@ -483,6 +487,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)
|
||||
check(none(int) == none[int]())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue