--- parser3/src/main/Attic/core.C 2001/02/25 14:23:32 1.40 +++ parser3/src/main/Attic/core.C 2001/03/08 12:13:36 1.44 @@ -1,5 +1,5 @@ /* -$Id: core.C,v 1.40 2001/02/25 14:23:32 paf Exp $ +$Id: core.C,v 1.44 2001/03/08 12:13:36 paf Exp $ */ #include "pa_request.h" @@ -15,10 +15,31 @@ void core() { request.core(); } +Request::Request(Pool& apool) : Pooled(apool), + stack(apool), + ROOT_CLASS(apool), + fclasses(apool), + fclasses_array(apool) +{ + // construct_root_class + void construct_root_class(Request& request); // classes/root + construct_root_class(*this); + + // TODO: construct other classes, + // для встроенных какая-то табличка + // для внешних - конфиг с @CLASSES файлы с классами/ворохами операторов + + // adding root superclass, + // parent of all classes, + // operators holder + String ROOT(pool()); ROOT.APPEND_CONST(ROOT_NAME); + classes().put(ROOT, &ROOT_CLASS); +} + void Request::core() { TRY { char *file="Y:\\parser3\\src\\test.p"; - String RUN(pool()); RUN.APPEND_CONST(NAME_RUN); + String RUN(pool()); RUN.APPEND_CONST(RUN_NAME); use(file, &RUN); char *result=execute_MAIN(); @@ -48,21 +69,19 @@ void Request::core() { END_CATCH } -void Request::use(char *file, String *alias) { +void Request::use(char *file, String *name) { + // TODO: обнаружить|решить cyclic dependences char *source=file_read(pool(), file); if(!source) THROW(0,0, 0, "use: can not read '%s' file", file); - VClass& vclass=COMPILE(source, alias, file); - String& vclass_name=vclass.name(); - //TODO: обнаружить, что грузят не объект, а операторы. - // загрузить операторы - classes_array()+=&vclass; - classes().put(vclass_name, &vclass); - if(alias) - classes().put(*alias, &vclass); + COMPILE(source, name, file); + // TODO: запустить @STATIC[], если есть + +// if(alias) + //classes().put(*alias, &vclass); } char *Request::execute_MAIN() { @@ -80,11 +99,11 @@ char *Request::execute_MAIN() { const Method *method=junction->method; if(method) { // and junction is method-junction! call it // initialize contexts - self=root=rcontext=vclass; + root=rcontext=self=vclass; wcontext=NEW WWrapper(pool(), vclass, false /* not constructing */); // execute! - execute(method->code); + execute(*method->parser_code); // return chars return wcontext->get_string()->cstr();