fixes #22254; fixes #22253; stricteffects bugs on recursive calls (#22294)

This commit is contained in:
ringabout
2023-07-19 21:20:41 +08:00
committed by GitHub
parent 0d3bde95f5
commit 5ed44e1ec4
2 changed files with 14 additions and 2 deletions

View File

@@ -438,7 +438,7 @@ macro `%*`*(x: untyped): untyped =
## `%` for every element.
result = toJsonImpl(x)
proc `==`*(a, b: JsonNode): bool {.noSideEffect.} =
proc `==`*(a, b: JsonNode): bool {.noSideEffect, raises: [].} =
## Check two nodes for equality
if a.isNil:
if b.isNil: return true
@@ -458,7 +458,8 @@ proc `==`*(a, b: JsonNode): bool {.noSideEffect.} =
of JNull:
result = true
of JArray:
result = a.elems == b.elems
{.cast(raises: []).}: # bug #19303
result = a.elems == b.elems
of JObject:
# we cannot use OrderedTable's equality here as
# the order does not matter for equality here.

View File

@@ -44,3 +44,14 @@ proc fail() = discard
f1()
f2()
import std/json
# bug #22254
proc senri(a, b: seq[JsonNode]) {.raises: [].} = discard a == b
# bug #22253
proc serika() {.raises: [].} = discard default(JsonNode) == nil
senri(@[newJBool(true)], @[newJBool(false)])
serika()