add -d:nimLegacyNoHashRef for a transition period which avoids defining hash(ref) (#17858)
This commit is contained in:
parent
fdfd0f35a1
commit
3f58b7face
2 changed files with 23 additions and 17 deletions
|
|
@ -51,6 +51,7 @@
|
|||
for previous behavior.
|
||||
|
||||
- `hashes.hash` now supports `object` and `ref` (can be overloaded in user code).
|
||||
For a transition period, use `-d:nimLegacyNoHashRef` to avoid defining `hash(ref)`.
|
||||
- `hashes.hash(proc|ptr|ref|pointer)` now calls `hash(int)` and honors `-d:nimIntHash1`,
|
||||
`hashes.hash(closure)` has also been improved.
|
||||
|
||||
|
|
|
|||
|
|
@ -228,12 +228,17 @@ proc hash*(x: pointer): Hash {.inline.} =
|
|||
let y = cast[int](x)
|
||||
hash(y) # consistent with code expecting scrambled hashes depending on `nimIntHash1`.
|
||||
|
||||
proc hash*[T](x: ref[T] | ptr[T]): Hash {.inline.} =
|
||||
proc hash*[T](x: ptr[T]): Hash {.inline.} =
|
||||
## Efficient `hash` overload.
|
||||
runnableExamples:
|
||||
var a: array[10, uint8]
|
||||
assert a[0].addr.hash != a[1].addr.hash
|
||||
assert cast[pointer](a[0].addr).hash == a[0].addr.hash
|
||||
hash(cast[pointer](x))
|
||||
|
||||
when not defined(nimLegacyNoHashRef):
|
||||
proc hash*[T](x: ref[T]): Hash {.inline.} =
|
||||
## Efficient `hash` overload.
|
||||
runnableExamples:
|
||||
type A = ref object
|
||||
x: int
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue