mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 14:00:35 +00:00
fixes another effect inference bug [backport:1.6] (#19100)
* fixes another effect inference bug [backport:1.6]
This commit is contained in:
@@ -733,7 +733,7 @@ when defined(windows) or defined(nimdoc):
|
||||
|
||||
proc acceptAddr*(socket: AsyncFD, flags = {SocketFlag.SafeDisconn},
|
||||
inheritable = defined(nimInheritHandles)):
|
||||
owned(Future[tuple[address: string, client: AsyncFD]]) =
|
||||
owned(Future[tuple[address: string, client: AsyncFD]]) {.gcsafe.} =
|
||||
## Accepts a new connection. Returns a future containing the client socket
|
||||
## corresponding to that connection and the remote address of the client.
|
||||
## The future will complete when the connection is successfully accepted.
|
||||
@@ -800,7 +800,7 @@ when defined(windows) or defined(nimdoc):
|
||||
|
||||
var ol = newCustom()
|
||||
ol.data = CompletionData(fd: socket, cb:
|
||||
proc (fd: AsyncFD, bytesCount: DWORD, errcode: OSErrorCode) =
|
||||
proc (fd: AsyncFD, bytesCount: DWORD, errcode: OSErrorCode) {.gcsafe.} =
|
||||
if not retFuture.finished:
|
||||
if errcode == OSErrorCode(-1):
|
||||
completeAccept()
|
||||
|
||||
@@ -437,7 +437,7 @@ macro `%*`*(x: untyped): untyped =
|
||||
## `%` for every element.
|
||||
result = toJsonImpl(x)
|
||||
|
||||
proc `==`*(a, b: JsonNode): bool =
|
||||
proc `==`*(a, b: JsonNode): bool {.noSideEffect.} =
|
||||
## Check two nodes for equality
|
||||
if a.isNil:
|
||||
if b.isNil: return true
|
||||
@@ -464,12 +464,16 @@ proc `==`*(a, b: JsonNode): bool =
|
||||
if a.fields.len != b.fields.len: return false
|
||||
for key, val in a.fields:
|
||||
if not b.fields.hasKey(key): return false
|
||||
if b.fields[key] != val: return false
|
||||
when defined(nimHasEffectsOf):
|
||||
{.noSideEffect.}:
|
||||
if b.fields[key] != val: return false
|
||||
else:
|
||||
if b.fields[key] != val: return false
|
||||
result = true
|
||||
|
||||
proc hash*(n: OrderedTable[string, JsonNode]): Hash {.noSideEffect.}
|
||||
|
||||
proc hash*(n: JsonNode): Hash =
|
||||
proc hash*(n: JsonNode): Hash {.noSideEffect.} =
|
||||
## Compute the hash for a JSON node
|
||||
case n.kind
|
||||
of JArray:
|
||||
|
||||
@@ -354,7 +354,7 @@ var onUnhandledException*: (proc (errorMsg: string) {.
|
||||
## The default is to write a stacktrace to `stderr` and then call `quit(1)`.
|
||||
## Unstable API.
|
||||
|
||||
proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
|
||||
proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy, gcsafe.} =
|
||||
when hasSomeStackTrace:
|
||||
var buf = newStringOfCap(2000)
|
||||
if e.trace.len == 0:
|
||||
@@ -362,7 +362,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
|
||||
else:
|
||||
var trace = $e.trace
|
||||
add(buf, trace)
|
||||
`=destroy`(trace)
|
||||
{.gcsafe.}:
|
||||
`=destroy`(trace)
|
||||
add(buf, "Error: unhandled exception: ")
|
||||
add(buf, e.msg)
|
||||
add(buf, " [")
|
||||
@@ -373,7 +374,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
|
||||
onUnhandledException(buf)
|
||||
else:
|
||||
showErrorMessage2(buf)
|
||||
`=destroy`(buf)
|
||||
{.gcsafe.}:
|
||||
`=destroy`(buf)
|
||||
else:
|
||||
# ugly, but avoids heap allocations :-)
|
||||
template xadd(buf, s, slen) =
|
||||
@@ -387,7 +389,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
|
||||
if e.trace.len != 0:
|
||||
var trace = $e.trace
|
||||
add(buf, trace)
|
||||
`=destroy`(trace)
|
||||
{.gcsafe.}:
|
||||
`=destroy`(trace)
|
||||
add(buf, "Error: unhandled exception: ")
|
||||
add(buf, e.msg)
|
||||
add(buf, " [")
|
||||
@@ -398,7 +401,7 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
|
||||
else:
|
||||
showErrorMessage(buf.addr, L)
|
||||
|
||||
proc reportUnhandledError(e: ref Exception) {.nodestroy.} =
|
||||
proc reportUnhandledError(e: ref Exception) {.nodestroy, gcsafe.} =
|
||||
if unhandledExceptionHook != nil:
|
||||
unhandledExceptionHook(e)
|
||||
when hostOS != "any":
|
||||
|
||||
@@ -73,7 +73,7 @@ proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize, elemAlign: int): poin
|
||||
q.cap = newCap
|
||||
result = q
|
||||
|
||||
proc shrink*[T](x: var seq[T]; newLen: Natural) =
|
||||
proc shrink*[T](x: var seq[T]; newLen: Natural) {.tags: [].} =
|
||||
when nimvm:
|
||||
setLen(x, newLen)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user