Annotation of parser3/src/include/pa_request.h, revision 1.7

1.1       paf         1: /*
1.7     ! paf         2:   $Id: pa_request.h,v 1.6 2001/02/21 16:11:49 paf Exp $
1.1       paf         3: */
                      4: 
                      5: #ifndef PA_REQUEST_H
                      6: #define PA_REQUEST_H
                      7: 
                      8: #include "pa_pool.h"
1.4       paf         9: #include "pa_exception.h"
1.5       paf        10: #include "pa_hash.h"
1.7     ! paf        11: #include "pa_wcontext.h"
1.6       paf        12: #include "pa_value.h"
1.7     ! paf        13: #include "pa_stack.h"
        !            14: 
        !            15: #define MAIN_METHOD_NAME "main"
        !            16: 
        !            17: #ifndef NO_STRING_ORIGIN
        !            18: #      define COMPILE_PARAMS char *source, char *file
        !            19: #      define COMPILE(source, file) real_compile(source, file)
        !            20: #else
        !            21: #      define COMPILE_PARAMS char *source
        !            22: #      define COMPILE(source, file) real_compile(source)
        !            23: #endif
1.4       paf        24: 
                     25: class Local_request_exception;
1.1       paf        26: 
1.7     ! paf        27: class Request : public Pooled {
1.4       paf        28:        friend Local_request_exception;
1.1       paf        29: public:
                     30:        
1.7     ! paf        31:        Request(Pool& apool) : Pooled(apool),
1.5       paf        32:                fpool(apool), 
1.7     ! paf        33:                stack(apool),
1.6       paf        34:                fclasses(apool)
                     35:                {
1.5       paf        36:        }
1.3       paf        37:        ~Request() {}
1.1       paf        38: 
1.7     ! paf        39:        // IMPORTANT: don't use without  Local_request_exception 
        !            40:        Exception& exception() { return *fexception; }
1.4       paf        41: 
1.7     ! paf        42:        // global classes
1.6       paf        43:        Hash& classes() { return fclasses; }
                     44: 
                     45:        // core request processing
                     46:        void core();
                     47: 
1.7     ! paf        48: private: // core data
1.6       paf        49: 
                     50:        // classes
                     51:        Hash fclasses;
                     52: 
                     53:        // contexts
                     54:        Value *root, *self, *rcontext;
                     55:        WContext *wcontext;
                     56:        
1.7     ! paf        57:        // execution stack
        !            58:        Stack stack;
        !            59: 
        !            60: private: // core.C
        !            61: 
1.6       paf        62:        Array& load_and_compile_RUN();
                     63:        VClass *construct_class(String& name, Array& compiled_methods);
1.7     ! paf        64:        char *execute_MAIN(VClass *class_RUN);
        !            65: 
        !            66: private: // compile.C
        !            67: 
        !            68:        Array& real_compile(COMPILE_PARAMS);
        !            69: 
        !            70: private: // execute.C
        !            71: 
        !            72:        void execute(Array& ops);
1.4       paf        73: 
1.3       paf        74: protected:
1.1       paf        75: 
1.4       paf        76:        // all request' objects are allocated in this pool
1.3       paf        77:        Pool& fpool;
1.4       paf        78: 
                     79:        // exception replacement mechanism is protected from direct usage
                     80:        // Local_request_exception object enforces paired set/restore
                     81:        Exception *set_exception(Exception *e){
                     82:                Exception *r=fexception;
                     83:                fexception=e;
                     84:                return r;
                     85:        }
                     86:        void restore_exception(Exception *e) {
                     87:                fexception=e;
                     88:        }
                     89: 
                     90: private:
                     91: 
                     92:        // current request's exception object
                     93:        Exception *fexception;
                     94: 
1.1       paf        95: };
1.4       paf        96: 
                     97: class Local_request_exception {
                     98:        Request request;
                     99:        Exception *saved_exception;
                    100: public:
                    101:        Local_request_exception(Request& arequest, Exception& exception) : 
                    102:                request(arequest),
                    103:                saved_exception(arequest.set_exception(&exception)) {}
                    104:        ~Local_request_exception() { request.restore_exception(saved_exception); }
                    105: };
                    106: 
1.7     ! paf       107: // core func
        !           108: void core();
1.1       paf       109: 
                    110: #endif

E-mail: