Stephen Weeks asked for clarification on #perl6 on how to implement $!,
I didn't find the answer for most the issues.

In particular:

* S04 states that .defined and .true mark the Exception object as
handled. But what do those methods return? alway true (since $! contains
undef anyway if there was no exception)? Or do they proxy their payload
(ie try { die $object }; $!.true returns the same as $object.true)?

* What about the other methods? t/spec/S02-magicals/dollar_bang.t
assumes that $! stringifies like its payload. Is that correct?

* Another test (forgot which) actually assumes that $! has the type of
the payload, so that try { die 1; }; $! ~~ Int would return True. This
seems unlikely to me, but I think I should ask anyway: is that
assumption correct?

* dollar_bang.t also has this test:

: try {
:     try {
:         die 'qwerty';
:     }
:     ok ~($!) ~~ /qwerty/, 'die sets $! properly';
:     die; # use the default argument
: }
: #?rakudo todo 'stringification of $!'
: ok ~($!) ~~ /qwerty/, 'die without argument uses $! properly';

that seems to assume that an empty 'die;' re-uses the previous $! value
- is that correct?

* S04 also says
"Because the contextual variable C<$!> contains all exceptions collected
in the current lexical scope[...]"

What does that mean in terms of implementation? Does $! contain a list
of all assembled exceptions, and item context always gives access to the
last one? Is there a user visible way to access these exceptions?


Reply via email to