Stack traces: Difference between revisions

Added REXX (Regina flavour)
(Added Kotlin)
(Added REXX (Regina flavour))
Line 1,540:
Selection:
</pre>
 
=={{header|REXX}}==
{{works with|Regina}}
<lang rexx>/* call stack */
say 'Call A'
call A '123'
say result
exit 0
 
A:
say 'Call B'
call B '456'
say result
return ARG(1)
 
B:
say 'Call C'
call C '789'
say result
return ARG(1)
 
C:
call callstack
return ARG(1)
 
callstack: procedure
getcallstack(cs.)
say 'Dump call stack with' cs.0 'items'
do i = 1 to cs.0
parse var cs.i line func
say format(line, 3) ':' left(func, 9) ': source "' || sourceline(line) || '"'
end
return cs.0</lang>
 
{{out}}
<pre>prompt$ regina callstack.rexx
Call A
Call B
Call C
Dump call stack with 4 items
20 : CALLSTACK : source "call callstack"
15 : C : source "call C '789'"
9 : B : source "call B '456'"
3 : A : source "call A '123'"
789
456
123</pre>
 
Regina will also dump a call stack during certain error conditions. For instance, if the code listing above raised an unhandled signal (simulated here with "signal noname" in routine C). This is not a recoverable scenario though, and the program will not continue.
 
<lang rexx>C:
signal noname
call callstack
return ARG(1)</lang>
 
{{out}}
<pre>prompt$ regina callstack.rexx
Call A
Call B
Call C
20 +++ signal noname
15 +++ call C '789'
9 +++ call B '456'
3 +++ call A '123'
Error 16 running "/home/btiffin/forge/gnucobol/extensions/demos/callstack.rexx", line 20: Label not found
Error 16.1: Label "NONAME" not found</pre>
 
=={{header|Racket}}==
Anonymous user