Skip to content

Commit 8e6973c

Browse files
committed
more exception barriers
1 parent f0e157e commit 8e6973c

File tree

10 files changed

+42
-35
lines changed

10 files changed

+42
-35
lines changed

lib/core/typeinfo.nim

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,21 +118,21 @@ when not defined(js):
118118
template `rawType=`(x: var Any, p: PNimType) =
119119
x.rawTypePtr = cast[pointer](p)
120120

121-
proc genericAssign(dest, src: pointer, mt: PNimType) {.importCompilerProc.}
121+
proc genericAssign(dest, src: pointer, mt: PNimType) {.importCompilerProc, raises: [].}
122122

123123
when not defined(gcDestructors):
124-
proc genericShallowAssign(dest, src: pointer, mt: PNimType) {.importCompilerProc.}
125-
proc incrSeq(seq: PGenSeq, elemSize, elemAlign: int): PGenSeq {.importCompilerProc.}
126-
proc newObj(typ: PNimType, size: int): pointer {.importCompilerProc.}
127-
proc newSeq(typ: PNimType, len: int): pointer {.importCompilerProc.}
128-
proc objectInit(dest: pointer, typ: PNimType) {.importCompilerProc.}
124+
proc genericShallowAssign(dest, src: pointer, mt: PNimType) {.importCompilerProc, raises: [].}
125+
proc incrSeq(seq: PGenSeq, elemSize, elemAlign: int): PGenSeq {.importCompilerProc, raises: [].}
126+
proc newObj(typ: PNimType, size: int): pointer {.importCompilerProc, raises: [].}
127+
proc newSeq(typ: PNimType, len: int): pointer {.importCompilerProc, raises: [].}
128+
proc objectInit(dest: pointer, typ: PNimType) {.importCompilerProc, raises: [].}
129129
else:
130-
proc nimNewObj(size, align: int): pointer {.importCompilerProc.}
131-
proc newSeqPayload(cap, elemSize, elemAlign: int): pointer {.importCompilerProc.}
130+
proc nimNewObj(size, align: int): pointer {.importCompilerProc, raises: [].}
131+
proc newSeqPayload(cap, elemSize, elemAlign: int): pointer {.importCompilerProc, raises: [].}
132132
proc prepareSeqAddUninit(len: int; p: pointer; addlen, elemSize, elemAlign: int): pointer {.
133-
importCompilerProc.}
133+
importCompilerProc, raises: [].}
134134
proc zeroNewElements(len: int; p: pointer; addlen, elemSize, elemAlign: int) {.
135-
importCompilerProc.}
135+
importCompilerProc, raises: [].}
136136

137137
include system/ptrarith
138138

lib/system/gc.nim

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -481,17 +481,17 @@ proc rawNewObj(typ: PNimType, size: int, gch: var GcHeap): pointer =
481481
{.pop.} # .stackTrace off
482482
{.pop.} # .profiler off
483483

484-
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl.} =
484+
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
485485
result = rawNewObj(typ, size, gch)
486486
when defined(memProfiler): nimProfile(size)
487487

488-
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl, noinline.} =
488+
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl, noinline, raises: [].} =
489489
result = rawNewObj(typ, size, gch)
490490
zeroMem(result, size)
491491
when defined(memProfiler): nimProfile(size)
492492

493493
{.push overflowChecks: on.}
494-
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl.} =
494+
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
495495
# `newObj` already uses locks, so no need for them here.
496496
let size = align(GenericSeqSize, typ.base.align) + len * typ.base.size
497497
result = newObj(typ, size)
@@ -500,7 +500,7 @@ proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl.} =
500500
when defined(memProfiler): nimProfile(size)
501501
{.pop.}
502502

503-
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl, noinline.} =
503+
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl, noinline, raises: [].} =
504504
# generates a new object and sets its reference counter to 1
505505
incTypeSize typ, size
506506
sysAssert(allocInv(gch.region), "newObjRC1 begin")
@@ -528,7 +528,7 @@ proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl, noinline.} =
528528
when defined(memProfiler): nimProfile(size)
529529

530530
{.push overflowChecks: on.}
531-
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl.} =
531+
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
532532
let size = align(GenericSeqSize, typ.base.align) + len * typ.base.size
533533
result = newObjRC1(typ, size)
534534
cast[PGenericSeq](result).len = len
@@ -670,7 +670,7 @@ proc doOperation(p: pointer, op: WalkOp) =
670670
add(gch.tempStack, c)
671671
#of waDebug: debugGraph(c)
672672

