Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@
- `json` and `jsonutils` now serialize NaN, Inf, -Inf as strings, so that
`%[NaN, -Inf]` is the string `["nan","-inf"]` instead of `[nan,-inf]` which was invalid json.

- `system.addFloat` now uses the "Dragonbox" algorithm, which ensures correct roundtrips of floating point
numbers, that the minimum length representation of a floating point number is used and correct rounding.
Use `-d:nimLegacyAddFloat` for a transition period.

- `strformat` is now part of `include std/prelude`.

Expand All @@ -101,6 +98,12 @@
added support for parenthesized expressions.
added support for const string's instead of just string literals


- `system.addFloat` and `system.$` now can produce string representations of floating point numbers
that are minimal in size and that "roundtrip" (via the "Dragonbox" algorithm). This currently has
to be enabled via `-d:nimFpRoundtrips`. It is expected that this behavior becomes the new default
in upcoming versions.

- Fixed buffer overflow bugs in `net`

- Exported `sslHandle` from `net` and `asyncnet`.
Expand All @@ -115,8 +118,6 @@
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.

- Make `{.requiresInit.}` pragma to work for `distinct` types.

- `typetraits`:
`distinctBase` now is identity instead of error for non distinct types.
Added `enumLen` to return the number of elements in an enum.
Expand Down Expand Up @@ -467,7 +468,6 @@
with `--styleCheck:error` or `--styleCheck:hint`.



## Tool changes

- Latex doc generation is revised: output `.tex` files should be compiled
Expand Down
2 changes: 1 addition & 1 deletion lib/system/formatfloat.nim
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# distribution, for details about the copyright.
#

when not defined(nimLegacyAddFloat) and not defined(nimscript) and
when defined(nimFpRoundtrips) and not defined(nimscript) and
not defined(js) and defined(nimHasDragonBox):
import dragonbox

Expand Down
2 changes: 1 addition & 1 deletion lib/system/strmantle.nim
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ proc nimFloatToStr(f: float): string {.compilerproc.} =
result = newStringOfCap(8)
result.addFloat f

when not defined(nimLegacyAddFloat) and not defined(nimscript) and
when defined(nimFpRoundtrips) and not defined(nimscript) and
not defined(js) and defined(nimHasDragonBox):
import schubfach

Expand Down
14 changes: 8 additions & 6 deletions tests/errmsgs/treportunused.nim
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ treportunused.nim(30, 5) Hint: 's8' is declared but not used [XDeclaredButNotUse
treportunused.nim(31, 5) Hint: 's9' is declared but not used [XDeclaredButNotUsed]
treportunused.nim(32, 6) Hint: 's10' is declared but not used [XDeclaredButNotUsed]
treportunused.nim(33, 6) Hint: 's11' is declared but not used [XDeclaredButNotUsed]
treportunused.nim(37, 3) Hint: 'v0.99' is declared but not used [XDeclaredButNotUsed]
treportunused.nim(38, 3) Hint: 'v0.99.99' is declared but not used [XDeclaredButNotUsed]
'''
action: compile
"""

#treportunused.nim(37, 3) Hint: 'v0.99' is declared but not used [XDeclaredButNotUsed]
#treportunused.nim(38, 3) Hint: 'v0.99.99' is declared but not used [XDeclaredButNotUsed]
# bug #9764
iterator s1(a:string): int = discard
iterator s2(): int = discard
Expand All @@ -32,7 +32,9 @@ var s9: int
type s10 = object
type s11 = type(1.2)

# https://github.com/nim-lang/Nim/issues/14407
let
`v0.99` = "0.99"
`v0.99.99` = "0.99.99"
when false:
# enabled again when Nim bootstraps with -d:nimFpRoundtrips
# https://github.com/nim-lang/Nim/issues/14407
let
`v0.99` = "0.99"
`v0.99.99` = "0.99.99"
1 change: 1 addition & 0 deletions tests/float/nim.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-d:nimFpRoundtrips
4 changes: 4 additions & 0 deletions tests/float/tfloats.nim
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ template main =
var a = 1.1'f32
doAssert $a == "1.1", $a # was failing

proc runtimeOnlyTests =
# enable for 'static' once -d:nimFpRoundtrips became the default
block: # bug #7717
proc test(f: float) =
let f2 = $f
Expand All @@ -82,3 +84,5 @@ template main =

static: main()
main()

runtimeOnlyTests()
6 changes: 3 additions & 3 deletions tests/stdlib/tjson.nim
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ let jsonNode = %*mynode
doAssert $jsonNode == """{"kind":"P","pChildren":[{"kind":"Text","textStr":"mychild"},{"kind":"Br"}]}"""
doAssert $jsonNode.to(ContentNode) == """(kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])"""

block: # bug #17383
when defined(nimFpRoundtrips): # bug #17383
testRoundtrip(int32.high): "2147483647"
testRoundtrip(uint32.high): "4294967295"
when int.sizeof == 4:
Expand All @@ -316,7 +316,7 @@ block: # bug #17383
testRoundtrip(int64.high): "9223372036854775807"
testRoundtrip(uint64.high): "18446744073709551615"

block: # bug #18007
when defined(nimFpRoundtrips): # bug #18007
testRoundtrip([NaN, Inf, -Inf, 0.0, -0.0, 1.0]): """["nan","inf","-inf",0.0,-0.0,1.0]"""
# pending https://github.com/nim-lang/Nim/issues/18025 use:
# testRoundtrip([float32(NaN), Inf, -Inf, 0.0, -0.0, 1.0])
Expand All @@ -332,7 +332,7 @@ block: # bug #18007
testRoundtripVal(0.0): "0.0"
testRoundtripVal(-0.0): "-0.0"

block: # bug #15397, bug #13196
when defined(nimFpRoundtrips): # bug #15397, bug #13196
testRoundtripVal(1.0 + epsilon(float64)): "1.0000000000000002"
testRoundtripVal(0.12345678901234567890123456789): "0.12345678901234568"

Expand Down
21 changes: 11 additions & 10 deletions tests/stdlib/tjsonutils.nim
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ proc `$`(a: MyEnum): string =
if a == me2: "me2Modif"
else: system.`$`(a)

template fn() =
template fn() =
block: # toJson, jsonTo
type Foo = distinct float
testRoundtrip('x', """120""")
Expand Down Expand Up @@ -161,15 +161,16 @@ template fn() =
doAssert b[2].signbit
doAssert not b[3].signbit

block: # bug #15397, bug #13196
let a = 0.1
let x = 0.12345678901234567890123456789
let b = (a + 0.2, 0.3, x)
testRoundtripVal(b): "[0.30000000000000004,0.3,0.12345678901234568]"
when defined(nimFpRoundtrips):
block: # bug #15397, bug #13196
let a = 0.1
let x = 0.12345678901234567890123456789
let b = (a + 0.2, 0.3, x)
testRoundtripVal(b): "[0.30000000000000004,0.3,0.12345678901234568]"

testRoundtripVal(0.12345678901234567890123456789): "0.12345678901234568"
testRoundtripVal(epsilon(float64)): "2.220446049250313e-16"
testRoundtripVal(1.0 + epsilon(float64)): "1.0000000000000002"
testRoundtripVal(0.12345678901234567890123456789): "0.12345678901234568"
testRoundtripVal(epsilon(float64)): "2.220446049250313e-16"
testRoundtripVal(1.0 + epsilon(float64)): "1.0000000000000002"

block: # case object
type Foo = object
Expand Down Expand Up @@ -433,7 +434,7 @@ template fn() =
"""{"b": true, "bt": false, "btf": "test"}"""
testRoundtrip(Variant(b: true, bt: true, btt: 'c')):
"""{"b": true, "bt": true, "btt": "c"}"""

# TODO: Add additional tests with missing and extra JSON keys, both when
# allowed and forbidden analogous to the tests for the not nested
# variant objects.
Expand Down