|
|
| version 1.76, 2005/08/09 08:14:51 | version 1.80, 2008/08/15 15:26:14 |
|---|---|
| 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; | |
| //@} | //@} |
| /// output: filled input 'methods' and 'error' if any | /// output: filled input 'methods' and 'error' if any |
| Line 98 public: | Line 101 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 113 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) { | |
| *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; | |
| } | |
| } | |
| bool class_reuse(){ | |
| if(cclass_new){ | |
| if(Value* class_value=request.classes().get(cclass_new->name())){ | |
| if(VStateless_class* existed_class=class_value->get_class()) { | |
| cclass=existed_class; | |
| cclass_new=0; | |
| append=true; | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| return false; | |
| } | |
| void set_all_vars_local(){ | |
| if(cclass_new){ | |
| cclass_new->all_vars_local(); | |
| } else { | |
| cclass->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 184 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 198 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 214 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 231 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 240 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); |