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

1.1       paf         1: /*
1.6     ! paf         2:   $Id: pa_request.h,v 1.5 2001/02/21 11:10:02 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.6     ! paf        11: #include "pa_context.h"
        !            12: #include "pa_value.h"
1.4       paf        13: 
                     14: class Local_request_exception;
1.1       paf        15: 
                     16: class Request {
1.4       paf        17:        friend Local_request_exception;
1.1       paf        18: public:
                     19:        
1.6     ! paf        20:        Request(Pool& apool, 
        !            21:                Value *aroot, Value *aself, Value *arcontext, WContext *awcontext) : 
1.5       paf        22:                fpool(apool), 
1.6     ! paf        23:                root(aroot), self(aself), rcontext(arcontext), wcontext(awcontext),
        !            24:                fclasses(apool)
        !            25:                {
1.5       paf        26:        }
1.3       paf        27:        ~Request() {}
1.1       paf        28: 
1.5       paf        29:        // IMPORTANT: don't use pool without  Local_request_exception 
1.4       paf        30:        Pool& pool() { return fpool; }
                     31: 
                     32:        Exception& exception() { return *fexception; }
1.6     ! paf        33:        Hash& classes() { return fclasses; }
        !            34: 
        !            35:        // core request processing
        !            36:        void core();
        !            37: 
        !            38: protected: // core
        !            39: 
        !            40:        // classes
        !            41:        Hash fclasses;
        !            42: 
        !            43:        // contexts
        !            44:        Value *root, *self, *rcontext;
        !            45:        WContext *wcontext;
        !            46:        
        !            47:        Array& load_and_compile_RUN();
        !            48:        VClass *construct_class(String& name, Array& compiled_methods);
        !            49:        char *execute_MAIN(Value *class_RUN);
1.4       paf        50: 
1.3       paf        51: protected:
1.1       paf        52: 
1.4       paf        53:        // all request' objects are allocated in this pool
1.3       paf        54:        Pool& fpool;
1.4       paf        55: 
                     56:        // exception replacement mechanism is protected from direct usage
                     57:        // Local_request_exception object enforces paired set/restore
                     58:        Exception *set_exception(Exception *e){
                     59:                Exception *r=fexception;
                     60:                fexception=e;
                     61:                return r;
                     62:        }
                     63:        void restore_exception(Exception *e) {
                     64:                fexception=e;
                     65:        }
                     66: 
                     67: private:
                     68: 
                     69:        // current request's exception object
                     70:        Exception *fexception;
                     71: 
1.1       paf        72: };
1.4       paf        73: 
                     74: class Local_request_exception {
                     75:        Request request;
                     76:        Exception *saved_exception;
                     77: public:
                     78:        Local_request_exception(Request& arequest, Exception& exception) : 
                     79:                request(arequest),
                     80:                saved_exception(arequest.set_exception(&exception)) {}
                     81:        ~Local_request_exception() { request.restore_exception(saved_exception); }
                     82: };
                     83: 
1.1       paf        84: 
                     85: #endif

E-mail: