new VM: proper shield against endless recursions
This commit is contained in:
parent
033f2bbbf2
commit
4835199125
1 changed files with 10 additions and 2 deletions
|
|
@ -48,9 +48,17 @@ type
|
||||||
# XXX 'break' should perform cleanup actions
|
# XXX 'break' should perform cleanup actions
|
||||||
# What does the C backend do for it?
|
# What does the C backend do for it?
|
||||||
|
|
||||||
proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int) =
|
proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int; recursionLimit=100) =
|
||||||
if x != nil:
|
if x != nil:
|
||||||
stackTraceAux(c, x.next, x.comesFrom)
|
if recursionLimit == 0:
|
||||||
|
var calls = 0
|
||||||
|
var x = x
|
||||||
|
while x != nil:
|
||||||
|
inc calls
|
||||||
|
x = x.next
|
||||||
|
msgWriteln($calls & " calls omitted\n")
|
||||||
|
return
|
||||||
|
stackTraceAux(c, x.next, x.comesFrom, recursionLimit-1)
|
||||||
var info = c.debug[pc]
|
var info = c.debug[pc]
|
||||||
# we now use the same format as in system/except.nim
|
# we now use the same format as in system/except.nim
|
||||||
var s = toFilename(info)
|
var s = toFilename(info)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue