This commit is contained in:
Andreas Rumpf 2021-04-07 23:26:53 +02:00 • committed by GitHub
commit bd7807de4c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 22 deletions

View file

@ -209,7 +209,7 @@ when not defined(js) and (defined(hotcodereloading) or
else: "so" else: "so"
type type
HcrProcGetter* = proc (libHandle: pointer, procName: cstring): pointer {.nimcall.} HcrProcGetter* = proc (libHandle: pointer, procName: cstring): pointer {.nimcall.}
HcrGcMarkerProc = proc () {.nimcall.} HcrGcMarkerProc = proc () {.nimcall, raises: [].}
HcrModuleInitializer* = proc () {.nimcall.} HcrModuleInitializer* = proc () {.nimcall.}
when defined(createNimHcr): when defined(createNimHcr):
@ -606,7 +606,7 @@ when defined(createNimHcr):
proc hcrGeneration*(): int {.nimhcr.} = proc hcrGeneration*(): int {.nimhcr.} =
generation generation
proc hcrMarkGlobals*() {.nimhcr, nimcall, gcsafe.} = proc hcrMarkGlobals*() {.compilerproc, exportc, dynlib, nimcall, gcsafe.} =
# This is gcsafe, because it will be registered # This is gcsafe, because it will be registered
# only in the GC of the main thread. # only in the GC of the main thread.
{.gcsafe.}: {.gcsafe.}:
@ -648,10 +648,10 @@ elif defined(hotcodereloading) or defined(testNimHcr):
proc hcrAddEventHandler*(isBefore: bool, cb: proc ()) {.nimhcr.} proc hcrAddEventHandler*(isBefore: bool, cb: proc ()) {.nimhcr.}
proc hcrMarkGlobals*() {.nimhcr, nimcall, gcsafe.} proc hcrMarkGlobals*() {.raises: [], nimhcr, nimcall, gcsafe.}
when declared(nimRegisterGlobalMarker): when declared(nimRegisterGlobalMarker):
nimRegisterGlobalMarker(hcrMarkGlobals) nimRegisterGlobalMarker(cast[GlobalMarkerProc](hcrMarkGlobals))
else: else:
proc hcrHasModuleChanged*(moduleHash: string): bool = proc hcrHasModuleChanged*(moduleHash: string): bool =

View file

@ -94,7 +94,7 @@ type
waZctDecRef, waPush waZctDecRef, waPush
#, waDebug #, waDebug
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign.} Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign, raises: [].}
# A ref type can have a finalizer that is called before the object's # A ref type can have a finalizer that is called before the object's
# storage is freed. # storage is freed.
@ -219,11 +219,11 @@ template gcTrace(cell, state: untyped) =
when traceGC: traceCell(cell, state) when traceGC: traceCell(cell, state)
# forward declarations: # forward declarations:
proc collectCT(gch: var GcHeap) {.benign.} proc collectCT(gch: var GcHeap) {.benign, raises: [].}
proc isOnStack(p: pointer): bool {.noinline, benign.} proc isOnStack(p: pointer): bool {.noinline, benign, raises: [].}
proc forAllChildren(cell: PCell, op: WalkOp) {.benign.} proc forAllChildren(cell: PCell, op: WalkOp) {.benign, raises: [].}
proc doOperation(p: pointer, op: WalkOp) {.benign.} proc doOperation(p: pointer, op: WalkOp) {.benign, raises: [].}
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign.} proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign, raises: [].}
# we need the prototype here for debugging purposes # we need the prototype here for debugging purposes
proc incRef(c: PCell) {.inline.} = proc incRef(c: PCell) {.inline.} =
@ -636,7 +636,7 @@ proc markS(gch: var GcHeap, c: PCell) =
if not containsOrIncl(gch.marked, d): if not containsOrIncl(gch.marked, d):
forAllChildren(d, waMarkPrecise) forAllChildren(d, waMarkPrecise)
proc markGlobals(gch: var GcHeap) = proc markGlobals(gch: var GcHeap) {.raises: [].} =
if gch.gcThreadId == 0: if gch.gcThreadId == 0:
for i in 0 .. globalMarkersLen-1: globalMarkers[i]() for i in 0 .. globalMarkersLen-1: globalMarkers[i]()
for i in 0 .. threadLocalMarkersLen-1: threadLocalMarkers[i]() for i in 0 .. threadLocalMarkersLen-1: threadLocalMarkers[i]()
@ -691,9 +691,9 @@ proc doOperation(p: pointer, op: WalkOp) =
proc nimGCvisit(d: pointer, op: int) {.compilerRtl.} = proc nimGCvisit(d: pointer, op: int) {.compilerRtl.} =
doOperation(d, WalkOp(op)) doOperation(d, WalkOp(op))
proc collectZCT(gch: var GcHeap): bool {.benign.} proc collectZCT(gch: var GcHeap): bool {.benign, raises: [].}
proc collectCycles(gch: var GcHeap) = proc collectCycles(gch: var GcHeap) {.raises: [].} =
when hasThreadSupport: when hasThreadSupport:
for c in gch.toDispose: for c in gch.toDispose:
nimGCunref(c) nimGCunref(c)
@ -800,7 +800,7 @@ proc unmarkStackAndRegisters(gch: var GcHeap) =
decRef(d[i]) decRef(d[i])
gch.decStack.len = 0 gch.decStack.len = 0
proc collectCTBody(gch: var GcHeap) = proc collectCTBody(gch: var GcHeap) {.raises: [].} =
when withRealTime: when withRealTime:
let t0 = getticks() let t0 = getticks()
sysAssert(allocInv(gch.region), "collectCT: begin") sysAssert(allocInv(gch.region), "collectCT: begin")

