Okay, i've thought things over a bit. Here's what we're going to do 
to deal with infant mortality, exceptions, and suchlike things.

Important given: We can *not* use setjmp/longjmp. Period. Not an 
option--not safe with threads. At this point, having considered the 
alternatives, I wish it were otherwise but it's not. Too bad for us.

So, on to the rules/proclamations/exercise of unreasonable dictatorial power.

1) Functions are only responsible for ensuring liveness of 
strings/buffers/PMCs up until the point they exit. 
Strings/PMCs/Buffers that are returned to a caller are the caller's 
problem.

2) All calls to routines which may fail must check for failure and 
exit indicating an exception if they do so. They should exit as 
gracefully as they can. They *may* override the exception if 
appropriate. (Potentially voiding it, or throwing a different 
exception)

3) Opcode functions which note that something they called has thrown 
an exception are responsible for posting an interpreter exception.

4) Everything that can fail *must* be checked. So no code like:

     string_foo(string_foo(), string_foo())

if string_foo can pitch an exception.

5) We're dealing with infant mortality by pushing baby strings on the 
stack. We'll add in a stack_extend and quickpush routine to 
pre-extend (guaranteed) the stack and push the potential baby 
string/PMC/Buffer respectively.


Yes, these will be a pain to deal with. Alas, too bad for us.
-- 
                                         Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                       teddy bears get drunk

Reply via email to