673-
proc nimGCvisit(d: pointer, op: int) {.compilerRtl.} =
673+
proc nimGCvisit(d: pointer, op: int) {.compilerRtl, raises: [].} =
674674
doOperation(d, WalkOp(op))
675675

676676
proc collectZCT(gch: var GcHeap): bool {.benign, raises: [].}

lib/system/gc_hooks.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ var
4646
newObjHook*: proc (typ: PNimType, size: int): pointer {.nimcall, tags: [], raises: [], gcsafe.}
4747
traverseObjHook*: proc (p: pointer, op: int) {.nimcall, tags: [], raises: [], gcsafe.}
4848

49-
proc nimGCvisit(p: pointer, op: int) {.inl, compilerRtl.} =
49+
proc nimGCvisit(p: pointer, op: int) {.inl, compilerRtl, raises: [].} =
5050
traverseObjHook(p, op)
5151

52-
proc newObj(typ: PNimType, size: int): pointer {.inl, compilerRtl.} =
52+
proc newObj(typ: PNimType, size: int): pointer {.inl, compilerRtl, raises: [].} =
5353
result = newObjHook(typ, size)

lib/system/gc_ms.nim

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,31 +289,31 @@ when useCellIds:
289289

290290
{.pop.}
291291

292-
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl.} =
292+
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
293293
result = rawNewObj(typ, size, gch)
294294
zeroMem(result, size)
295295
when defined(memProfiler): nimProfile(size)
296296

297-
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl.} =
297+
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
298298
result = rawNewObj(typ, size, gch)
299299
when defined(memProfiler): nimProfile(size)
300300

301-
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl.} =
301+
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
302302
result = rawNewObj(typ, size, gch)
303303
zeroMem(result, size)
304304
when defined(memProfiler): nimProfile(size)
305305

306306
when not defined(nimSeqsV2):
307307
{.push overflowChecks: on.}
308-
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl.} =
308+
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
309309
# `newObj` already uses locks, so no need for them here.
310310
let size = align(GenericSeqSize, typ.base.align) + len * typ.base.size
311311
result = newObj(typ, size)
312312
cast[PGenericSeq](result).len = len
313313
cast[PGenericSeq](result).reserved = len
314314
when defined(memProfiler): nimProfile(size)
315315

316-
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl.} =
316+
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
317317
let size = align(GenericSeqSize, typ.base.align) + len * typ.base.size
318318
result = newObj(typ, size)
319319
cast[PGenericSeq](result).len = len

lib/system/gc_regions.nim

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -305,38 +305,38 @@ proc rawNewSeq(r: var MemRegion, typ: PNimType, size: int): pointer =
305305
res.region = addr(r)
306306
result = res +! sizeof(SeqHeader)
307307

308-
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl.} =
308+
proc newObj(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
309309
sysAssert typ.kind notin {tySequence, tyString}, "newObj cannot be used to construct seqs"
310310
result = rawNewObj(tlRegion, typ, size)
311311
zeroMem(result, size)
312312
when defined(memProfiler): nimProfile(size)
313313

314-
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl.} =
314+
proc newObjNoInit(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
315315
sysAssert typ.kind notin {tySequence, tyString}, "newObj cannot be used to construct seqs"
316316
result = rawNewObj(tlRegion, typ, size)
317317
when defined(memProfiler): nimProfile(size)
318318

319319
{.push overflowChecks: on.}
320-
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl.} =
320+
proc newSeq(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
321321
let size = roundup(align(GenericSeqSize, typ.base.align) + len * typ.base.size, MemAlign)
322322
result = rawNewSeq(tlRegion, typ, size)
323323
zeroMem(result, size)
324324
cast[PGenericSeq](result).len = len
325325
cast[PGenericSeq](result).reserved = len
326326

327-
proc newStr(typ: PNimType, len: int; init: bool): pointer {.compilerRtl.} =
327+
proc newStr(typ: PNimType, len: int; init: bool): pointer {.compilerRtl, raises: [].} =
328328
let size = roundup(len + GenericSeqSize, MemAlign)
329329
result = rawNewSeq(tlRegion, typ, size)
330330
if init: zeroMem(result, size)
331331
cast[PGenericSeq](result).len = 0
332332
cast[PGenericSeq](result).reserved = len
333333
{.pop.}
334334

335-
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl.} =
335+
proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl, raises: [].} =
336336
result = rawNewObj(tlRegion, typ, size)
337337
zeroMem(result, size)
338338

339-
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl.} =
339+
proc newSeqRC1(typ: PNimType, len: int): pointer {.compilerRtl, raises: [].} =
340340
result = newSeq(typ, len)
341341

342342
proc growObj(regionUnused: var MemRegion; old: pointer, newsize: int): pointer =

lib/system/mm/boehm.nim

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
{.push raises: [], gcsafe.}
22

33

44
proc boehmGCinit {.importc: "GC_init", boehmGC.}
@@ -138,3 +138,5 @@ proc deallocOsPages(r: var MemRegion) {.inline.} = discard
138138
proc deallocOsPages() {.inline.} = discard
139139

140140
include "system/cellsets"
141+
142+
{.pop.}

lib/system/mm/go.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{.push raises: [], gcsafe.}
12

23
when defined(windows):
34
const goLib = "libgo.dll"
@@ -151,3 +152,5 @@ proc alloc0(r: var MemRegion, size: int): pointer =
151152
proc dealloc(r: var MemRegion, p: pointer) = dealloc(p)
152153
proc deallocOsPages(r: var MemRegion) {.inline.} = discard
153154
proc deallocOsPages() {.inline.} = discard
155+
156+
{.pop.}

lib/system/mm/none.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ proc newObjNoInit(typ: PNimType, size: int): pointer =
2020
result = alloc(size)
2121

2222
{.push overflowChecks: on.}
23-
proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.} =
23+
proc newSeq(typ: PNimType, len: int): pointer {.compilerproc, raises: [].} =
2424
result = newObj(typ, align(GenericSeqSize, typ.align) + len * typ.base.size)
2525
cast[PGenericSeq](result).len = len
2626
cast[PGenericSeq](result).reserved = len

lib/system/mmdisp.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ elif (defined(nogc) or defined(gcDestructors)) and defined(useMalloc):
6060

6161
when defined(nogc):
6262
proc GC_getStatistics(): string = ""
63-
proc newObj(typ: PNimType, size: int): pointer {.compilerproc.} =
63+
proc newObj(typ: PNimType, size: int): pointer {.compilerproc, raises: [].} =
6464
result = alloc0(size)
6565

66-
proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.} =
66+
proc newSeq(typ: PNimType, len: int): pointer {.compilerproc, raises: [].} =
6767
result = newObj(typ, align(GenericSeqSize, typ.align) + len * typ.base.size)
6868
cast[PGenericSeq](result).len = len
6969
cast[PGenericSeq](result).reserved = len

lib/system/sysstr.nim

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# we don't use refcounts because that's a behaviour
1616
# the programmer may not want
1717

18+
{.push raises: [], gcsafe.}
1819

1920
proc dataPointer(a: PGenericSeq, elemAlign: int): pointer =
2021
cast[pointer](cast[int](a) +% align(GenericSeqSize, elemAlign))
@@ -103,7 +104,7 @@ proc toNimStr(str: cstring, len: int): NimString {.compilerproc.} =
103104
copyMem(addr(result.data), str, len)
104105
result.data[len] = '\0'
105106

106-
proc toOwnedCopy(src: NimString): NimString {.inline.} =
107+
proc toOwnedCopy(src: NimString): NimString {.inline, raises: [].} =
107108
## Expects `src` to be not nil and initialized (len and terminating zero set)
108109
result = rawNewStringNoInit(src.len)
109110
result.len = src.len
@@ -149,7 +150,7 @@ proc copyStringRC1(src: NimString): NimString {.compilerRtl.} =
149150
if (src.reserved and strlitFlag) != 0:
150151
result.reserved = (result.reserved and not strlitFlag) or seqShallowFlag
151152

152-
proc copyDeepString(src: NimString): NimString {.inline.} =
153+
proc copyDeepString(src: NimString): NimString {.inline, raises: [].} =
153154
if src != nil:
154155
result = toOwnedCopy(src)
155156

@@ -358,3 +359,4 @@ func capacity*[T](self: seq[T]): int {.inline.} =
358359
let sek = cast[PGenericSeq](self)
359360
result = if sek != nil: sek.space else: 0
360361

362+
{.pop.}

0 commit comments

Comments
 (0)