mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-15 23:54:19 +00:00
fixes #22898 In these cases, the tables/sets are clears or elements are deleted from them. It's reasonable to suppress warnings because the value is not accessed anymore, which means it's safe to ignore the warnings.
This commit is contained in:
@@ -87,7 +87,9 @@ proc exclImpl[A](s: var HashSet[A], key: A): bool {.inline.} =
|
||||
var j = i # The correctness of this depends on (h+1) in nextTry,
|
||||
var r = j # though may be adaptable to other simple sequences.
|
||||
s.data[i].hcode = 0 # mark current EMPTY
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
reset(s.data[i].key)
|
||||
{.pop.}
|
||||
doWhile((i >= r and r > j) or (r > j and j > i) or (j > i and i >= r)):
|
||||
i = (i + 1) and msk # increment mod table size
|
||||
if isEmpty(s.data[i].hcode): # end of collision cluster; So all done
|
||||
|
||||
@@ -382,7 +382,9 @@ proc clear*[A](s: var HashSet[A]) =
|
||||
s.counter = 0
|
||||
for i in 0 ..< s.data.len:
|
||||
s.data[i].hcode = 0
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
reset(s.data[i].key)
|
||||
{.pop.}
|
||||
|
||||
|
||||
proc union*[A](s1, s2: HashSet[A]): HashSet[A] =
|
||||
@@ -816,7 +818,9 @@ proc clear*[A](s: var OrderedSet[A]) =
|
||||
for i in 0 ..< s.data.len:
|
||||
s.data[i].hcode = 0
|
||||
s.data[i].next = 0
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
reset(s.data[i].key)
|
||||
{.pop.}
|
||||
|
||||
proc len*[A](s: OrderedSet[A]): int {.inline.} =
|
||||
## Returns the number of elements in `s`.
|
||||
|
||||
@@ -119,8 +119,10 @@ template delImplIdx(t, i, makeEmpty, cellEmpty, cellHash) =
|
||||
var j = i # The correctness of this depends on (h+1) in nextTry
|
||||
var r = j # though may be adaptable to other simple sequences.
|
||||
makeEmpty(i) # mark current EMPTY
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
reset(t.data[i].key)
|
||||
reset(t.data[i].val)
|
||||
{.pop.}
|
||||
while true:
|
||||
i = (i + 1) and msk # increment mod table size
|
||||
if cellEmpty(i): # end of collision cluster; So all done
|
||||
@@ -151,8 +153,10 @@ template clearImpl() {.dirty.} =
|
||||
for i in 0 ..< t.dataLen:
|
||||
when compiles(t.data[i].hcode): # CountTable records don't contain a hcode
|
||||
t.data[i].hcode = 0
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
reset(t.data[i].key)
|
||||
reset(t.data[i].val)
|
||||
{.pop.}
|
||||
t.counter = 0
|
||||
|
||||
template ctAnd(a, b): bool =
|
||||
|
||||
@@ -911,18 +911,14 @@ proc default*[T](_: typedesc[T]): T {.magic: "Default", noSideEffect.} =
|
||||
proc reset*[T](obj: var T) {.noSideEffect.} =
|
||||
## Resets an object `obj` to its default value.
|
||||
when nimvm:
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
obj = default(typeof(obj))
|
||||
{.pop.}
|
||||
else:
|
||||
when defined(gcDestructors):
|
||||
{.cast(noSideEffect), cast(raises: []), cast(tags: []).}:
|
||||
`=destroy`(obj)
|
||||
`=wasMoved`(obj)
|
||||
else:
|
||||
{.push warning[UnsafeDefault]:off.}
|
||||
obj = default(typeof(obj))
|
||||
{.pop.}
|
||||
|
||||
proc setLen*[T](s: var seq[T], newlen: Natural) {.
|
||||
magic: "SetLengthSeq", noSideEffect, nodestroy.}
|
||||
|
||||
Reference in New Issue
Block a user