|
|
| version 1.81.2.13.2.27, 2003/04/03 12:40:52 | version 1.81.2.13.2.31, 2003/04/04 06:33:26 |
|---|---|
| Line 1053 case 8: | Line 1053 case 8: |
| { | { |
| const String& command=*LA2S(*yyvsp[-2]); | const String& command=*LA2S(*yyvsp[-2]); |
| YYSTYPE strings_code=yyvsp[0]; | YYSTYPE strings_code=yyvsp[0]; |
| if(strings_code->count()<1*2) { | if(strings_code->count()<1*OPERATIONS_PER_OPVALUE) { |
| strcpy(PC.error, "@"); | strcpy(PC.error, "@"); |
| strcat(PC.error, command.cstr()); | strcat(PC.error, command.cstr()); |
| strcat(PC.error, " is empty"); | strcat(PC.error, " is empty"); |
| Line 1066 case 8: | Line 1066 case 8: |
| strcat(PC.error, "'"); | strcat(PC.error, "'"); |
| YYERROR; | YYERROR; |
| } | } |
| if(strings_code->count()==1*2) { | if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) { |
| // new class' name | // new class' name |
| const String& name=*LA2S(*strings_code); | const String& name=*LA2S(*strings_code); |
| // creating the class | // creating the class |
| Line 1076 case 8: | Line 1076 case 8: |
| // append to request's classes | // append to request's classes |
| PC.request.classes().put(name, cclass); | PC.request.classes().put(name, cclass); |
| } else { | } else { |
| strcpy(PC.error, "@"CLASS_NAME" must contain sole name"); | strcpy(PC.error, "@"CLASS_NAME" must contain only one line with class name (contains more then one)"); |
| YYERROR; | YYERROR; |
| } | } |
| } else if(command==USE_CONTROL_METHOD_NAME) { | } else if(command==USE_CONTROL_METHOD_NAME) { |
| for(size_t i=0; i<strings_code->count(); i+=2) | for(size_t i=0; i<strings_code->count(); i+=OPERATIONS_PER_OPVALUE) |
| PC.request.use_file(PC.request.main_class, *LA2S(*strings_code, i)); | PC.request.use_file(PC.request.main_class, *LA2S(*strings_code, i)); |
| } else if(command==BASE_NAME) { | } else if(command==BASE_NAME) { |
| if(PC.cclass->base_class()) { // already changed from default? | if(PC.cclass->base_class()) { // already changed from default? |
| Line 1089 case 8: | Line 1089 case 8: |
| strcat(PC.error, "'"); | strcat(PC.error, "'"); |
| YYERROR; | YYERROR; |
| } | } |
| if(strings_code->count()==1*2) { | if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) { |
| const String& base_name=*LA2S(*strings_code); | const String& base_name=*LA2S(*strings_code); |
| if(Value* base_class_value=PC.request.classes().get(base_name)) { | if(Value* base_class_value=PC.request.classes().get(base_name)) { |
| // @CLASS == @BASE sanity check | // @CLASS == @BASE sanity check |
| Line 1135 case 16: | Line 1135 case 16: |
| ArrayString* params_names=0; | ArrayString* params_names=0; |
| if(int size=params_names_code->count()) { | if(int size=params_names_code->count()) { |
| params_names=new ArrayString; | params_names=new ArrayString; |
| for(int i=0; i<size; i+=2) | for(int i=0; i<size; i+=OPERATIONS_PER_OPVALUE) |
| *params_names+=LA2S(*params_names_code, i); | *params_names+=LA2S(*params_names_code, i); |
| } | } |
| Line 1143 case 16: | Line 1143 case 16: |
| ArrayString* locals_names=0; | ArrayString* locals_names=0; |
| if(int size=locals_names_code->count()) { | if(int size=locals_names_code->count()) { |
| locals_names=new ArrayString; | locals_names=new ArrayString; |
| for(int i=0; i<size; i+=2) | for(int i=0; i<size; i+=OPERATIONS_PER_OPVALUE) |
| *locals_names+=LA2S(*locals_names_code, i); | *locals_names+=LA2S(*locals_names_code, i); |
| } | } |
| Line 1193 case 42: | Line 1193 case 42: |
| ArrayOperation* diving_code=yyvsp[0]; | ArrayOperation* diving_code=yyvsp[0]; |
| const String* first_name=LA2S(*diving_code); | const String* first_name=LA2S(*diving_code); |
| // self.xxx... -> xxx... | // self.xxx... -> xxx... |
| // OP_VALUE+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... | // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... |
| if(first_name && *first_name==SELF_ELEMENT_NAME) { | if(first_name && *first_name==SELF_ELEMENT_NAME) { |
| O(*yyval, OP_WITH_SELF); /* stack: starting context */ | O(*yyval, OP_WITH_SELF); /* stack: starting context */ |
| P(*yyval, *diving_code, | P(*yyval, *diving_code, |
| /* skip over... */ | /* skip over... */ |
| diving_code->count()>=3?3/*OP_VALUE+string+OP_GET_ELEMENTx*/:2/*OP_+string*/); | diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/); |
| } else { | } else { |
| O(*yyval, OP_WITH_READ); /* stack: starting context */ | O(*yyval, OP_WITH_READ); /* stack: starting context */ |
| // ^if ELEMENT -> ^if ELEMENT_OR_OPERATOR | // ^if ELEMENT -> ^if ELEMENT_OR_OPERATOR |
| // OP_VALUE+string+OP_GET_ELEMENT. -> OP_VALUE+string+OP_GET_ELEMENT_OR_OPERATOR. | // OP_VALUE+origin+string+OP_GET_ELEMENT. -> OP_VALUE+origin+string+OP_GET_ELEMENT_OR_OPERATOR. |
| if(PC.in_call_value && diving_code->count()==3) | if(PC.in_call_value && diving_code->count()==4) |
| diving_code->put(2, OP_GET_ELEMENT_OR_OPERATOR); | diving_code->put(4-1, OP_GET_ELEMENT_OR_OPERATOR); |
| P(*yyval, *diving_code); | P(*yyval, *diving_code); |
| } | } |
| /* diving code; stack: current context */ | /* diving code; stack: current context */ |
| Line 1233 case 50: | Line 1233 case 50: |
| ArrayOperation* diving_code=yyvsp[0]; | ArrayOperation* diving_code=yyvsp[0]; |
| const String* first_name=LA2S(*diving_code); | const String* first_name=LA2S(*diving_code); |
| // $self.xxx... -> $xxx... | // $self.xxx... -> $xxx... |
| // OP_VALUE+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... | // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... |
| if(first_name && *first_name==SELF_ELEMENT_NAME) { | if(first_name && *first_name==SELF_ELEMENT_NAME) { |
| O(*yyval, OP_WITH_SELF); /* stack: starting context */ | O(*yyval, OP_WITH_SELF); /* stack: starting context */ |
| P(*yyval, *diving_code, | P(*yyval, *diving_code, |
| /* skip over... */ | /* skip over... */ |
| diving_code->count()>=3?3/*OP_VALUE+string+OP_GET_ELEMENTx*/:2/*OP_+string*/); | diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/); |
| } else { | } else { |
| O(*yyval, OP_WITH_ROOT); /* stack: starting context */ | O(*yyval, OP_WITH_ROOT); /* stack: starting context */ |
| P(*yyval, *diving_code); | P(*yyval, *diving_code); |
| Line 1324 case 69: | Line 1324 case 69: |
| yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */ | yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */ |
| YYSTYPE params_code=yyvsp[-1]; | YYSTYPE params_code=yyvsp[-1]; |
| if(params_code->count()==3) { // probably [] case. [OP_VALUE + Void + STORE_PARAM] | if(params_code->count()==4) { // probably [] case. [OP_VALUE+origin+Void+STORE_PARAM] |
| if(Value* value=LA2V(*params_code)) // it is OP_VALUE + value? | if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value? |
| if(!value->is_defined()) // value is VVoid? | if(!value->is_defined()) // value is VVoid? |
| params_code=0; // ^zzz[] case. don't append lone empty param. | params_code=0; // ^zzz[] case. don't append lone empty param. |
| } | } |
| Line 2629 break2: | Line 2629 break2: |
| } | } |
| } | } |
| if(!pc.string.is_empty()) { // something accumulated? | if(!pc.string.is_empty()) { // something accumulated? |
| // create STRING value: array of OP_VALUE+vstring | // create STRING value: array of OP_VALUE+origin+vstring |
| *lvalp=VL( | *lvalp=VL( |
| new VString(*new String(pc.string, String::L_CLEAN)), | new VString(*new String(pc.string, String::L_CLEAN)), |
| pc.file_no, pc.string_start.line, pc.string_start.col); | pc.file_no, pc.string_start.line, pc.string_start.col); |