mirror of
https://github.com/nim-lang/Nim.git
synced 2026-05-01 19:44:44 +00:00
replace benign with gcsafe (#25527)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
(cherry picked from commit 15c6249f2c)
This commit is contained in:
@@ -725,7 +725,7 @@ proc getSmallChunk(a: var MemRegion): PSmallChunk =
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
when not defined(gcDestructors):
|
||||
proc isAllocatedPtr(a: MemRegion, p: pointer): bool {.benign.}
|
||||
proc isAllocatedPtr(a: MemRegion, p: pointer): bool {.gcsafe.}
|
||||
|
||||
when true:
|
||||
template allocInv(a: MemRegion): bool = true
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
include seqs_v2_reimpl
|
||||
|
||||
proc genericResetAux(dest: pointer, n: ptr TNimNode) {.benign.}
|
||||
proc genericResetAux(dest: pointer, n: ptr TNimNode) {.gcsafe.}
|
||||
|
||||
proc genericAssignAux(dest, src: pointer, mt: PNimType, shallow: bool) {.benign.}
|
||||
proc genericAssignAux(dest, src: pointer, mt: PNimType, shallow: bool) {.gcsafe.}
|
||||
proc genericAssignAux(dest, src: pointer, n: ptr TNimNode,
|
||||
shallow: bool) {.benign.} =
|
||||
shallow: bool) {.gcsafe.} =
|
||||
var
|
||||
d = cast[int](dest)
|
||||
s = cast[int](src)
|
||||
@@ -187,8 +187,8 @@ proc genericAssignOpenArray(dest, src: pointer, len: int,
|
||||
genericAssign(cast[pointer](d +% i *% mt.base.size),
|
||||
cast[pointer](s +% i *% mt.base.size), mt.base)
|
||||
|
||||
proc objectInit(dest: pointer, typ: PNimType) {.compilerproc, benign.}
|
||||
proc objectInitAux(dest: pointer, n: ptr TNimNode) {.benign.} =
|
||||
proc objectInit(dest: pointer, typ: PNimType) {.compilerproc, gcsafe.}
|
||||
proc objectInitAux(dest: pointer, n: ptr TNimNode) {.gcsafe.} =
|
||||
var d = cast[int](dest)
|
||||
case n.kind
|
||||
of nkNone: sysAssert(false, "objectInitAux")
|
||||
@@ -224,7 +224,7 @@ proc objectInit(dest: pointer, typ: PNimType) =
|
||||
|
||||
# ---------------------- assign zero -----------------------------------------
|
||||
|
||||
proc genericReset(dest: pointer, mt: PNimType) {.compilerproc, benign.}
|
||||
proc genericReset(dest: pointer, mt: PNimType) {.compilerproc, gcsafe.}
|
||||
proc genericResetAux(dest: pointer, n: ptr TNimNode) =
|
||||
var d = cast[int](dest)
|
||||
case n.kind
|
||||
|
||||
@@ -51,7 +51,7 @@ proc split(t: var PAvlNode) =
|
||||
t.link[0] = temp
|
||||
inc t.level
|
||||
|
||||
proc add(a: var MemRegion, t: var PAvlNode, key, upperBound: int) {.benign.} =
|
||||
proc add(a: var MemRegion, t: var PAvlNode, key, upperBound: int) {.gcsafe.} =
|
||||
if t.isBottom:
|
||||
t = allocAvlNode(a, key, upperBound)
|
||||
else:
|
||||
@@ -70,7 +70,7 @@ proc add(a: var MemRegion, t: var PAvlNode, key, upperBound: int) {.benign.} =
|
||||
skew(t)
|
||||
split(t)
|
||||
|
||||
proc del(a: var MemRegion, t: var PAvlNode, x: int) {.benign.} =
|
||||
proc del(a: var MemRegion, t: var PAvlNode, x: int) {.gcsafe.} =
|
||||
if isBottom(t): return
|
||||
a.last = t
|
||||
if x <% t.key:
|
||||
|
||||
@@ -181,10 +181,10 @@ proc deinitRawChannel(p: pointer) =
|
||||
|
||||
when not usesDestructors:
|
||||
proc storeAux(dest, src: pointer, mt: PNimType, t: PRawChannel,
|
||||
mode: LoadStoreMode) {.benign.}
|
||||
mode: LoadStoreMode) {.gcsafe.}
|
||||
|
||||
proc storeAux(dest, src: pointer, n: ptr TNimNode, t: PRawChannel,
|
||||
mode: LoadStoreMode) {.benign.} =
|
||||
mode: LoadStoreMode) {.gcsafe.} =
|
||||
var
|
||||
d = cast[int](dest)
|
||||
s = cast[int](src)
|
||||
|
||||
@@ -62,8 +62,8 @@ const
|
||||
colorMask = 0b011
|
||||
|
||||
type
|
||||
TraceProc = proc (p, env: pointer) {.nimcall, benign, raises: [].}
|
||||
DisposeProc = proc (p: pointer) {.nimcall, benign, raises: [].}
|
||||
TraceProc = proc (p, env: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
DisposeProc = proc (p: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
|
||||
template color(c): untyped = c.rc and colorMask
|
||||
template setColor(c, col) =
|
||||
|
||||
@@ -58,9 +58,9 @@ proc put(t: var PtrTable; key, val: pointer) =
|
||||
inc t.counter
|
||||
|
||||
proc genericDeepCopyAux(dest, src: pointer, mt: PNimType;
|
||||
tab: var PtrTable) {.benign.}
|
||||
tab: var PtrTable) {.gcsafe.}
|
||||
proc genericDeepCopyAux(dest, src: pointer, n: ptr TNimNode;
|
||||
tab: var PtrTable) {.benign.} =
|
||||
tab: var PtrTable) {.gcsafe.} =
|
||||
var
|
||||
d = cast[int](dest)
|
||||
s = cast[int](src)
|
||||
|
||||
@@ -16,7 +16,7 @@ import stacktraces
|
||||
const noStacktraceAvailable = "No stack traceback available\n"
|
||||
|
||||
var
|
||||
errorMessageWriter*: (proc(msg: string) {.tags: [WriteIOEffect], benign,
|
||||
errorMessageWriter*: (proc(msg: string) {.tags: [WriteIOEffect], gcsafe,
|
||||
nimcall, raises: [].})
|
||||
## Function that will be called
|
||||
## instead of `stdmsg.write` when printing stacktrace.
|
||||
@@ -65,10 +65,10 @@ proc showErrorMessage2(data: string) {.inline.} =
|
||||
# TODO showErrorMessage will turn it back to a string when a hook is set (!)
|
||||
showErrorMessage(data.cstring, data.len)
|
||||
|
||||
proc chckIndx(i, a, b: int): int {.inline, compilerproc, benign.}
|
||||
proc chckRange(i, a, b: int): int {.inline, compilerproc, benign.}
|
||||
proc chckRangeF(x, a, b: float): float {.inline, compilerproc, benign.}
|
||||
proc chckNil(p: pointer) {.noinline, compilerproc, benign.}
|
||||
proc chckIndx(i, a, b: int): int {.inline, compilerproc, gcsafe.}
|
||||
proc chckRange(i, a, b: int): int {.inline, compilerproc, gcsafe.}
|
||||
proc chckRangeF(x, a, b: float): float {.inline, compilerproc, gcsafe.}
|
||||
proc chckNil(p: pointer) {.noinline, compilerproc, gcsafe.}
|
||||
|
||||
type
|
||||
GcFrame = ptr GcFrameHeader
|
||||
@@ -657,7 +657,7 @@ when defined(cpp) and appType != "lib" and not gotoBasedExceptions and
|
||||
rawQuit 1
|
||||
|
||||
when not defined(noSignalHandler) and not defined(useNimRtl):
|
||||
type Sighandler = proc (a: cint) {.noconv, benign.}
|
||||
type Sighandler = proc (a: cint) {.noconv, gcsafe.}
|
||||
# xxx factor with ansi_c.CSighandlerT, posix.Sighandler
|
||||
|
||||
proc signalHandler(sign: cint) {.exportc: "signalHandler", noconv, raises: [].} =
|
||||
|
||||
@@ -76,7 +76,7 @@ const
|
||||
when withRealTime and not declared(getTicks):
|
||||
include "system/timers"
|
||||
when defined(memProfiler):
|
||||
proc nimProfile(requestedSize: int) {.benign.}
|
||||
proc nimProfile(requestedSize: int) {.gcsafe.}
|
||||
|
||||
when hasThreadSupport:
|
||||
import std/sharedlist
|
||||
@@ -97,7 +97,7 @@ type
|
||||
waZctDecRef, waPush
|
||||
#, waDebug
|
||||
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign, raises: [], gcsafe.}
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
# A ref type can have a finalizer that is called before the object's
|
||||
# storage is freed.
|
||||
|
||||
@@ -222,11 +222,11 @@ template gcTrace(cell, state: untyped) =
|
||||
when traceGC: traceCell(cell, state)
|
||||
|
||||
# forward declarations:
|
||||
proc collectCT(gch: var GcHeap) {.benign, raises: [].}
|
||||
proc isOnStack(p: pointer): bool {.noinline, benign, raises: [].}
|
||||
proc forAllChildren(cell: PCell, op: WalkOp) {.benign, raises: [].}
|
||||
proc doOperation(p: pointer, op: WalkOp) {.benign, raises: [].}
|
||||
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign, raises: [].}
|
||||
proc collectCT(gch: var GcHeap) {.gcsafe, raises: [].}
|
||||
proc isOnStack(p: pointer): bool {.noinline, gcsafe, raises: [].}
|
||||
proc forAllChildren(cell: PCell, op: WalkOp) {.gcsafe, raises: [].}
|
||||
proc doOperation(p: pointer, op: WalkOp) {.gcsafe, raises: [].}
|
||||
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.gcsafe, raises: [].}
|
||||
# we need the prototype here for debugging purposes
|
||||
|
||||
proc incRef(c: PCell) {.inline.} =
|
||||
@@ -338,7 +338,7 @@ proc cellsetReset(s: var CellSet) =
|
||||
|
||||
{.push stacktrace:off.}
|
||||
|
||||
proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: WalkOp) {.benign.} =
|
||||
proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: WalkOp) {.gcsafe.} =
|
||||
var d = cast[int](dest)
|
||||
case n.kind
|
||||
of nkSlot: forAllChildrenAux(cast[pointer](d +% n.offset), n.typ, op)
|
||||
@@ -687,7 +687,7 @@ proc doOperation(p: pointer, op: WalkOp) =
|
||||
proc nimGCvisit(d: pointer, op: int) {.compilerRtl, raises: [].} =
|
||||
doOperation(d, WalkOp(op))
|
||||
|
||||
proc collectZCT(gch: var GcHeap): bool {.benign, raises: [].}
|
||||
proc collectZCT(gch: var GcHeap): bool {.gcsafe, raises: [].}
|
||||
|
||||
proc collectCycles(gch: var GcHeap) {.raises: [].} =
|
||||
when hasThreadSupport:
|
||||
|
||||
@@ -457,7 +457,7 @@ proc deallocHeap*(runFinalizers = true; allowGcAfterwards = true) =
|
||||
initGC()
|
||||
|
||||
type
|
||||
GlobalMarkerProc = proc () {.nimcall, benign, raises: [].}
|
||||
GlobalMarkerProc = proc () {.nimcall, gcsafe, raises: [].}
|
||||
var
|
||||
globalMarkersLen {.exportc.}: int
|
||||
globalMarkers {.exportc.}: array[0..3499, GlobalMarkerProc]
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
## collectors etc.
|
||||
|
||||
type
|
||||
GlobalMarkerProc = proc () {.nimcall, benign, raises: [], tags: [].}
|
||||
GlobalMarkerProc = proc () {.nimcall, gcsafe, raises: [], tags: [].}
|
||||
var
|
||||
globalMarkersLen: int
|
||||
globalMarkers: array[0..3499, GlobalMarkerProc]
|
||||
|
||||
@@ -12,7 +12,7 @@ when hasAlloc:
|
||||
gcOptimizeSpace ## optimize for memory footprint
|
||||
|
||||
when hasAlloc and not defined(js) and not usesDestructors:
|
||||
proc GC_disable*() {.rtl, inl, benign, raises: [].}
|
||||
proc GC_disable*() {.rtl, inl, gcsafe, raises: [].}
|
||||
## Disables the GC. If called `n` times, `n` calls to `GC_enable`
|
||||
## are needed to reactivate the GC.
|
||||
##
|
||||
@@ -20,39 +20,39 @@ when hasAlloc and not defined(js) and not usesDestructors:
|
||||
## the mark and sweep phase with
|
||||
## `GC_disableMarkAndSweep <#GC_disableMarkAndSweep>`_.
|
||||
|
||||
proc GC_enable*() {.rtl, inl, benign, raises: [].}
|
||||
proc GC_enable*() {.rtl, inl, gcsafe, raises: [].}
|
||||
## Enables the GC again.
|
||||
|
||||
proc GC_fullCollect*() {.rtl, benign, raises: [].}
|
||||
proc GC_fullCollect*() {.rtl, gcsafe, raises: [].}
|
||||
## Forces a full garbage collection pass.
|
||||
## Ordinary code does not need to call this (and should not).
|
||||
|
||||
proc GC_enableMarkAndSweep*() {.rtl, benign, raises: [].}
|
||||
proc GC_disableMarkAndSweep*() {.rtl, benign, raises: [].}
|
||||
proc GC_enableMarkAndSweep*() {.rtl, gcsafe, raises: [].}
|
||||
proc GC_disableMarkAndSweep*() {.rtl, gcsafe, raises: [].}
|
||||
## The current implementation uses a reference counting garbage collector
|
||||
## with a seldomly run mark and sweep phase to free cycles. The mark and
|
||||
## sweep phase may take a long time and is not needed if the application
|
||||
## does not create cycles. Thus the mark and sweep phase can be deactivated
|
||||
## and activated separately from the rest of the GC.
|
||||
|
||||
proc GC_getStatistics*(): string {.rtl, benign, raises: [].}
|
||||
proc GC_getStatistics*(): string {.rtl, gcsafe, raises: [].}
|
||||
## Returns an informative string about the GC's activity. This may be useful
|
||||
## for tweaking.
|
||||
|
||||
proc GC_ref*[T](x: ref T) {.magic: "GCref", benign, raises: [].}
|
||||
proc GC_ref*[T](x: seq[T]) {.magic: "GCref", benign, raises: [].}
|
||||
proc GC_ref*(x: string) {.magic: "GCref", benign, raises: [].}
|
||||
proc GC_ref*[T](x: ref T) {.magic: "GCref", gcsafe, raises: [].}
|
||||
proc GC_ref*[T](x: seq[T]) {.magic: "GCref", gcsafe, raises: [].}
|
||||
proc GC_ref*(x: string) {.magic: "GCref", gcsafe, raises: [].}
|
||||
## Marks the object `x` as referenced, so that it will not be freed until
|
||||
## it is unmarked via `GC_unref`.
|
||||
## If called n-times for the same object `x`,
|
||||
## n calls to `GC_unref` are needed to unmark `x`.
|
||||
|
||||
proc GC_unref*[T](x: ref T) {.magic: "GCunref", benign, raises: [].}
|
||||
proc GC_unref*[T](x: seq[T]) {.magic: "GCunref", benign, raises: [].}
|
||||
proc GC_unref*(x: string) {.magic: "GCunref", benign, raises: [].}
|
||||
proc GC_unref*[T](x: ref T) {.magic: "GCunref", gcsafe, raises: [].}
|
||||
proc GC_unref*[T](x: seq[T]) {.magic: "GCunref", gcsafe, raises: [].}
|
||||
proc GC_unref*(x: string) {.magic: "GCunref", gcsafe, raises: [].}
|
||||
## See the documentation of `GC_ref <#GC_ref,string>`_.
|
||||
|
||||
proc nimGC_setStackBottom*(theStackBottom: pointer) {.compilerRtl, noinline, benign, raises: [].}
|
||||
proc nimGC_setStackBottom*(theStackBottom: pointer) {.compilerRtl, noinline, gcsafe, raises: [].}
|
||||
## Expands operating GC stack range to `theStackBottom`. Does nothing
|
||||
## if current stack bottom is already lower than `theStackBottom`.
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ type
|
||||
# local
|
||||
waMarkPrecise # fast precise marking
|
||||
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign, raises: [], gcsafe.}
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
# A ref type can have a finalizer that is called before the object's
|
||||
# storage is freed.
|
||||
|
||||
@@ -115,10 +115,10 @@ when BitsPerPage mod (sizeof(int)*8) != 0:
|
||||
{.error: "(BitsPerPage mod BitsPerUnit) should be zero!".}
|
||||
|
||||
# forward declarations:
|
||||
proc collectCT(gch: var GcHeap; size: int) {.benign, raises: [].}
|
||||
proc forAllChildren(cell: PCell, op: WalkOp) {.benign, raises: [].}
|
||||
proc doOperation(p: pointer, op: WalkOp) {.benign, raises: [].}
|
||||
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign, raises: [].}
|
||||
proc collectCT(gch: var GcHeap; size: int) {.gcsafe, raises: [].}
|
||||
proc forAllChildren(cell: PCell, op: WalkOp) {.gcsafe, raises: [].}
|
||||
proc doOperation(p: pointer, op: WalkOp) {.gcsafe, raises: [].}
|
||||
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.gcsafe, raises: [].}
|
||||
# we need the prototype here for debugging purposes
|
||||
|
||||
when defined(nimGcRefLeak):
|
||||
@@ -216,7 +216,7 @@ proc initGC() =
|
||||
gch.gcThreadId = atomicInc(gHeapidGenerator) - 1
|
||||
gcAssert(gch.gcThreadId >= 0, "invalid computed thread ID")
|
||||
|
||||
proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: WalkOp) {.benign.} =
|
||||
proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: WalkOp) {.gcsafe.} =
|
||||
var d = cast[int](dest)
|
||||
case n.kind
|
||||
of nkSlot: forAllChildrenAux(cast[pointer](d +% n.offset), n.typ, op)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
import std/private/syslocks
|
||||
|
||||
when defined(memProfiler):
|
||||
proc nimProfile(requestedSize: int) {.benign.}
|
||||
proc nimProfile(requestedSize: int) {.gcsafe.}
|
||||
|
||||
when defined(useMalloc):
|
||||
proc roundup(x, v: int): int {.inline.} =
|
||||
@@ -41,7 +41,7 @@ else:
|
||||
# We also support 'finalizers'.
|
||||
|
||||
type
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign, raises: [], gcsafe.}
|
||||
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
# A ref type can have a finalizer that is called before the object's
|
||||
# storage is freed.
|
||||
|
||||
|
||||
@@ -96,8 +96,8 @@ type
|
||||
base*: ptr TNimType
|
||||
node: ptr TNimNode # valid for tyRecord, tyObject, tyTuple, tyEnum
|
||||
finalizer*: pointer # the finalizer for the type
|
||||
marker*: proc (p: pointer, op: int) {.nimcall, benign, tags: [], raises: [].} # marker proc for GC
|
||||
deepcopy: proc (p: pointer): pointer {.nimcall, benign, tags: [], raises: [].}
|
||||
marker*: proc (p: pointer, op: int) {.nimcall, gcsafe, tags: [], raises: [].} # marker proc for GC
|
||||
deepcopy: proc (p: pointer): pointer {.nimcall, gcsafe, tags: [], raises: [].}
|
||||
when defined(nimSeqsV2):
|
||||
typeInfoV2*: pointer
|
||||
when defined(nimTypeNames):
|
||||
|
||||
@@ -51,7 +51,7 @@ proc nimCharToStr(x: char): string {.compilerproc.} =
|
||||
proc isNimException(): bool {.asmNoStackFrame.} =
|
||||
{.emit: "return `lastJSError` && `lastJSError`.m_type;".}
|
||||
|
||||
proc getCurrentException*(): ref Exception {.compilerRtl, benign.} =
|
||||
proc getCurrentException*(): ref Exception {.compilerRtl, gcsafe.} =
|
||||
if isNimException(): result = cast[ref Exception](lastJSError)
|
||||
|
||||
proc getCurrentExceptionMsg*(): string =
|
||||
@@ -72,7 +72,7 @@ proc getCurrentExceptionMsg*(): string =
|
||||
proc setCurrentException*(exc: ref Exception) =
|
||||
lastJSError = cast[PJSError](exc)
|
||||
|
||||
proc closureIterSetExc(e: ref Exception) {.compilerRtl, benign.} =
|
||||
proc closureIterSetExc(e: ref Exception) {.compilerRtl, gcsafe.} =
|
||||
setCurrentException(e)
|
||||
|
||||
proc pushCurrentException(e: sink(ref Exception)) {.compilerRtl, inline.} =
|
||||
|
||||
@@ -6,7 +6,7 @@ when notJSnotNims:
|
||||
## Exactly `size` bytes will be overwritten. Like any procedure
|
||||
## dealing with raw memory this is **unsafe**.
|
||||
|
||||
proc copyMem*(dest, source: pointer, size: Natural) {.inline, benign,
|
||||
proc copyMem*(dest, source: pointer, size: Natural) {.inline, gcsafe,
|
||||
tags: [], raises: [], enforceNoRaises.}
|
||||
## Copies the contents from the memory at `source` to the memory
|
||||
## at `dest`.
|
||||
@@ -14,7 +14,7 @@ when notJSnotNims:
|
||||
## regions may not overlap. Like any procedure dealing with raw
|
||||
## memory this is **unsafe**.
|
||||
|
||||
proc moveMem*(dest, source: pointer, size: Natural) {.inline, benign,
|
||||
proc moveMem*(dest, source: pointer, size: Natural) {.inline, gcsafe,
|
||||
tags: [], raises: [], enforceNoRaises.}
|
||||
## Copies the contents from the memory at `source` to the memory
|
||||
## at `dest`.
|
||||
@@ -48,17 +48,17 @@ when notJSnotNims:
|
||||
|
||||
when hasAlloc and not defined(js):
|
||||
|
||||
proc allocImpl*(size: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc alloc0Impl*(size: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc deallocImpl*(p: pointer) {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc reallocImpl*(p: pointer, newSize: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc realloc0Impl*(p: pointer, oldSize, newSize: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc allocImpl*(size: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
proc alloc0Impl*(size: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
proc deallocImpl*(p: pointer) {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
proc reallocImpl*(p: pointer, newSize: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
proc realloc0Impl*(p: pointer, oldSize, newSize: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
|
||||
proc allocSharedImpl*(size: Natural): pointer {.noconv, compilerproc, rtl, benign, raises: [], tags: [].}
|
||||
proc allocShared0Impl*(size: Natural): pointer {.noconv, rtl, benign, raises: [], tags: [].}
|
||||
proc deallocSharedImpl*(p: pointer) {.noconv, rtl, benign, raises: [], tags: [].}
|
||||
proc reallocSharedImpl*(p: pointer, newSize: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc reallocShared0Impl*(p: pointer, oldSize, newSize: Natural): pointer {.noconv, rtl, tags: [], benign, raises: [].}
|
||||
proc allocSharedImpl*(size: Natural): pointer {.noconv, compilerproc, rtl, gcsafe, raises: [], tags: [].}
|
||||
proc allocShared0Impl*(size: Natural): pointer {.noconv, rtl, gcsafe, raises: [], tags: [].}
|
||||
proc deallocSharedImpl*(p: pointer) {.noconv, rtl, gcsafe, raises: [], tags: [].}
|
||||
proc reallocSharedImpl*(p: pointer, newSize: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
proc reallocShared0Impl*(p: pointer, oldSize, newSize: Natural): pointer {.noconv, rtl, tags: [], gcsafe, raises: [].}
|
||||
|
||||
# Allocator statistics for memory leak tests
|
||||
|
||||
@@ -103,7 +103,7 @@ when hasAlloc and not defined(js):
|
||||
incStat(allocCount)
|
||||
allocImpl(size)
|
||||
|
||||
proc createU*(T: typedesc, size = 1.Positive): ptr T {.inline, benign, raises: [].} =
|
||||
proc createU*(T: typedesc, size = 1.Positive): ptr T {.inline, gcsafe, raises: [].} =
|
||||
## Allocates a new memory block with at least `T.sizeof * size` bytes.
|
||||
##
|
||||
## The block has to be freed with `resize(block, 0) <#resize,ptr.T,Natural>`_
|
||||
@@ -131,7 +131,7 @@ when hasAlloc and not defined(js):
|
||||
incStat(allocCount)
|
||||
alloc0Impl(size)
|
||||
|
||||
proc create*(T: typedesc, size = 1.Positive): ptr T {.inline, benign, raises: [].} =
|
||||
proc create*(T: typedesc, size = 1.Positive): ptr T {.inline, gcsafe, raises: [].} =
|
||||
## Allocates a new memory block with at least `T.sizeof * size` bytes.
|
||||
##
|
||||
## The block has to be freed with `resize(block, 0) <#resize,ptr.T,Natural>`_
|
||||
@@ -174,7 +174,7 @@ when hasAlloc and not defined(js):
|
||||
## from a shared heap.
|
||||
realloc0Impl(p, oldSize, newSize)
|
||||
|
||||
proc resize*[T](p: ptr T, newSize: Natural): ptr T {.inline, benign, raises: [].} =
|
||||
proc resize*[T](p: ptr T, newSize: Natural): ptr T {.inline, gcsafe, raises: [].} =
|
||||
## Grows or shrinks a given memory block.
|
||||
##
|
||||
## If `p` is **nil** then a new memory block is returned.
|
||||
@@ -187,7 +187,7 @@ when hasAlloc and not defined(js):
|
||||
## from a shared heap.
|
||||
cast[ptr T](realloc(p, T.sizeof * newSize))
|
||||
|
||||
proc dealloc*(p: pointer) {.noconv, compilerproc, rtl, benign, raises: [], tags: [].} =
|
||||
proc dealloc*(p: pointer) {.noconv, compilerproc, rtl, gcsafe, raises: [], tags: [].} =
|
||||
## Frees the memory allocated with `alloc`, `alloc0`,
|
||||
## `realloc`, `create` or `createU`.
|
||||
##
|
||||
@@ -218,7 +218,7 @@ when hasAlloc and not defined(js):
|
||||
allocSharedImpl(size)
|
||||
|
||||
proc createSharedU*(T: typedesc, size = 1.Positive): ptr T {.inline, tags: [],
|
||||
benign, raises: [].} =
|
||||
gcsafe, raises: [].} =
|
||||
## Allocates a new memory block on the shared heap with at
|
||||
## least `T.sizeof * size` bytes.
|
||||
##
|
||||
@@ -296,7 +296,7 @@ when hasAlloc and not defined(js):
|
||||
## `freeShared <#freeShared,ptr.T>`_.
|
||||
cast[ptr T](reallocShared(p, T.sizeof * newSize))
|
||||
|
||||
proc deallocShared*(p: pointer) {.noconv, compilerproc, rtl, benign, raises: [], tags: [].} =
|
||||
proc deallocShared*(p: pointer) {.noconv, compilerproc, rtl, gcsafe, raises: [], tags: [].} =
|
||||
## Frees the memory allocated with `allocShared`, `allocShared0` or
|
||||
## `reallocShared`.
|
||||
##
|
||||
@@ -307,7 +307,7 @@ when hasAlloc and not defined(js):
|
||||
incStat(deallocCount)
|
||||
deallocSharedImpl(p)
|
||||
|
||||
proc freeShared*[T](p: ptr T) {.inline, benign, raises: [].} =
|
||||
proc freeShared*[T](p: ptr T) {.inline, gcsafe, raises: [].} =
|
||||
## Frees the memory allocated with `createShared`, `createSharedU` or
|
||||
## `resizeShared`.
|
||||
##
|
||||
|
||||
@@ -29,8 +29,8 @@ const
|
||||
logOrc = defined(nimArcIds)
|
||||
|
||||
type
|
||||
TraceProc = proc (p, env: pointer) {.nimcall, benign, raises: [].}
|
||||
DisposeProc = proc (p: pointer) {.nimcall, benign, raises: [].}
|
||||
TraceProc = proc (p, env: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
DisposeProc = proc (p: pointer) {.nimcall, gcsafe, raises: [].}
|
||||
|
||||
template color(c): untyped = c.rc and colorMask
|
||||
template setColor(c, col) =
|
||||
|
||||
@@ -77,7 +77,7 @@ include system/repr_impl
|
||||
type
|
||||
PByteArray = ptr UncheckedArray[byte] # array[0xffff, byte]
|
||||
|
||||
proc addSetElem(result: var string, elem: int, typ: PNimType) {.benign.} =
|
||||
proc addSetElem(result: var string, elem: int, typ: PNimType) {.gcsafe.} =
|
||||
case typ.kind
|
||||
of tyEnum: add result, reprEnum(elem, typ)
|
||||
of tyBool: add result, reprBool(bool(elem))
|
||||
@@ -147,7 +147,7 @@ when not defined(useNimRtl):
|
||||
for i in 0..cl.indent-1: add result, ' '
|
||||
|
||||
proc reprAux(result: var string, p: pointer, typ: PNimType,
|
||||
cl: var ReprClosure) {.benign.}
|
||||
cl: var ReprClosure) {.gcsafe.}
|
||||
|
||||
proc reprArray(result: var string, p: pointer, typ: PNimType,
|
||||
cl: var ReprClosure) =
|
||||
@@ -188,7 +188,7 @@ when not defined(useNimRtl):
|
||||
add result, "]"
|
||||
|
||||
proc reprRecordAux(result: var string, p: pointer, n: ptr TNimNode,
|
||||
cl: var ReprClosure) {.benign.} =
|
||||
cl: var ReprClosure) {.gcsafe.} =
|
||||
case n.kind
|
||||
of nkNone: sysAssert(false, "reprRecordAux")
|
||||
of nkSlot:
|
||||
|
||||
Reference in New Issue
Block a user