--- parser3/src/main/Attic/core.C 2001/02/25 14:23:32 1.40 +++ parser3/src/main/Attic/core.C 2001/03/10 11:18:15 1.49 @@ -1,5 +1,5 @@ /* -$Id: core.C,v 1.40 2001/02/25 14:23:32 paf Exp $ +$Id: core.C,v 1.49 2001/03/10 11:18:15 paf Exp $ */ #include "pa_request.h" @@ -8,17 +8,47 @@ $Id: core.C,v 1.40 2001/02/25 14:23:32 p #include "pa_vclass.h" #include +#include "classes/_root.h" +#include "classes/_env.h" +#include "classes/_string.h" +#include "classes/_double.h" +#include "classes/_int.h" void core() { Pool pool; + initialize_string_class(pool, *(string_class=new(pool) VClass(pool))); + initialize_double_class(pool, *(double_class=new(pool) VClass(pool))); + initialize_int_class(pool, *(int_class=new(pool) VClass(pool))); Request request(pool); request.core(); } +Request::Request(Pool& apool) : Pooled(apool), + stack(apool), + root_class(apool), + env_class(apool), + fclasses(apool), + fclasses_array(apool), + lang(String::Untaint_lang::HTML_TYPO) +{ + // root class + initialize_root_class(pool(), root_class); + // adding root superclass, + // parent of all classes, + // operators holder + String ROOT(pool()); ROOT.APPEND_CONST(ROOT_NAME); + classes().put(ROOT, &root_class); + + // env class + initialize_env_class(pool(), env_class); + String ENV(pool()); ENV.APPEND_CONST(ENV_NAME); + classes().put(ENV, &env_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 +78,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 +108,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();