--- parser3/src/main/Attic/core.C 2001/02/24 15:35:28 1.36 +++ parser3/src/main/Attic/core.C 2001/03/08 11:27:49 1.43 @@ -1,5 +1,5 @@ /* -$Id: core.C,v 1.36 2001/02/24 15:35:28 paf Exp $ +$Id: core.C,v 1.43 2001/03/08 11:27:49 paf Exp $ */ #include "pa_request.h" @@ -15,10 +15,23 @@ void core() { request.core(); } +Request::Request(Pool& apool) : Pooled(apool), + stack(apool), + ROOT_CLASS(apool), + fclasses(apool), + fclasses_array(apool) +{ + // 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(); @@ -49,15 +62,18 @@ void Request::core() { } void Request::use(char *file, String *name) { + // TODO: обнаружить|решить cyclic dependences char *source=file_read(pool(), file); - VClass& vclass=COMPILE(source, file); - if(name) // they forced some name? - vclass.set_name(*name); - name=vclass.name(); - if(!name) - return; //TODO: add operators - classes_array()+=&vclass; - classes().put(*name, &vclass); + if(!source) + THROW(0,0, + 0, + "use: can not read '%s' file", file); + + COMPILE(source, name, file); + // TODO: запустить @STATIC[], если есть + +// if(alias) + //classes().put(*alias, &vclass); } char *Request::execute_MAIN() { @@ -75,8 +91,8 @@ char *Request::execute_MAIN() { const Method *method=junction->method; if(method) { // and junction is method-junction! call it // initialize contexts - self=root=rcontext=vclass; - wcontext=NEW WWrapper(pool(), vclass); + root=rcontext=self=vclass; + wcontext=NEW WWrapper(pool(), vclass, false /* not constructing */); // execute! execute(method->code);