diff --git a/lib/impure/db_sqlite.nim b/lib/impure/db_sqlite.nim index b600576df1f0f..8bc1f1410e21e 100644 --- a/lib/impure/db_sqlite.nim +++ b/lib/impure/db_sqlite.nim @@ -121,7 +121,7 @@ ## var id = 1 ## ## Data needs to be converted to seq[byte] to be interpreted as binary by bindParams ## var dbuf = newSeq[byte](orig.len*sizeof(float64)) -## copyMem(unsafeAddr(dbuf[0]), unsafeAddr(orig[0]), dbuf.len) +## copyMem(addr(dbuf[0]), addr(orig[0]), dbuf.len) ## ## ## Use prepared statement to insert binary data into database ## var insertStmt = db.prepare("INSERT INTO test (id, data) VALUES (?, ?)") @@ -138,7 +138,7 @@ ## let seqSize = int(dataTest.len*sizeof(byte)/sizeof(float64)) ## ## Copy binary string data in dataTest into a seq ## var res: seq[float64] = newSeq[float64](seqSize) -## copyMem(unsafeAddr(res[0]), addr(dataTest[0]), dataTest.len) +## copyMem(addr(res[0]), addr(dataTest[0]), dataTest.len) ## ## ## Check datas obtained is identical ## doAssert res == orig @@ -827,7 +827,7 @@ proc bindParam*(ps: SqlPrepared, paramIdx: int,val: openArray[byte], copy = true ## binds a blob to the specified paramIndex. ## if copy is true then SQLite makes its own private copy of the data immediately let len = val.len - if bind_blob(ps.PStmt, paramIdx.int32, val[0].unsafeAddr, len.int32, if copy: SQLITE_TRANSIENT else: SQLITE_STATIC) != SQLITE_OK: + if bind_blob(ps.PStmt, paramIdx.int32, val[0].addr, len.int32, if copy: SQLITE_TRANSIENT else: SQLITE_STATIC) != SQLITE_OK: dbBindParamError(paramIdx, val) macro bindParams*(ps: SqlPrepared, params: varargs[untyped]): untyped {.since: (1, 3).} = diff --git a/lib/impure/re.nim b/lib/impure/re.nim index 4eacf0091cf6a..548dfc94384d1 100644 --- a/lib/impure/re.nim +++ b/lib/impure/re.nim @@ -122,7 +122,7 @@ proc bufSubstr(b: cstring, sPos, ePos: int): string {.inline.} = ## Don't assume cstring is '\0' terminated let sz = ePos - sPos result = newString(sz+1) - copyMem(addr(result[0]), unsafeAddr(b[sPos]), sz) + copyMem(addr(result[0]), addr(b[sPos]), sz) result.setLen(sz) proc matchOrFind(buf: cstring, pattern: Regex, matches: var openArray[string], @@ -427,7 +427,7 @@ iterator findAll*(buf: cstring, pattern: Regex, start = 0, bufSize: int): string let b = rawMatches[1] if a == b and a == i: break var str = newString(b-a) - copyMem(str[0].addr, unsafeAddr(buf[a]), b-a) + copyMem(str[0].addr, addr(buf[a]), b-a) yield str i = b diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim index 5e2a8d98e7458..7e2675b20d589 100644 --- a/lib/pure/asyncdispatch.nim +++ b/lib/pure/asyncdispatch.nim @@ -1920,7 +1920,7 @@ proc send*(socket: AsyncFD, data: string, ## data has been sent. var retFuture = newFuture[void]("send") if data.len > 0: - let sendFut = socket.send(unsafeAddr data[0], data.len, flags) + let sendFut = socket.send(addr data[0], data.len, flags) sendFut.callback = proc () = keepAlive(data) diff --git a/lib/pure/base64.nim b/lib/pure/base64.nim index 513ec58269594..1052073d471cc 100644 --- a/lib/pure/base64.nim +++ b/lib/pure/base64.nim @@ -138,7 +138,7 @@ template encodeImpl() {.dirty.} = encodeInternal(s, lookupTableVM) else: block: - let lookupTable = if safe: unsafeAddr(cb64safe) else: unsafeAddr(cb64) + let lookupTable = if safe: addr(cb64safe) else: addr(cb64) encodeInternal(s, lookupTable) proc encode*[T: SomeInteger|char](s: openArray[T], safe = false): string = diff --git a/lib/pure/hashes.nim b/lib/pure/hashes.nim index d9f534670296b..2df5970103ca6 100644 --- a/lib/pure/hashes.nim +++ b/lib/pure/hashes.nim @@ -324,7 +324,7 @@ proc murmurHash(x: openArray[byte]): Hash = dec j k1 = (k1 shl 8) or (ord(x[i+j])).uint32 else: - k1 = cast[ptr uint32](unsafeAddr x[i])[] + k1 = cast[ptr uint32](addr x[i])[] inc i, stepSize k1 = imul(k1, c1) diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim index eb0514a8ff1f9..a5b7b8c9d020b 100644 --- a/lib/pure/nativesockets.nim +++ b/lib/pure/nativesockets.nim @@ -663,7 +663,7 @@ when useNimNetLite: return "" proc sockAddrToStr(sa: var Sockaddr_in | var Sockaddr_in6): string = - result = sockAddrToStr(cast[ptr SockAddr](unsafeAddr(sa))) + result = sockAddrToStr(cast[ptr SockAddr](addr(sa))) proc getAddrString*(sockAddr: ptr SockAddr): string = result = sockAddrToStr(sockAddr) diff --git a/lib/pure/net.nim b/lib/pure/net.nim index c1d4c622862ac..7303e3d756bcd 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -484,14 +484,14 @@ proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage, let s = cast[ptr Sockaddr_in](addr sa) s.sin_family = typeof(s.sin_family)(toInt(AF_INET)) s.sin_port = port - copyMem(addr s.sin_addr, unsafeAddr address.address_v4[0], + copyMem(addr s.sin_addr, addr address.address_v4[0], sizeof(s.sin_addr)) of IpAddressFamily.IPv6: sl = sizeof(Sockaddr_in6).SockLen let s = cast[ptr Sockaddr_in6](addr sa) s.sin6_family = typeof(s.sin6_family)(toInt(AF_INET6)) s.sin6_port = port - copyMem(addr s.sin6_addr, unsafeAddr address.address_v6[0], + copyMem(addr s.sin6_addr, addr address.address_v6[0], sizeof(s.sin6_addr)) proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: SockLen, @@ -516,7 +516,7 @@ proc fromSockAddr*(sa: Sockaddr_storage | SockAddr | Sockaddr_in | Sockaddr_in6, sl: SockLen, address: var IpAddress, port: var Port) {.inline.} = ## Converts `SockAddr` and `SockLen` to `IpAddress` and `Port`. Raises ## `ObjectConversionDefect` in case of invalid `sa` and `sl` arguments. - fromSockAddrAux(cast[ptr Sockaddr_storage](unsafeAddr sa), sl, address, port) + fromSockAddrAux(cast[ptr Sockaddr_storage](addr sa), sl, address, port) when defineSsl: CRYPTO_malloc_init() diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 7dc81148f6868..4020aa3746ac9 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -333,7 +333,7 @@ proc write*[T](s: Stream, x: T) = ## ## .. code-block:: Nim ## - ## s.writeData(s, unsafeAddr(x), sizeof(x)) + ## s.writeData(s, addr(x), sizeof(x)) runnableExamples: var strm = newStringStream("") strm.write("abcde") @@ -341,7 +341,7 @@ proc write*[T](s: Stream, x: T) = doAssert strm.readAll() == "abcde" strm.close() - writeData(s, unsafeAddr(x), sizeof(x)) + writeData(s, addr(x), sizeof(x)) proc write*(s: Stream, x: string) = ## Writes the string `x` to the stream `s`. No length field or @@ -1196,7 +1196,7 @@ else: # after 1.3 or JS not defined jsOrVmBlock: buffer[slice.a.. 0: - let found = c_memchr(s[start].unsafeAddr, sub, cast[csize_t](L)) + let found = c_memchr(s[start].addr, sub, cast[csize_t](L)) if not found.isNil: return cast[ByteAddress](found) -% cast[ByteAddress](s.cstring) else: @@ -1928,7 +1928,7 @@ func find*(s, sub: string, start: Natural = 0, last = 0): int {.rtl, else: when hasCStringBuiltin: if last == 0 and s.len > start: - let found = c_strstr(s[start].unsafeAddr, sub) + let found = c_strstr(s[start].addr, sub) if not found.isNil: result = cast[ByteAddress](found) -% cast[ByteAddress](s.cstring) else: diff --git a/lib/std/private/digitsutils.nim b/lib/std/private/digitsutils.nim index 588bcaec07fb2..ccd9ae04a004a 100644 --- a/lib/std/private/digitsutils.nim +++ b/lib/std/private/digitsutils.nim @@ -31,7 +31,7 @@ const proc utoa2Digits*(buf: var openArray[char]; pos: int; digits: uint32) {.inline.} = buf[pos] = digits100[2 * digits] buf[pos+1] = digits100[2 * digits + 1] - #copyMem(buf, unsafeAddr(digits100[2 * digits]), 2 * sizeof((char))) + #copyMem(buf, addr(digits100[2 * digits]), 2 * sizeof((char))) proc trailingZeros2Digits*(digits: uint32): int32 {.inline.} = return trailingZeros100[digits] @@ -49,7 +49,7 @@ func addChars[T](result: var string, x: T, start: int, n: int) {.inline.} = when defined(js) or defined(nimscript): impl else: {.noSideEffect.}: - copyMem result[old].addr, x[start].unsafeAddr, n + copyMem result[old].addr, x[start].addr, n func addChars[T](result: var string, x: T) {.inline.} = addChars(result, x, 0, x.len) diff --git a/lib/std/sha1.nim b/lib/std/sha1.nim index 120a81702fa21..b47c9b7950092 100644 --- a/lib/std/sha1.nim +++ b/lib/std/sha1.nim @@ -152,7 +152,7 @@ proc update*(ctx: var Sha1State, data: openArray[char]) = # Gather 64-bytes worth of data in order to perform a round with the leftover # data we had stored (but not processed yet) if len > 64 - i: - copyMem(addr ctx.buf[i], unsafeAddr data[j], 64 - i) + copyMem(addr ctx.buf[i], addr data[j], 64 - i) len -= 64 - i j += 64 - i transform(ctx) @@ -161,7 +161,7 @@ proc update*(ctx: var Sha1State, data: openArray[char]) = i = 0 # Process the bulk of the payload while len >= 64: - copyMem(addr ctx.buf[0], unsafeAddr data[j], 64) + copyMem(addr ctx.buf[0], addr data[j], 64) len -= 64 j += 64 transform(ctx) diff --git a/lib/system/ansi_c.nim b/lib/system/ansi_c.nim index 23fb9fdef0d7e..8af48c36ed0d8 100644 --- a/lib/system/ansi_c.nim +++ b/lib/system/ansi_c.nim @@ -111,11 +111,11 @@ elif defined(nimBuiltinSetjmp): proc c_builtin_longjmp(jmpb: ptr pointer, retval: cint) {. importc: "__builtin_longjmp", nodecl.} # The second parameter needs to be 1 and sometimes the C/C++ compiler checks it. - c_builtin_longjmp(unsafeAddr jmpb[0], 1) + c_builtin_longjmp(addr jmpb[0], 1) proc c_setjmp*(jmpb: C_JmpBuf): cint = proc c_builtin_setjmp(jmpb: ptr pointer): cint {. importc: "__builtin_setjmp", nodecl.} - c_builtin_setjmp(unsafeAddr jmpb[0]) + c_builtin_setjmp(addr jmpb[0]) elif defined(nimRawSetjmp) and not defined(nimStdSetjmp): when defined(windows): # No `_longjmp()` on Windows. diff --git a/lib/system/atomics.nim b/lib/system/atomics.nim index 8d29c287dedeb..1f25d0b241261 100644 --- a/lib/system/atomics.nim +++ b/lib/system/atomics.nim @@ -308,7 +308,7 @@ static int __tcc_cas(int *ptr, int oldVal, int newVal) tcc_cas(cast[ptr int](p), cast[int](oldValue), cast[int](newValue)) elif declared(atomicCompareExchangeN): proc cas*[T: bool|int|ptr](p: ptr T; oldValue, newValue: T): bool = - atomicCompareExchangeN(p, oldValue.unsafeAddr, newValue, false, ATOMIC_SEQ_CST, ATOMIC_SEQ_CST) + atomicCompareExchangeN(p, oldValue.addr, newValue, false, ATOMIC_SEQ_CST, ATOMIC_SEQ_CST) else: # this is valid for GCC and Intel C++ proc cas*[T: bool|int|ptr](p: ptr T; oldValue, newValue: T): bool diff --git a/lib/system/channels_builtin.nim b/lib/system/channels_builtin.nim index 30267e3752272..8a920a06ff545 100644 --- a/lib/system/channels_builtin.nim +++ b/lib/system/channels_builtin.nim @@ -366,7 +366,7 @@ proc sendImpl(q: PRawChannel, typ: PNimType, msg: pointer, noBlock: bool): bool proc send*[TMsg](c: var Channel[TMsg], msg: sink TMsg) {.inline.} = ## Sends a message to a thread. `msg` is deeply copied. - discard sendImpl(cast[PRawChannel](addr c), cast[PNimType](getTypeInfo(msg)), unsafeAddr(msg), false) + discard sendImpl(cast[PRawChannel](addr c), cast[PNimType](getTypeInfo(msg)), addr(msg), false) when defined(gcDestructors): wasMoved(msg) @@ -377,7 +377,7 @@ proc trySend*[TMsg](c: var Channel[TMsg], msg: sink TMsg): bool {.inline.} = ## ## Returns `false` if the message was not sent because number of pending items ## in the channel exceeded `maxItems`. - result = sendImpl(cast[PRawChannel](addr c), cast[PNimType](getTypeInfo(msg)), unsafeAddr(msg), true) + result = sendImpl(cast[PRawChannel](addr c), cast[PNimType](getTypeInfo(msg)), addr(msg), true) when defined(gcDestructors): if result: wasMoved(msg) diff --git a/lib/system/io.nim b/lib/system/io.nim index 661d1a9ba1fd0..3f64a851e7423 100644 --- a/lib/system/io.nim +++ b/lib/system/io.nim @@ -251,7 +251,7 @@ when defined(windows): break inc i else: - let w = c_fprintf(f, "%s", unsafeAddr s[i]) + let w = c_fprintf(f, "%s", addr s[i]) if w <= 0: if doRaise: raiseEIO("cannot write string to file") break @@ -896,7 +896,7 @@ proc writeFile*(filename: string, content: openArray[byte]) {.since: (1, 1).} = var f: File = nil if open(f, filename, fmWrite): try: - f.writeBuffer(unsafeAddr content[0], content.len) + f.writeBuffer(addr content[0], content.len) finally: close(f) else: diff --git a/lib/system/repr_v2.nim b/lib/system/repr_v2.nim index 6ab5f3c3f744c..25290b9c5bb56 100644 --- a/lib/system/repr_v2.nim +++ b/lib/system/repr_v2.nim @@ -90,7 +90,7 @@ proc repr*(p: pointer): string = proc repr*(p: proc): string = ## repr of a proc as its address - repr(cast[ptr pointer](unsafeAddr p)[]) + repr(cast[ptr pointer](addr p)[]) template repr*(x: distinct): string = repr(distinctBase(typeof(x))(x)) diff --git a/lib/system/sets.nim b/lib/system/sets.nim index 103c8d343ebe2..94e1dd2edbda3 100644 --- a/lib/system/sets.nim +++ b/lib/system/sets.nim @@ -18,7 +18,7 @@ proc cardSet(s: NimSet, len: int): int {.compilerproc, inline.} = result = 0 when defined(x86) or defined(amd64): while i < len - 8: - inc(result, countBits64((cast[ptr uint64](s[i].unsafeAddr))[])) + inc(result, countBits64((cast[ptr uint64](s[i].addr))[])) inc(i, 8) while i < len: diff --git a/lib/system/strmantle.nim b/lib/system/strmantle.nim index 9cf4f9e55f75c..db8a9f6de30fe 100644 --- a/lib/system/strmantle.nim +++ b/lib/system/strmantle.nim @@ -17,7 +17,7 @@ proc cmpStrings(a, b: string): int {.inline, compilerproc.} = let blen = b.len let minlen = min(alen, blen) if minlen > 0: - result = c_memcmp(unsafeAddr a[0], unsafeAddr b[0], cast[csize_t](minlen)) + result = c_memcmp(addr a[0], addr b[0], cast[csize_t](minlen)) if result == 0: result = alen - blen else: @@ -28,7 +28,7 @@ proc eqStrings(a, b: string): bool {.inline, compilerproc.} = let blen = b.len if alen == blen: if alen == 0: return true - return equalMem(unsafeAddr(a[0]), unsafeAddr(b[0]), alen) + return equalMem(addr(a[0]), addr(b[0]), alen) proc hashString(s: string): int {.compilerproc.} = # the compiler needs exactly the same hash function! diff --git a/lib/system/strs_v2.nim b/lib/system/strs_v2.nim index 6944cdc589dfa..45d3c630a6c4f 100644 --- a/lib/system/strs_v2.nim +++ b/lib/system/strs_v2.nim @@ -51,7 +51,7 @@ proc prepareAdd(s: var NimStringV2; addlen: int) {.compilerRtl.} = s.p.cap = newLen if s.len > 0: # we are about to append, so there is no need to copy the \0 terminator: - copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], min(s.len, newLen)) + copyMem(addr s.p.data[0], addr oldP.data[0], min(s.len, newLen)) else: let oldCap = s.p.cap and not strlitFlag if newLen > oldCap: @@ -80,7 +80,7 @@ proc toNimStr(str: cstring, len: int): NimStringV2 {.compilerproc.} = p.cap = len if len > 0: # we are about to append, so there is no need to copy the \0 terminator: - copyMem(unsafeAddr p.data[0], str, len) + copyMem(addr p.data[0], str, len) result = NimStringV2(len: len, p: p) proc cstrToNimstr(str: cstring): NimStringV2 {.compilerRtl.} = @@ -89,12 +89,12 @@ proc cstrToNimstr(str: cstring): NimStringV2 {.compilerRtl.} = proc nimToCStringConv(s: NimStringV2): cstring {.compilerproc, nonReloadable, inline.} = if s.len == 0: result = cstring"" - else: result = cstring(unsafeAddr s.p.data) + else: result = cstring(addr s.p.data) proc appendString(dest: var NimStringV2; src: NimStringV2) {.compilerproc, inline.} = if src.len > 0: # also copy the \0 terminator: - copyMem(unsafeAddr dest.p.data[dest.len], unsafeAddr src.p.data[0], src.len+1) + copyMem(addr dest.p.data[dest.len], addr src.p.data[0], src.len+1) inc dest.len, src.len proc appendChar(dest: var NimStringV2; c: char) {.compilerproc, inline.} = @@ -153,7 +153,7 @@ proc nimAsgnStrV2(a: var NimStringV2, b: NimStringV2) {.compilerRtl.} = a.p = cast[ptr NimStrPayload](alloc0(contentSize(b.len))) a.p.cap = b.len a.len = b.len - copyMem(unsafeAddr a.p.data[0], unsafeAddr b.p.data[0], b.len+1) + copyMem(addr a.p.data[0], addr b.p.data[0], b.len+1) proc nimPrepareStrMutationImpl(s: var NimStringV2) = let oldP = s.p @@ -163,7 +163,7 @@ proc nimPrepareStrMutationImpl(s: var NimStringV2) = else: s.p = cast[ptr NimStrPayload](alloc0(contentSize(s.len))) s.p.cap = s.len - copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], s.len+1) + copyMem(addr s.p.data[0], addr oldP.data[0], s.len+1) proc nimPrepareStrMutationV2(s: var NimStringV2) {.compilerRtl, inline.} = if s.p != nil and (s.p.cap and strlitFlag) == strlitFlag: @@ -173,5 +173,5 @@ proc prepareMutation*(s: var string) {.inline.} = # string literals are "copy on write", so you need to call # `prepareMutation` before modifying the strings via `addr`. {.cast(noSideEffect).}: - let s = unsafeAddr s + let s = addr s nimPrepareStrMutationV2(cast[ptr NimStringV2](s)[]) diff --git a/lib/system/sysstr.nim b/lib/system/sysstr.nim index 49fff41e9ee7e..19458368f2337 100644 --- a/lib/system/sysstr.nim +++ b/lib/system/sysstr.nim @@ -163,7 +163,7 @@ proc addChar(s: NimString, c: char): NimString = when defined(nimIncrSeqV3): result = rawNewStringNoInit(r) result.len = s.len - copyMem(addr result.data[0], unsafeAddr(s.data[0]), s.len+1) + copyMem(addr result.data[0], addr(s.data[0]), s.len+1) else: result = cast[NimString](growObj(result, sizeof(TGenericSeq) + r + 1)) @@ -213,7 +213,7 @@ proc resizeString(dest: NimString, addlen: int): NimString {.compilerRtl.} = when defined(nimIncrSeqV3): result = rawNewStringNoInit(sp) result.len = dest.len - copyMem(addr result.data[0], unsafeAddr(dest.data[0]), dest.len+1) + copyMem(addr result.data[0], addr(dest.data[0]), dest.len+1) else: result = cast[NimString](growObj(dest, sizeof(TGenericSeq) + sp + 1)) result.reserved = sp @@ -242,7 +242,7 @@ proc setLengthStr(s: NimString, newLen: int): NimString {.compilerRtl.} = when defined(nimIncrSeqV3): result = rawNewStringNoInit(sp) result.len = s.len - copyMem(addr result.data[0], unsafeAddr(s.data[0]), s.len+1) + copyMem(addr result.data[0], addr(s.data[0]), s.len+1) zeroMem(addr result.data[s.len], newLen - s.len) result.reserved = sp else: