Bob Rogers wrote:
From: "Klaas-Jan Stol" <[EMAIL PROTECTED]>
about the removal of internal_exception: the specified ticket (in the
list on the wiki) does not have a conclusion: no final decision seems
to be have made on that issue. What's more, a quick check on a few
calls to internal_exception revealed that there's no interpreter
argument available . . .
Yes; that's what the ticket is really about, whether it's worth
modifying callers in the few cases where it's needed, so the ticket is
really misnamed. internal_exception itself is still needed for sanity
checking in cases where exceptions cannot work.
A good example of this is for instance in tsq.c::queue_destroy. (line
381) This exception indicates something's wrong with the thread-safe
queue, which I assume is really really fatal, and should result in
parrot exiting?
kjs
Yes. These cases should be few (stack corruption, severe GC problems),
but they cannot be reduced to zero without removing useful sanity
checks. In some cases, it may be a choice between an internal_exception
and a (possibly exploitable) jump into random memory.
In any case, convertible calls to internal_exception should already
have been handled in RT#40392 (though it is possible that other
inappropriate internal_exception calls may have crept in since then).
There's certainly a need for a way to die cleanly and print out an error
message and possibly a backtrace under extreme circumstances. But that's
not what internal_exception does (even though we're using it that way
now). internal_exception is an early and very poor attempt at an
implementation of exceptions, and carries a load of baggage of nasty code.
I'll put in a new task:
- Provide a simple function for completely fatal errors where throwing
an exception isn't possible, and replace last dregs of
'internal_exception' with it.
Allison