Exceptions/Catch an exception thrown in a nested call: Difference between revisions

Added Quackery.
(Added Quackery.)
Line 2,637:
through the nested function calls together with the name of the
uncaught exception, (U1) to stderr, then quit the running program.
 
=={{header|Quackery}}==
 
<lang Quackery> [ this ] is U0
 
[ this ] is U1
 
[ 0 = iff U0 else U1
message put bail ] is baz ( n --> )
 
[ baz ] is bar ( n --> )
 
[ 2 times
[ i^
1 backup
bar
bailed if
[ message share
U0 oats iff
[ say "Exception U0 raised." cr
echostack
$ "Press enter to continue"
input drop
message release
drop ]
else [ drop bail ] ] ] ] is foo</lang>
 
{{out}}
 
Testing in the Quackery shell, first with trapping the exception U1, and then without trapping the exception U1 (this is bad practice). Before invoking <code>foo</code> we put some arbitrary data on the stack to show if and how it is affected.
 
<pre>/O> 111 222 333
...
 
Stack: 111 222 333
 
/O> 0 backup foo bailed if [ message take echo ]
...
Exception U0 raised.
Stack: 111 222 333 0
Press enter to continue
U1
Stack: 111 222 333
 
/O> foo
...
Exception U0 raised.
Stack: 111 222 333 0
Press enter to continue
 
Problem: Cannot remove an immovable item.
Quackery Stack: 111 222 333
Return stack: {[...] 0} {quackery 1} {[...] 11} {shell 5} {quackery 1} {[...] 0} {foo 2} {times 6}
{[...] 10} {[...] 6} {[...] 7} {[...] 1} {bail 1}
 
/O>
 
Stack empty.
</pre>
 
=={{header|R}}==
1,462

edits