Annotation of 43BSD/contrib/xns/xnslib/except.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * except.h
                      3:  *
                      4:  * Definitions and macros for C exception mechanism
                      5:  *
                      6:  (c) Jeffrey Mogul     Stanford        18 February 1983
                      7:  */
                      8: 
                      9: #include <setjmp.h>
                     10: 
                     11: typedef struct _Except_buf_x {
                     12:        struct _Except_buf_x *Prev;     /* exception chain back-pointer */
                     13:        jmp_buf Environ;                /* saved environment */
                     14:        char *Message;                  /* Human-readable cause */
                     15:        int Code;                       /* Exception code */
                     16: } _Except_Buf;
                     17: 
                     18: extern _Except_Buf *_Except_Header;    /* global exception chain header */
                     19: 
                     20: /*
                     21:  * "syntax":
                     22:  *     DURING statement HANDLER statement END_HANDLER
                     23:  */
                     24: 
                     25: #define        _E_RESTORE      _Except_Header = Exception.Prev
                     26: 
                     27: #define        DURING {_Except_Buf Exception;\
                     28:                 Exception.Prev=_Except_Header;\
                     29:                 _Except_Header= &Exception;\
                     30:                 if (!setjmp(Exception.Environ)) {
                     31: 
                     32: #define        HANDLER _E_RESTORE;} else
                     33: 
                     34: #define        END_HANDLER }
                     35: 
                     36: #define        E_RETURN(x) {_E_RESTORE; return(x);}
                     37: 
                     38: #define        E_RETURN_VOID {_E_RESTORE; return;}
                     39: 
                     40: #define        RERAISE raise(Exception.Code, Exception.Message)
                     41: 
                     42: /*
                     43:  * Exception modes (combined with ||):
                     44:  */
                     45: #define        EX_MODE_REPORT  1       /* report uncaught errors on stderr */
                     46: #define        EX_MODE_ABORT   2       /* abort if uncaught error */
                     47: 
                     48: extern int ExceptMode;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.