View file

@ -415,7 +415,7 @@ else:
# end of non-portable code # end of non-portable code
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
proc prepareDealloc(cell: PCell) = proc prepareDealloc(cell: PCell) {.raises: [].} =
when declared(useMarkForDebug): when declared(useMarkForDebug):
when useMarkForDebug: when useMarkForDebug:
gcAssert(cell notin gch.marked, "Cell still alive!") gcAssert(cell notin gch.marked, "Cell still alive!")
@ -458,7 +458,7 @@ proc deallocHeap*(runFinalizers = true; allowGcAfterwards = true) =
initGC() initGC()
type type
GlobalMarkerProc = proc () {.nimcall, benign.} GlobalMarkerProc = proc () {.nimcall, benign, raises: [].}
var var
globalMarkersLen {.exportc.}: int globalMarkersLen {.exportc.}: int
globalMarkers {.exportc.}: array[0..3499, GlobalMarkerProc] globalMarkers {.exportc.}: array[0..3499, GlobalMarkerProc]

View file

@ -36,7 +36,7 @@ type
# local # local
waMarkPrecise # fast precise marking waMarkPrecise # fast precise marking
Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign.} Finalizer {.compilerproc.} = proc (self: pointer) {.nimcall, benign, raises: [].}
# A ref type can have a finalizer that is called before the object's # A ref type can have a finalizer that is called before the object's
# storage is freed. # storage is freed.
@ -115,10 +115,10 @@ when BitsPerPage mod (sizeof(int)*8) != 0:
{.error: "(BitsPerPage mod BitsPerUnit) should be zero!".} {.error: "(BitsPerPage mod BitsPerUnit) should be zero!".}
# forward declarations: # forward declarations:
proc collectCT(gch: var GcHeap; size: int) {.benign.} proc collectCT(gch: var GcHeap; size: int) {.benign, raises: [].}
proc forAllChildren(cell: PCell, op: WalkOp) {.benign.} proc forAllChildren(cell: PCell, op: WalkOp) {.benign, raises: [].}
proc doOperation(p: pointer, op: WalkOp) {.benign.} proc doOperation(p: pointer, op: WalkOp) {.benign, raises: [].}
proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign.} proc forAllChildrenAux(dest: pointer, mt: PNimType, op: WalkOp) {.benign, raises: [].}
# we need the prototype here for debugging purposes # we need the prototype here for debugging purposes
when defined(nimGcRefLeak): when defined(nimGcRefLeak):