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: