new VM: proper shield against endless recursions

This commit is contained in:
Araq
2014-04-05 21:05:07 +02:00
parent 033f2bbbf2
commit 4835199125

View File

@@ -48,9 +48,17 @@ type
# XXX 'break' should perform cleanup actions
# 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:
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]
# we now use the same format as in system/except.nim
var s = toFilename(info)