Annotation of parser3/src/main/pa_request.C, revision 1.5
1.1 paf 1: /*
1.5 ! paf 2: $Id: pa_request.C,v 1.4 2001/03/10 14:05:36 paf Exp $
1.1 paf 3: */
4:
5: #include "pa_request.h"
1.3 paf 6: #include "pa_wwrapper.h"
7: #include "pa_common.h"
8: #include "pa_vclass.h"
9: #include "classes/_root.h"
10: #include "classes/_env.h"
11:
12: #include <stdio.h>
13:
14: Request::Request(Pool& apool) : Pooled(apool),
15: stack(apool),
16: root_class(apool),
17: env_class(apool),
18: fclasses(apool),
19: fclasses_array(apool),
20: lang(String::Untaint_lang::HTML_TYPO)
21: {
22: // root class
23: initialize_root_class(pool(), root_class);
24: // adding root superclass,
25: // parent of all classes,
26: // operators holder
1.5 ! paf 27: String root_class_name(pool()); root_class_name.APPEND_CONST(ROOT_CLASS_NAME);
! 28: classes().put(root_class_name, &root_class);
1.3 paf 29:
30: // env class
31: initialize_env_class(pool(), env_class);
1.5 ! paf 32: String env_class_name(pool()); env_class_name.APPEND_CONST(ENV_CLASS_NAME);
! 33: classes().put(env_class_name, &env_class);
1.3 paf 34: }
1.1 paf 35:
36: void Request::core() {
1.3 paf 37: TRY {
1.5 ! paf 38: char *auto_file="Y:\\parser3\\src\\auto.p";
! 39: String auto_method_name(pool()); auto_method_name.APPEND_CONST(AUTO_METHOD_NAME);
! 40: use(auto_file, &auto_method_name, false/*ignore possible error*/);
! 41:
! 42: char *test_file="Y:\\parser3\\src\\test.p";
! 43: String run_method_name(pool()); run_method_name.APPEND_CONST(RUN_METHOD_NAME);
! 44: use(test_file, &run_method_name);
1.3 paf 45:
46: char *result=execute_MAIN();
47: printf("result-----------------\n%sEOF----------------\n", result);
48: }
49: CATCH(e) {
50: printf("\nERROR: ");
51: const String *problem_source=e.problem_source();
52: if(problem_source) {
53: const Origin& origin=problem_source->origin();
54: if(origin.file)
55: printf("%s(%d): ",
56: origin.file, 1+origin.line);
57: printf("'%s' ",
58: problem_source->cstr());
59: }
60: printf("%s", e.comment());
1.1 paf 61: const String *type=e.type();
62: if(type) {
63: printf(" type: %s", type->cstr());
64: const String *code=e.code();
65: if(code)
66: printf(", code: %s", code->cstr());
67: }
1.3 paf 68: printf("\n");
1.1 paf 69: }
1.3 paf 70: END_CATCH
1.1 paf 71: }
72:
1.5 ! paf 73: VClass *Request::use(char *file, String *name, bool fail_on_read_problem) {
1.3 paf 74: // TODO: обнаружить|решить cyclic dependences
1.5 ! paf 75: char *source=file_read(pool(), file, fail_on_read_problem);
1.3 paf 76: if(!source)
1.5 ! paf 77: return 0;
1.3 paf 78:
1.5 ! paf 79: // compile loaded class
1.4 paf 80: VClass& vclass=COMPILE(source, name, file);
1.1 paf 81:
1.4 paf 82: // locate and execute possible @auto[] static method
1.5 ! paf 83: execute_static_method(vclass, *auto_method_name, false /*no result needed*/);
! 84: return &vclass;
1.1 paf 85: }
86:
1.3 paf 87: char *Request::execute_MAIN() {
1.5 ! paf 88: // locate class with @main[] & execute it
1.3 paf 89: for(int i=classes_array().size(); --i>=0;) {
90: VClass *vclass=static_cast<VClass *>(classes_array().get(i));
1.5 ! paf 91: char *result=execute_static_method(*vclass, *main_method_name, true /*result needed*/);
1.4 paf 92: if(result)
93: return result;
1.3 paf 94: }
95:
96: THROW(0,0,
97: 0,
98: "'"MAIN_METHOD_NAME"' method not found");
99: return 0;
1.1 paf 100: }
E-mail: