hashes for refs should be an opt-in feature (#18098)
This commit is contained in:
parent
e2ab08603d
commit
50e98e6efa
4 changed files with 16 additions and 5 deletions
17
changelog.md
17
changelog.md
|
|
@ -50,8 +50,9 @@
|
||||||
- On POSIX systems, we now ignore `SIGPIPE` signals, use `-d:nimLegacySigpipeHandler`
|
- On POSIX systems, we now ignore `SIGPIPE` signals, use `-d:nimLegacySigpipeHandler`
|
||||||
for previous behavior.
|
for previous behavior.
|
||||||
|
|
||||||
- `hashes.hash` now supports `object` and `ref` (can be overloaded in user code).
|
- `hashes.hash` can now support `object` and `ref` (can be overloaded in user code),
|
||||||
For a transition period, use `-d:nimLegacyNoHashRef` to avoid defining `hash(ref)`.
|
if `-d:nimEnableHashRef` is used.
|
||||||
|
|
||||||
- `hashes.hash(proc|ptr|ref|pointer)` now calls `hash(int)` and honors `-d:nimIntHash1`,
|
- `hashes.hash(proc|ptr|ref|pointer)` now calls `hash(int)` and honors `-d:nimIntHash1`,
|
||||||
`hashes.hash(closure)` has also been improved.
|
`hashes.hash(closure)` has also been improved.
|
||||||
|
|
||||||
|
|
@ -82,7 +83,9 @@
|
||||||
other defines.
|
other defines.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Standard library additions and changes
|
## Standard library additions and changes
|
||||||
|
|
||||||
- Added support for parenthesized expressions in `strformat`
|
- Added support for parenthesized expressions in `strformat`
|
||||||
|
|
||||||
- Fixed buffer overflow bugs in `net`
|
- Fixed buffer overflow bugs in `net`
|
||||||
|
|
@ -99,7 +102,6 @@
|
||||||
the OpenSSL DLLs (e.g. libssl-1_1-x64.dll, libcrypto-1_1-x64.dll) you
|
the OpenSSL DLLs (e.g. libssl-1_1-x64.dll, libcrypto-1_1-x64.dll) you
|
||||||
now also need to ship `cacert.pem` with your `.exe` file.
|
now also need to ship `cacert.pem` with your `.exe` file.
|
||||||
|
|
||||||
|
|
||||||
- Make `{.requiresInit.}` pragma to work for `distinct` types.
|
- Make `{.requiresInit.}` pragma to work for `distinct` types.
|
||||||
|
|
||||||
- Added a macros `enumLen` for returning the number of items in an enum to the
|
- Added a macros `enumLen` for returning the number of items in an enum to the
|
||||||
|
|
@ -324,6 +326,8 @@
|
||||||
|
|
||||||
- Fixed premature garbage collection in asyncdispatch, when a stack trace override is in place.
|
- Fixed premature garbage collection in asyncdispatch, when a stack trace override is in place.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Language changes
|
## Language changes
|
||||||
|
|
||||||
- `nimscript` now handles `except Exception as e`.
|
- `nimscript` now handles `except Exception as e`.
|
||||||
|
|
@ -368,6 +372,8 @@
|
||||||
|
|
||||||
- `typeof(voidStmt)` now works and returns `void`.
|
- `typeof(voidStmt)` now works and returns `void`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Compiler changes
|
## Compiler changes
|
||||||
|
|
||||||
- Added `--declaredlocs` to show symbol declaration location in messages.
|
- Added `--declaredlocs` to show symbol declaration location in messages.
|
||||||
|
|
@ -394,7 +400,8 @@
|
||||||
- TLS: OSX now uses native TLS (`--tlsEmulation:off`), TLS now works with importcpp non-POD types,
|
- TLS: OSX now uses native TLS (`--tlsEmulation:off`), TLS now works with importcpp non-POD types,
|
||||||
such types must use `.cppNonPod` and `--tlsEmulation:off`should be used.
|
such types must use `.cppNonPod` and `--tlsEmulation:off`should be used.
|
||||||
|
|
||||||
- Now array literals(JS backend) uses JS typed arrays when the corresponding js typed array exists, for example `[byte(1), 2, 3]` generates `new Uint8Array([1, 2, 3])`.
|
- Now array literals(JS backend) uses JS typed arrays when the corresponding js typed array exists,
|
||||||
|
for example `[byte(1), 2, 3]` generates `new Uint8Array([1, 2, 3])`.
|
||||||
|
|
||||||
- docgen: rst files can now use single backticks instead of double backticks and correctly render
|
- docgen: rst files can now use single backticks instead of double backticks and correctly render
|
||||||
in both rst2html (as before) as well as common tools rendering rst directly (e.g. github), by
|
in both rst2html (as before) as well as common tools rendering rst directly (e.g. github), by
|
||||||
|
|
@ -426,6 +433,8 @@
|
||||||
the official Nim style guide. To be enabled, this has to be combined either
|
the official Nim style guide. To be enabled, this has to be combined either
|
||||||
with `--styleCheck:error` or `--styleCheck:hint`.
|
with `--styleCheck:error` or `--styleCheck:hint`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Tool changes
|
## Tool changes
|
||||||
|
|
||||||
- The rst parser now supports markdown table syntax.
|
- The rst parser now supports markdown table syntax.
|
||||||
|
|
|
||||||
|
|
@ -236,7 +236,7 @@ proc hash*[T](x: ptr[T]): Hash {.inline.} =
|
||||||
assert cast[pointer](a[0].addr).hash == a[0].addr.hash
|
assert cast[pointer](a[0].addr).hash == a[0].addr.hash
|
||||||
hash(cast[pointer](x))
|
hash(cast[pointer](x))
|
||||||
|
|
||||||
when not defined(nimLegacyNoHashRef):
|
when defined(nimEnableHashRef):
|
||||||
proc hash*[T](x: ref[T]): Hash {.inline.} =
|
proc hash*[T](x: ref[T]): Hash {.inline.} =
|
||||||
## Efficient `hash` overload.
|
## Efficient `hash` overload.
|
||||||
runnableExamples:
|
runnableExamples:
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ And we get here
|
||||||
'''
|
'''
|
||||||
joinable: false
|
joinable: false
|
||||||
targets: "c cpp js"
|
targets: "c cpp js"
|
||||||
|
matrix: "-d:nimEnableHashRef"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# xxx wrap in a template to test in VM, see https://github.com/timotheecour/Nim/issues/534#issuecomment-769565033
|
# xxx wrap in a template to test in VM, see https://github.com/timotheecour/Nim/issues/534#issuecomment-769565033
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
discard """
|
discard """
|
||||||
targets: "c cpp js"
|
targets: "c cpp js"
|
||||||
|
matrix: "-d:nimEnableHashRef"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import std/hashes
|
import std/hashes
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue