Diff for /parser3/src/main/pa_request.C between versions 1.19 and 1.27

version 1.19, 2001/03/12 17:00:48 version 1.27, 2001/03/13 16:38:24
Line 23  Request::Request(Pool& apool) : Pooled(a Line 23  Request::Request(Pool& apool) : Pooled(a
         stack(apool),          stack(apool),
         root_class(apool),          root_class(apool),
         env_class(apool),          env_class(apool),
           form_class(apool),
         fclasses(apool),          fclasses(apool),
         fclasses_array(apool),  
         flang(String::Untaint_lang::HTML_TYPO)          flang(String::Untaint_lang::HTML_TYPO)
 {  {
         // root class          // root superclass, 
         initialize_root_class(pool(), root_class);  
         // adding root superclass,   
         //   parent of all classes,           //   parent of all classes, 
         //   operators holder          //   operators holder
           initialize_root_class(pool(), root_class);
         classes().put(*root_class_name, &root_class);          classes().put(*root_class_name, &root_class);
         //root_class.set_name(*root_class_name);  
   
         // env class  
         initialize_env_class(pool(), env_class);  
         classes().put(*env_class_name, &env_class);  
   
         // table class          // table class
         classes().put(*table_class_name, table_class);            classes().put(*table_class_name, table_class);  
         table_class->set_name(*table_class_name);  //      table_class->set_name(*table_class_name);
   
           // env class
           classes().put(*env_class_name, &env_class);
           // form class
           classes().put(*form_class_name, &form_class);   
   
         // web          // web
         // todo: ifdef WIN32 flip \\ to /          // TODO: ifdef WIN32 flip \\ to /
         document_root="Y:/parser3/src/";          document_root="Y:/parser3/src/";
         page_filespec="Y:/parser3/src/test.p";          page_filespec="Y:/parser3/src/test.p";
 }  }
Line 54  void Request::core() { Line 51  void Request::core() {
         TRY {          TRY {
                 // loading system auto.p                  // loading system auto.p
                 char *sys_auto_file="C:\\temp\\auto.p";                  char *sys_auto_file="C:\\temp\\auto.p";
                 VClass *main_class=use_file(                  VStateless_class *main_class=use_file(
                         sys_auto_file, false/*ignore possible read problem*/,                          sys_auto_file, false/*ignore possible read problem*/,
                         0/*new class*/, main_class_name);                          main_class_name);
   
                 // TODO: использовать $MAIN:limits здесь, пока их не сломали враги                  // TODO: использовать $MAIN:limits здесь, пока их не сломали враги
   
Line 64  void Request::core() { Line 61  void Request::core() {
                 char *site_auto_file="Y:\\parser3\\src\\auto.p";                  char *site_auto_file="Y:\\parser3\\src\\auto.p";
                 main_class=use_file(                  main_class=use_file(
                         site_auto_file, false/*ignore possible read problem*/,                          site_auto_file, false/*ignore possible read problem*/,
                         0/*new class*/, main_class_name, main_class);                          main_class_name, main_class);
   
                 // there must be some auto.p                  // there must be some auto.p
                 if(!main_class)                  if(!main_class)
                         THROW(0,0,                          THROW(0,0,
                                 0,                                  0,
                                 "'auto.p' not found");                                  "no 'auto.p' found (nither system nor any site's)");
   
                 // compiling requested file                  // compiling requested file
                 use_file(page_filespec, true/*don't ignore read problem*/,                  main_class=use_file(page_filespec, true/*don't ignore read problem*/,
                         0/*new class*/, main_class_name, main_class);                          main_class_name, main_class);
   
                   // execute @main[]
                   char *result=execute_method(*main_class, *main_method_name, 
                           true /*result needed*/);
                   if(!result)
                           THROW(0,0,
                           0, 
                           "'"MAIN_METHOD_NAME"' method not found");
   
                 // executing some @main[]  
                 char *result=execute_MAIN();  
                 printf("result-----------------\n%sEOF----------------\n", result);                  printf("result-----------------\n%sEOF----------------\n", result);
         }           } 
         CATCH(e) {          CATCH(e) {
Line 106  void Request::core() { Line 109  void Request::core() {
         END_CATCH          END_CATCH
 }  }
   
 VClass *Request::use_file(  VStateless_class *Request::use_file(
                                                   const char *file, bool fail_on_read_problem,                                                                          const char *file, bool fail_on_read_problem,
                                                   VClass *aclass, const String *name,                                                                           const String *name, 
                                                   VClass *base_class) {                                                                          VStateless_class *base_class) {
         // TODO: обнаружить|решить cyclic dependences          // TODO: обнаружить|решить cyclic dependences
         char *source=file_read(pool(), file, fail_on_read_problem);          char *source=file_read(pool(), file, fail_on_read_problem);
         if(!source)          if(!source)
                 return base_class;                  return base_class;
   
         return use_buf(source, file, aclass, name, base_class);          return use_buf(source, file, 0/*new class*/, name, base_class);
 }  }
   
 VClass *Request::use_buf(  VStateless_class *Request::use_buf(
                                                   const char *source, const char *file,                                                                     const char *source, const char *file,
                                                   VClass *aclass, const String *name,                                                                      VStateless_class *aclass, const String *name, 
                                                   VClass *base_class) {                                                                     VStateless_class *base_class) {
         // compile loaded class          // compile loaded class
         VClass& cclass=COMPILE(source, aclass, name, base_class, file);          VStateless_class& cclass=COMPILE(source, aclass, name, base_class, file);
   
         // locate and execute possible @auto[] static method          // locate and execute possible @auto[] static method
         execute_static_method(cclass, *auto_method_name, false /*no result needed*/);          execute_method(cclass, *auto_method_name, false /*no result needed*/);
         return &cclass;          return &cclass;
 }  }
   
 char *Request::execute_MAIN() {  void Request::fail_if_junction_(bool is, 
         // locate class with @main[] & execute it                                                                  Value& value, const String& method_name, char *msg) {
         for(int i=classes_array().size(); --i>=0;) {  
                 VClass *vclass=static_cast<VClass *>(classes_array().get(i));          // fail_if_junction(true, junction = fail
                 char *result=execute_static_method(*vclass, *main_method_name, true /*result needed*/);          // fail_if_junction(false, not junction = fail
                 if(result)          if((value.get_junction()!=0) ^ !is)
                         return result;                  THROW(0, 0,
         }                          &method_name,
                                   msg);
         THROW(0,0,  
                 0,   
                 "'"MAIN_METHOD_NAME"' method not found");  
         return 0;  
 }  }
   
 char *Request::relative(const char *path, const char *file) {  char *Request::relative(const char *path, const char *file) {
     char *result=static_cast<char *>(malloc(strlen(path)+strlen(file)+1));      char *result=(char *)malloc(strlen(path)+strlen(file)+1);
         strcpy(result, path);          strcpy(result, path);
     rsplit(result,'/');      rsplit(result,'/');
     strcat(result, "/");      strcat(result, "/");
Line 156  char *Request::relative(const char *path Line 155  char *Request::relative(const char *path
   
 char *Request::absolute(const char *name) {  char *Request::absolute(const char *name) {
         if(name[0]=='/') {          if(name[0]=='/') {
                 char *result=static_cast<char *>(malloc(strlen(document_root)+strlen(name)+1));                  char *result=(char *)malloc(strlen(document_root)+strlen(name)+1);
                 strcpy(result, document_root);                  strcpy(result, document_root);
                 strcat(result, name);                  strcat(result, name);
                 return result;                  return result;

Removed from v.1.19  
changed lines
  Added in v.1.27


E-mail: