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: