Diff for /parser3/src/main/compile_tools.h between versions 1.76 and 1.82

version 1.76, 2005/08/09 08:14:51 version 1.82, 2009/04/17 09:03:25
Line 1 Line 1
 /** @file  /** @file
         Parser: compiler support helper functions decls.          Parser: compiler support helper functions decls.
   
         Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
 */  */
   
Line 62  public: Line 62  public:
         /// @name input          /// @name input
         Request& request;          Request& request;
         VStateless_class* cclass;          VStateless_class* cclass;
           VStateless_class* cclass_new;
           ArrayClass* cclasses;
         const char* source;          const char* source;
         uint file_no;          uint file_no;
         Pos pos;          Pos pos;
Line 81  public: Line 83  public:
   
         bool in_call_value;          bool in_call_value;
         bool explicit_result;          bool explicit_result;
           bool append;
           bool write_to_result;
         //@}          //@}
                   
         /// output: filled input 'methods' and 'error' if any          /// output: filled input 'methods' and 'error' if any
Line 98  public: Line 102  public:
   
                 // we were told the class to compile to?                  // we were told the class to compile to?
                 cclass(aclass), // until changed with @CLASS would consider operators loading                  cclass(aclass), // until changed with @CLASS would consider operators loading
                   cclass_new(0)
                   cclasses(new ArrayClass(1)),
                 source(asource),                   source(asource), 
                 file_no(afile_no),                  file_no(afile_no),
                 pos(line_no_offset, 0),                  pos(line_no_offset, 0),
Line 108  public: Line 114  public:
                 ls(LS_USER),                  ls(LS_USER),
                 ls_sp(0),                  ls_sp(0),
                 in_call_value(false),                  in_call_value(false),
                 explicit_result(false) {}                  explicit_result(false),
                   append(false),
                   write_to_result(false) {
   
                   *cclasses+=aclass;
           }
   
           void class_add(){
                   if(cclass_new){
                           cclass=cclass_new;
                           // append to request's classes
                           request.classes().put(cclass->name(), cclass);
                           *cclasses+=cclass;
                           cclass_new=0;
                           append=false;
                   }
           }
   
           VStateless_class* get_existed_class(VStateless_class* aclass){
                   if(aclass){
                           if(Value* class_value=request.classes().get(aclass->name())){
                                   return class_value->get_class();
                           }
                   }
                   return 0;
           }
   
           bool reuse_existed_class(VStateless_class* aclass){
                   if(aclass->is_partial()){
                           cclass=aclass;
                           cclass_new=0;
                           append=true;
                           return true;
                   } else {
                           return false;
                   }
           }
   
           void set_all_vars_local(){
                   if(cclass_new){
                           cclass_new->set_all_vars_local();
                   } else {
                           cclass->set_all_vars_local();
                   }
           }
   
         void pos_next_line() {          void pos_next_line() {
                 pos.line++;                  pos.line++;
                 last_line_end_col=pos.col;                  last_line_end_col=pos.col;
                 pos.col=0;                  pos.col=0;
         }          }
         void pos_next_c(char c) {          void pos_next_c(int c) {
                 if(c=='\t')                  if(c=='\t')
                         pos.col=(pos.col+TAB_SIZE)&~(TAB_SIZE-1);                          pos.col=(pos.col+TAB_SIZE)&~(TAB_SIZE-1);
                 else                  else
Line 140  inline ArrayOperation* N() { Line 190  inline ArrayOperation* N() {
 }  }
   
 /// Assembler instruction // append ordinary instruction to ops  /// Assembler instruction // append ordinary instruction to ops
 inline void O(ArrayOperation& result, OPCODE code) {  inline void O(ArrayOperation& result, OP::OPCODE code) {
         result+=Operation(code);          result+=Operation(code);
 }  }
   
Line 154  inline void P(ArrayOperation& result, Ar Line 204  inline void P(ArrayOperation& result, Ar
 }  }
   
 /// append cOde Array  /// append cOde Array
 inline void OA(ArrayOperation& result, OPCODE code, ArrayOperation* code_array) {  inline void OA(ArrayOperation& result, OP::OPCODE code, ArrayOperation* code_array) {
         result+=Operation(code); // append OP_CODE          result+=Operation(code); // append OP_CODE
         result+=Operation(code_array); // append 'code_array'          result+=Operation(code_array); // append 'code_array'
 }  }
Line 170  inline ArrayOperation* VL(Value* value, Line 220  inline ArrayOperation* VL(Value* value,
         ArrayOperation& result=*N();          ArrayOperation& result=*N();
   
         // append 'value' to 'result'          // append 'value' to 'result'
         result+=Operation(OP_VALUE);          result+=Operation(OP::OP_VALUE);
         result+=Operation(file_no, line, col); // append origin          result+=Operation(file_no, line, col); // append origin
         result+=Operation(value); // append 'value'          result+=Operation(value); // append 'value'
   
Line 187  inline const String* LA2S(ArrayOperation Line 237  inline const String* LA2S(ArrayOperation
 }  }
   
 inline void change_string_literal_to_write_string_literal(ArrayOperation& literal_string_array) {  inline void change_string_literal_to_write_string_literal(ArrayOperation& literal_string_array) {
         literal_string_array.put(0, OP_STRING__WRITE);          literal_string_array.put(0, OP::OP_STRING__WRITE);
 }  }
   
   
Line 196  void maybe_change_string_literal_to_doub Line 246  void maybe_change_string_literal_to_doub
 void change_string_literal_value(ArrayOperation& literal_string_array, const String& new_value);  void change_string_literal_value(ArrayOperation& literal_string_array, const String& new_value);
   
 void changetail_or_append(ArrayOperation& opcodes,   void changetail_or_append(ArrayOperation& opcodes, 
                                                   OPCODE find, bool with_argument, OPCODE replace, OPCODE notfound);                                                    OP::OPCODE find, bool with_argument, OP::OPCODE replace, OP::OPCODE notfound);
   
   
 void push_LS(Parse_control& pc, lexical_state new_state);  void push_LS(Parse_control& pc, lexical_state new_state);

Removed from v.1.76  
changed lines
  Added in v.1.82


E-mail: