|
|
| version 1.138, 2009/06/04 09:42:23 | version 1.147, 2010/04/28 17:56:22 |
|---|---|
| Line 459 static const unsigned short int yyrline[ | Line 459 static const unsigned short int yyrline[ |
| 0, 132, 132, 139, 141, 141, 142, 144, 144, 146, | 0, 132, 132, 139, 141, 141, 142, 144, 144, 146, |
| 247, 247, 248, 248, 249, 250, 250, 252, 252, 302, | 247, 247, 248, 248, 249, 250, 250, 252, 252, 302, |
| 302, 303, 304, 304, 305, 305, 307, 307, 311, 311, | 302, 303, 304, 304, 305, 305, 307, 307, 311, 311, |
| 313, 313, 314, 314, 315, 315, 315, 319, 353, 354, | 313, 313, 314, 314, 315, 315, 315, 319, 360, 361, |
| 354, 355, 357, 358, 359, 417, 418, 418, 422, 435, | 361, 362, 364, 365, 366, 419, 420, 420, 424, 437, |
| 436, 437, 438, 455, 460, 463, 464, 465, 467, 470, | 438, 439, 440, 466, 471, 474, 475, 476, 478, 481, |
| 467, 478, 486, 493, 494, 495, 497, 503, 504, 504, | 478, 489, 497, 504, 505, 506, 508, 514, 515, 515, |
| 508, 519, 522, 519, 550, 552, 552, 554, 555, 556, | 519, 531, 534, 531, 578, 580, 580, 582, 583, 584, |
| 558, 561, 558, 564, 565, 567, 568, 571, 572, 575, | 586, 589, 586, 592, 593, 595, 596, 599, 600, 603, |
| 576, 578, 581, 595, 600, 601, 602, 607, 607, 609, | 604, 606, 609, 623, 628, 629, 630, 635, 635, 637, |
| 609, 610, 611, 619, 624, 627, 628, 629, 630, 632, | 637, 638, 639, 647, 652, 655, 656, 657, 658, 660, |
| 636, 645, 648, 645, 656, 661, 661, 662, 668, 669, | 664, 673, 676, 673, 684, 689, 689, 690, 696, 697, |
| 671, 688, 700, 702, 703, 704, 705, 706, 707, 708, | 699, 716, 728, 730, 731, 732, 733, 734, 735, 736, |
| 709, 711, 712, 713, 714, 715, 716, 717, 718, 720, | 737, 739, 740, 741, 742, 743, 744, 745, 746, 748, |
| 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, | 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, |
| 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, | 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, |
| 741, 742, 743, 744, 745, 746, 749, 754, 775, 780, | 769, 770, 771, 772, 773, 774, 777, 782, 803, 808, |
| 781, 782, 784 | 809, 810, 812 |
| }; | }; |
| #endif | #endif |
| Line 1430 yyreduce: | Line 1430 yyreduce: |
| case 2: | case 2: |
| #line 132 "compile.y" | #line 132 "compile.y" |
| { | { |
| Method& method=*new Method(Method::CT_ANY, | Method* method=new Method(Method::CT_ANY, |
| 0, 0, /*min, max numbered_params_count*/ | 0, 0, /*min, max numbered_params_count*/ |
| 0/*param_names*/, 0/*local_names*/, | 0/*param_names*/, 0/*local_names*/, |
| yyvsp[0]/*parser_code*/, 0/*native_code*/); | yyvsp[0]/*parser_code*/, 0/*native_code*/); |
| PC.cclass->add_method(PC.alias_method(main_method_name), method); | PC.cclass->set_method(PC.alias_method(main_method_name), method); |
| ;} | ;} |
| break; | break; |
| Line 1480 yyreduce: | Line 1480 yyreduce: |
| } | } |
| if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) { | 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.get_class(base_name)) { |
| // @CLASS == @BASE sanity check | // @CLASS == @BASE sanity check |
| if(VStateless_class *base_class=base_class_value->get_class()) { | if(VStateless_class *base_class=base_class_value->get_class()) { |
| if(PC.cclass==base_class) { | if(PC.cclass==base_class) { |
| Line 1595 yyreduce: | Line 1595 yyreduce: |
| case 18: | case 18: |
| #line 292 "compile.y" | #line 292 "compile.y" |
| { | { |
| Method& method=*reinterpret_cast<Method*>(yyvsp[-1]); | Method* method=reinterpret_cast<Method*>(yyvsp[-1]); |
| // fill in the code | // fill in the code |
| method.parser_code=yyvsp[0]; | method->parser_code=yyvsp[0]; |
| // register in class | // register in class |
| const String& name=*LA2S(*yyvsp[-6]); | const String& name=*LA2S(*yyvsp[-6]); |
| PC.cclass->add_method(PC.alias_method(name), method); | PC.cclass->set_method(PC.alias_method(name), method); |
| ;} | ;} |
| break; | break; |
| Line 1625 yyreduce: | Line 1625 yyreduce: |
| { | { |
| yyval=N(); | yyval=N(); |
| YYSTYPE code=yyvsp[0]; | YYSTYPE code=yyvsp[0]; |
| size_t count=code->count(); | |
| #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT |
| if(!maybe_change_first_opcode(*code, OP::OP_VALUE__GET_ELEMENT, /*=>*/OP::OP_VALUE__GET_ELEMENT__WRITE)) | if( |
| count!=3 | |
| || !maybe_change_first_opcode(*code, OP::OP_VALUE__GET_ELEMENT, /*=>*/OP::OP_VALUE__GET_ELEMENT__WRITE) | |
| ) | |
| #endif | #endif |
| #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT |
| if(!maybe_change_first_opcode(*code, OP::OP_WITH_SELF__VALUE__GET_ELEMENT, /*=>*/OP::OP_WITH_SELF__VALUE__GET_ELEMENT__WRITE)) | if( |
| count!=3 | |
| || !maybe_change_first_opcode(*code, OP::OP_WITH_SELF__VALUE__GET_ELEMENT, /*=>*/OP::OP_WITH_SELF__VALUE__GET_ELEMENT__WRITE) | |
| ) | |
| #endif | #endif |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT |
| if( | if( |
| code->count()!=5 | count!=5 |
| || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_ELEMENT, /*=>*/OP::OP_GET_OBJECT_ELEMENT__WRITE) | || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_ELEMENT, /*=>*/OP::OP_GET_OBJECT_ELEMENT__WRITE) |
| ) | ) |
| #endif | #endif |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT |
| if( | if( |
| code->count()!=5 | count!=5 |
| || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_VAR_ELEMENT, /*=>*/OP::OP_GET_OBJECT_VAR_ELEMENT__WRITE) | || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_VAR_ELEMENT, /*=>*/OP::OP_GET_OBJECT_VAR_ELEMENT__WRITE) |
| ) | ) |
| #endif | #endif |
| { | { |
| changetail_or_append(*code, | changetail_or_append(*code, |
| OP::OP_GET_ELEMENT, false, /*=>*/OP::OP_GET_ELEMENT__WRITE, | OP::OP_GET_ELEMENT, false, /*=>*/OP::OP_GET_ELEMENT__WRITE, |
| /*or */OP::OP_WRITE_VALUE | /*or */OP::OP_WRITE_VALUE |
| ); /* value=pop; wcontext.write(value) */ | ); /* value=pop; wcontext.write(value) */ |
| } | } |
| P(*yyval, *code); | P(*yyval, *code); |
| ;} | ;} |
| break; | break; |
| case 38: | case 38: |
| #line 353 "compile.y" | #line 360 "compile.y" |
| { yyval=yyvsp[0] ;} | { yyval=yyvsp[0] ;} |
| break; | break; |
| case 41: | case 41: |
| #line 355 "compile.y" | #line 362 "compile.y" |
| { yyval=yyvsp[-1] ;} | { yyval=yyvsp[-1] ;} |
| break; | break; |
| case 44: | case 44: |
| #line 359 "compile.y" | #line 366 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| YYSTYPE diving_code=yyvsp[0]; | YYSTYPE diving_code=yyvsp[0]; |
| const String* first_name=LA2S(*diving_code); | |
| size_t count=diving_code->count(); | size_t count=diving_code->count(); |
| // self.xxx... => xxx... | |
| // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... | if(maybe_make_self(*yyval, *diving_code, count)) { |
| if(first_name && *first_name==SELF_ELEMENT_NAME) { | // $self. |
| #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT | } else |
| if(maybe_make_with_self_get_element(*yyval, *diving_code, count)){ | |
| // optimization for $self.field and ^self.method | |
| } else | |
| #endif | |
| { | |
| O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */ | |
| P(*yyval, *diving_code, | |
| /* skip over... */ | |
| count>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/); | |
| } | |
| } | |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT |
| else if(maybe_make_get_object_element(*yyval, *diving_code, count)){ | if(maybe_make_get_object_element(*yyval, *diving_code, count)){ |
| // optimization for $object.field + ^object.method[ | // optimization for $object.field + ^object.method[ |
| } | } else |
| #endif | #endif |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT |
| else if(maybe_make_get_object_var_element(*yyval, *diving_code, count)){ | if(maybe_make_get_object_var_element(*yyval, *diving_code, count)){ |
| // optimization for $object.$var | // optimization for $object.$var |
| } | } else |
| #endif | #endif |
| #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT |
| else if(count==4){ // optimization | if( |
| count>=4 | |
| && (*diving_code)[0].code==OP::OP_VALUE | |
| && (*diving_code)[3].code==OP::OP_GET_ELEMENT | |
| ){ | |
| // optimization | |
| O(*yyval, | O(*yyval, |
| (PC.in_call_value) | (PC.in_call_value && count==4) |
| ? OP::OP_VALUE__GET_ELEMENT_OR_OPERATOR // ^object[ : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT_OR_OPERATOR+origin+string | ? OP::OP_VALUE__GET_ELEMENT_OR_OPERATOR // ^object[ : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT_OR_OPERATOR+origin+string |
| : OP::OP_VALUE__GET_ELEMENT // $object : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT+origin+string | : OP::OP_VALUE__GET_ELEMENT // $object : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT+origin+string |
| ); | ); |
| P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value | P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value |
| if(count>4) | |
| P(*yyval, *diving_code, 4); // copy tail | |
| } else { | } else { |
| O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ | O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ |
| P(*yyval, *diving_code); | P(*yyval, *diving_code); |
| } | } |
| #else | #else |
| else { | { |
| O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ | O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ |
| // ^if OP_ELEMENT => ^if OP_ELEMENT_OR_OPERATOR | // ^if OP_ELEMENT => ^if OP_ELEMENT_OR_OPERATOR |
| Line 1731 yyreduce: | Line 1733 yyreduce: |
| break; | break; |
| case 45: | case 45: |
| #line 417 "compile.y" | #line 419 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 47: | case 47: |
| #line 418 "compile.y" | #line 420 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 48: | case 48: |
| #line 422 "compile.y" | #line 424 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| #ifdef OPTIMIZE_BYTECODE_CONSTRUCT | #ifdef OPTIMIZE_BYTECODE_CONSTRUCT |
| if(maybe_optimize_construct(*yyval, *yyvsp[-1], *yyvsp[0])){ | if(maybe_optimize_construct(*yyval, *yyvsp[-1], *yyvsp[0])){ |
| // $a(expr), $.a(expr), $a[value], $.a[value] | // $a(expr), $.a(expr), $a[value], $.a[value], $self.a[value], $self.a(expr) |
| } else | } else |
| #endif | #endif |
| { | { |
| Line 1757 yyreduce: | Line 1759 yyreduce: |
| break; | break; |
| case 52: | case 52: |
| #line 438 "compile.y" | #line 440 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| YYSTYPE diving_code=yyvsp[0]; | YYSTYPE diving_code=yyvsp[0]; |
| const String* first_name=LA2S(*diving_code); | size_t count=diving_code->count(); |
| // $self.xxx... => $xxx... | |
| // OP_VALUE+origin+string+OP_GET_ELEMENT+... => OP_WITH_SELF+... | if(maybe_make_self(*yyval, *diving_code, count)) { |
| if(first_name && *first_name==SELF_ELEMENT_NAME) { | // $self. |
| O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */ | } else |
| P(*yyval, *diving_code, | #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT |
| /* skip over... */ | if( |
| diving_code->count()>=4?4/*OP::OP_VALUE+origin+string+OP::OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/); | count>=4 |
| } else { | && (*diving_code)[0].code==OP::OP_VALUE |
| && (*diving_code)[3].code==OP::OP_GET_ELEMENT | |
| ){ | |
| O(*yyval, OP::OP_WITH_ROOT__VALUE__GET_ELEMENT); | |
| P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value | |
| if(count>4) | |
| P(*yyval, *diving_code, 4); // tail | |
| } else | |
| #endif | |
| { | |
| O(*yyval, OP::OP_WITH_ROOT); /* stack: starting context */ | O(*yyval, OP::OP_WITH_ROOT); /* stack: starting context */ |
| P(*yyval, *diving_code); | P(*yyval, *diving_code); |
| } | } |
| Line 1778 yyreduce: | Line 1789 yyreduce: |
| break; | break; |
| case 53: | case 53: |
| #line 455 "compile.y" | #line 466 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| O(*yyval, OP::OP_WITH_WRITE); /* stack: starting context */ | O(*yyval, OP::OP_WITH_WRITE); /* stack: starting context */ |
| Line 1787 yyreduce: | Line 1798 yyreduce: |
| break; | break; |
| case 54: | case 54: |
| #line 460 "compile.y" | #line 471 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 58: | case 58: |
| #line 467 "compile.y" | #line 478 "compile.y" |
| { | { |
| // allow $result_or_other_variable[ letters here any time ] | // allow $result_or_other_variable[ letters here any time ] |
| *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; | *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; |
| Line 1800 yyreduce: | Line 1811 yyreduce: |
| break; | break; |
| case 59: | case 59: |
| #line 470 "compile.y" | #line 481 "compile.y" |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); | PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); |
| ;} | ;} |
| break; | break; |
| case 60: | case 60: |
| #line 472 "compile.y" | #line 483 "compile.y" |
| { | { |
| // stack: context, name | // stack: context, name |
| yyval=yyvsp[-2]; // stack: context, name, value | yyval=yyvsp[-2]; // stack: context, name, value |
| Line 1816 yyreduce: | Line 1827 yyreduce: |
| break; | break; |
| case 61: | case 61: |
| #line 478 "compile.y" | #line 489 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| O(*yyval, OP::OP_PREPARE_TO_EXPRESSION); | O(*yyval, OP::OP_PREPARE_TO_EXPRESSION); |
| Line 1827 yyreduce: | Line 1838 yyreduce: |
| break; | break; |
| case 62: | case 62: |
| #line 486 "compile.y" | #line 497 "compile.y" |
| { | { |
| // stack: context, name | // stack: context, name |
| yyval=N(); | yyval=N(); |
| Line 1836 yyreduce: | Line 1847 yyreduce: |
| break; | break; |
| case 66: | case 66: |
| #line 497 "compile.y" | #line 508 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */ | OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */ |
| Line 1846 yyreduce: | Line 1857 yyreduce: |
| break; | break; |
| case 69: | case 69: |
| #line 504 "compile.y" | #line 515 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 70: | case 70: |
| #line 508 "compile.y" | #line 519 "compile.y" |
| { | { |
| #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR | #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR |
| if((*yyvsp[0]).count()) | if((*yyvsp[0]).count()) |
| #endif | #endif |
| { | { |
| yyval=yyvsp[0]; /* stack: value */ | yyval=yyvsp[0]; /* stack: value */ |
| changetail_or_append(*yyval, | if(!maybe_change_first_opcode(*yyval, OP::OP_CONSTRUCT_OBJECT, /*=>*/OP::OP_CONSTRUCT_OBJECT__WRITE)) |
| OP::OP_CALL, true, /*=>*/ OP::OP_CALL__WRITE, | changetail_or_append(*yyval, |
| /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | OP::OP_CALL, true, /*=>*/ OP::OP_CALL__WRITE, |
| /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | |
| } | } |
| ;} | ;} |
| break; | break; |
| case 71: | case 71: |
| #line 519 "compile.y" | #line 531 "compile.y" |
| { | { |
| PC.in_call_value=true; | PC.in_call_value=true; |
| ;} | ;} |
| break; | break; |
| case 72: | case 72: |
| #line 522 "compile.y" | #line 534 "compile.y" |
| { | { |
| PC.in_call_value=false; | PC.in_call_value=false; |
| ;} | ;} |
| break; | break; |
| case 73: | case 73: |
| #line 525 "compile.y" | #line 537 "compile.y" |
| { /* ^field.$method{vasya} */ | { /* ^field.$method{vasya} */ |
| #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR | #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR |
| #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT | #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT |
| Line 1888 yyreduce: | Line 1900 yyreduce: |
| #else | #else |
| const String* operator_name=LA2S(*yyvsp[-3], 1); | const String* operator_name=LA2S(*yyvsp[-3], 1); |
| #endif | #endif |
| if(operator_name && *operator_name == REM_OPERATOR_NAME){ | if(operator_name && *operator_name==REM_OPERATOR_NAME){ |
| yyval=N(); | yyval=N(); |
| } else | } else |
| #endif | #endif |
| { | { |
| 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::OP_VALUE+origin+Void] | if(params_code->count()==3) { // probably [] case. [OP::OP_VALUE+origin+Void] |
| if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value? | if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value? |
| Line 1902 yyreduce: | Line 1912 yyreduce: |
| params_code=0; // ^zzz[] case. don't append lone empty param. | params_code=0; // ^zzz[] case. don't append lone empty param. |
| } | } |
| /* stack: context, method_junction */ | /* stack: context, method_junction */ |
| OA(*yyval, OP::OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value | |
| YYSTYPE var_code=yyvsp[-3]; | |
| if( | |
| var_code->count()==8 | |
| && (*var_code)[0].code==OP::OP_VALUE__GET_CLASS | |
| && (*var_code)[3].code==OP::OP_PREPARE_TO_CONSTRUCT_OBJECT | |
| && (*var_code)[4].code==OP::OP_VALUE | |
| && (*var_code)[7].code==OP::OP_GET_ELEMENT | |
| ){ | |
| yyval=N(); | |
| O(*yyval, OP::OP_CONSTRUCT_OBJECT); | |
| P(*yyval, *var_code, 1/*offset*/, 2/*limit*/); // class name | |
| P(*yyval, *var_code, 5/*offset*/, 2/*limit*/); // constructor name | |
| OA(*yyval, params_code); | |
| } else | |
| { | |
| yyval=var_code; /* with_xxx,diving code; stack: context,method_junction */ | |
| OA(*yyval, OP::OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value | |
| } | |
| } | } |
| ;} | ;} |
| break; | break; |
| case 76: | case 76: |
| #line 552 "compile.y" | #line 580 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 80: | case 80: |
| #line 558 "compile.y" | #line 586 "compile.y" |
| { | { |
| // allow ^call[ letters here any time ] | // allow ^call[ letters here any time ] |
| *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; | *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; |
| Line 1921 yyreduce: | Line 1949 yyreduce: |
| break; | break; |
| case 81: | case 81: |
| #line 561 "compile.y" | #line 589 "compile.y" |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); | PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); |
| ;} | ;} |
| break; | break; |
| case 82: | case 82: |
| #line 563 "compile.y" | #line 591 "compile.y" |
| {yyval=yyvsp[-2];} | {yyval=yyvsp[-2];} |
| break; | break; |
| case 83: | case 83: |
| #line 564 "compile.y" | #line 592 "compile.y" |
| {yyval=yyvsp[-1];} | {yyval=yyvsp[-1];} |
| break; | break; |
| case 84: | case 84: |
| #line 565 "compile.y" | #line 593 "compile.y" |
| {yyval=yyvsp[-1];} | {yyval=yyvsp[-1];} |
| break; | break; |
| case 86: | case 86: |
| #line 568 "compile.y" | #line 596 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 88: | case 88: |
| #line 572 "compile.y" | #line 600 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 90: | case 90: |
| #line 576 "compile.y" | #line 604 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 91: | case 91: |
| #line 578 "compile.y" | #line 606 "compile.y" |
| { | { |
| yyval=yyvsp[0]; | yyval=yyvsp[0]; |
| ;} | ;} |
| break; | break; |
| case 92: | case 92: |
| #line 581 "compile.y" | #line 609 "compile.y" |
| { | { |
| YYSTYPE expr_code=yyvsp[0]; | YYSTYPE expr_code=yyvsp[0]; |
| if(expr_code->count()==3 | if(expr_code->count()==3 |
| Line 1983 yyreduce: | Line 2011 yyreduce: |
| break; | break; |
| case 93: | case 93: |
| #line 595 "compile.y" | #line 623 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| OA(*yyval, OP::OP_CURLY_CODE__STORE_PARAM, yyvsp[0]); | OA(*yyval, OP::OP_CURLY_CODE__STORE_PARAM, yyvsp[0]); |
| Line 1991 yyreduce: | Line 2019 yyreduce: |
| break; | break; |
| case 98: | case 98: |
| #line 607 "compile.y" | #line 635 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 100: | case 100: |
| #line 609 "compile.y" | #line 637 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 102: | case 102: |
| #line 611 "compile.y" | #line 639 "compile.y" |
| { | { |
| // we know that name_advance1 not called from ^xxx context | // we know that name_advance1 not called from ^xxx context |
| // so we'll not check for operator call possibility as we do in name_advance2 | // so we'll not check for operator call possibility as we do in name_advance2 |
| Line 2013 yyreduce: | Line 2041 yyreduce: |
| break; | break; |
| case 103: | case 103: |
| #line 619 "compile.y" | #line 647 "compile.y" |
| { | { |
| /* stack: context */ | /* stack: context */ |
| yyval=yyvsp[0]; /* stack: context,name */ | yyval=yyvsp[0]; /* stack: context,name */ |
| Line 2022 yyreduce: | Line 2050 yyreduce: |
| break; | break; |
| case 109: | case 109: |
| #line 632 "compile.y" | #line 660 "compile.y" |
| { | { |
| yyval=yyvsp[0]; | yyval=yyvsp[0]; |
| O(*yyval, OP::OP_GET_ELEMENT); | O(*yyval, OP::OP_GET_ELEMENT); |
| Line 2030 yyreduce: | Line 2058 yyreduce: |
| break; | break; |
| case 110: | case 110: |
| #line 636 "compile.y" | #line 664 "compile.y" |
| { | { |
| YYSTYPE code; | YYSTYPE code; |
| { | { |
| Line 2043 yyreduce: | Line 2071 yyreduce: |
| break; | break; |
| case 111: | case 111: |
| #line 645 "compile.y" | #line 673 "compile.y" |
| { | { |
| // allow $result_or_other_variable[ letters here any time ] | // allow $result_or_other_variable[ letters here any time ] |
| *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; | *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false; |
| Line 2051 yyreduce: | Line 2079 yyreduce: |
| break; | break; |
| case 112: | case 112: |
| #line 648 "compile.y" | #line 676 "compile.y" |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); | PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]); |
| ;} | ;} |
| break; | break; |
| case 113: | case 113: |
| #line 650 "compile.y" | #line 678 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */ | OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */ |
| Line 2068 yyreduce: | Line 2096 yyreduce: |
| break; | break; |
| case 114: | case 114: |
| #line 656 "compile.y" | #line 684 "compile.y" |
| { | { |
| yyval=N(); | yyval=N(); |
| O(*yyval, OP::OP_WITH_READ); | O(*yyval, OP::OP_WITH_READ); |
| Line 2077 yyreduce: | Line 2105 yyreduce: |
| break; | break; |
| case 116: | case 116: |
| #line 661 "compile.y" | #line 689 "compile.y" |
| { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} | { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} |
| break; | break; |
| case 117: | case 117: |
| #line 662 "compile.y" | #line 690 "compile.y" |
| { | { |
| yyval=yyvsp[0]; | yyval=yyvsp[0]; |
| O(*yyval, OP::OP_GET_ELEMENT__WRITE); | O(*yyval, OP::OP_GET_ELEMENT__WRITE); |
| Line 2090 yyreduce: | Line 2118 yyreduce: |
| break; | break; |
| case 120: | case 120: |
| #line 671 "compile.y" | #line 699 "compile.y" |
| { | { |
| yyval=yyvsp[-1]; // stack: class name string | yyval=yyvsp[-1]; // stack: class name string |
| if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class | if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class |
| Line 2101 yyreduce: | Line 2129 yyreduce: |
| YYERROR; | YYERROR; |
| } | } |
| } | } |
| #ifdef OPTIMIZE_BYTECODE_GET_CLASS | |
| // optimized OP_VALUE+origin+string+OP_GET_CLASS => OP_VALUE__GET_CLASS+origin+string | // optimized OP_VALUE+origin+string+OP_GET_CLASS => OP_VALUE__GET_CLASS+origin+string |
| maybe_change_first_opcode(*yyval, OP::OP_VALUE, OP::OP_VALUE__GET_CLASS) | maybe_change_first_opcode(*yyval, OP::OP_VALUE, OP::OP_VALUE__GET_CLASS) |
| #else | |
| O(*yyval, OP::OP_GET_CLASS); | |
| #endif | |
| ;} | ;} |
| break; | break; |
| case 121: | case 121: |
| #line 688 "compile.y" | #line 716 "compile.y" |
| { | { |
| yyval=yyvsp[-1]; | yyval=yyvsp[-1]; |
| if(!PC.in_call_value) { | if(!PC.in_call_value) { |
| Line 2123 yyreduce: | Line 2147 yyreduce: |
| break; | break; |
| case 128: | case 128: |
| #line 707 "compile.y" | #line 735 "compile.y" |
| { yyval = yyvsp[-1] ;} | { yyval = yyvsp[-1] ;} |
| break; | break; |
| case 129: | case 129: |
| #line 708 "compile.y" | #line 736 "compile.y" |
| { yyval = yyvsp[-1] ;} | { yyval = yyvsp[-1] ;} |
| break; | break; |
| case 130: | case 130: |
| #line 709 "compile.y" | #line 737 "compile.y" |
| { yyval = yyvsp[-1]; ;} | { yyval = yyvsp[-1]; ;} |
| break; | break; |
| case 131: | case 131: |
| #line 711 "compile.y" | #line 739 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_NEG) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_NEG) ;} |
| break; | break; |
| case 132: | case 132: |
| #line 712 "compile.y" | #line 740 "compile.y" |
| { yyval=yyvsp[0] ;} | { yyval=yyvsp[0] ;} |
| break; | break; |
| case 133: | case 133: |
| #line 713 "compile.y" | #line 741 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_INV) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_INV) ;} |
| break; | break; |
| case 134: | case 134: |
| #line 714 "compile.y" | #line 742 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_NOT) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_NOT) ;} |
| break; | break; |
| case 135: | case 135: |
| #line 715 "compile.y" | #line 743 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_DEF) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_DEF) ;} |
| break; | break; |
| case 136: | case 136: |
| #line 716 "compile.y" | #line 744 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_IN) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_IN) ;} |
| break; | break; |
| case 137: | case 137: |
| #line 717 "compile.y" | #line 745 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_FEXISTS) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_FEXISTS) ;} |
| break; | break; |
| case 138: | case 138: |
| #line 718 "compile.y" | #line 746 "compile.y" |
| { yyval=yyvsp[0]; O(*yyval, OP::OP_DEXISTS) ;} | { yyval=yyvsp[0]; O(*yyval, OP::OP_DEXISTS) ;} |
| break; | break; |
| case 139: | case 139: |
| #line 720 "compile.y" | #line 748 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_SUB) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_SUB) ;} |
| break; | break; |
| case 140: | case 140: |
| #line 721 "compile.y" | #line 749 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_ADD) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_ADD) ;} |
| break; | break; |
| case 141: | case 141: |
| #line 722 "compile.y" | #line 750 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MUL) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MUL) ;} |
| break; | break; |
| case 142: | case 142: |
| #line 723 "compile.y" | #line 751 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_DIV) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_DIV) ;} |
| break; | break; |
| case 143: | case 143: |
| #line 724 "compile.y" | #line 752 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MOD) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MOD) ;} |
| break; | break; |
| case 144: | case 144: |
| #line 725 "compile.y" | #line 753 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_INTDIV) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_INTDIV) ;} |
| break; | break; |
| case 145: | case 145: |
| #line 726 "compile.y" | #line 754 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SL) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SL) ;} |
| break; | break; |
| case 146: | case 146: |
| #line 727 "compile.y" | #line 755 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SR) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SR) ;} |
| break; | break; |
| case 147: | case 147: |
| #line 728 "compile.y" | #line 756 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_AND) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_AND) ;} |
| break; | break; |
| case 148: | case 148: |
| #line 729 "compile.y" | #line 757 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_OR) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_OR) ;} |
| break; | break; |
| case 149: | case 149: |
| #line 730 "compile.y" | #line 758 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_XOR) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_XOR) ;} |
| break; | break; |
| case 150: | case 150: |
| #line 731 "compile.y" | #line 759 "compile.y" |
| { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_AND) ;} | { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_AND) ;} |
| break; | break; |
| case 151: | case 151: |
| #line 732 "compile.y" | #line 760 "compile.y" |
| { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_OR) ;} | { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_OR) ;} |
| break; | break; |
| case 152: | case 152: |
| #line 733 "compile.y" | #line 761 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_LOG_XOR) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_LOG_XOR) ;} |
| break; | break; |
| case 153: | case 153: |
| #line 734 "compile.y" | #line 762 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LT) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LT) ;} |
| break; | break; |
| case 154: | case 154: |
| #line 735 "compile.y" | #line 763 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GT) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GT) ;} |
| break; | break; |
| case 155: | case 155: |
| #line 736 "compile.y" | #line 764 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LE) ;} |
| break; | break; |
| case 156: | case 156: |
| #line 737 "compile.y" | #line 765 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GE) ;} |
| break; | break; |
| case 157: | case 157: |
| #line 738 "compile.y" | #line 766 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_EQ) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_EQ) ;} |
| break; | break; |
| case 158: | case 158: |
| #line 739 "compile.y" | #line 767 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_NE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_NE) ;} |
| break; | break; |
| case 159: | case 159: |
| #line 740 "compile.y" | #line 768 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LT) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LT) ;} |
| break; | break; |
| case 160: | case 160: |
| #line 741 "compile.y" | #line 769 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GT) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GT) ;} |
| break; | break; |
| case 161: | case 161: |
| #line 742 "compile.y" | #line 770 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LE) ;} |
| break; | break; |
| case 162: | case 162: |
| #line 743 "compile.y" | #line 771 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GE) ;} |
| break; | break; |
| case 163: | case 163: |
| #line 744 "compile.y" | #line 772 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_EQ) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_EQ) ;} |
| break; | break; |
| case 164: | case 164: |
| #line 745 "compile.y" | #line 773 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_NE) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_NE) ;} |
| break; | break; |
| case 165: | case 165: |
| #line 746 "compile.y" | #line 774 "compile.y" |
| { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_IS) ;} | { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_IS) ;} |
| break; | break; |
| case 166: | case 166: |
| #line 749 "compile.y" | #line 777 "compile.y" |
| { | { |
| // optimized OP_STRING => OP_VALUE for doubles | // optimized OP_STRING => OP_VALUE for doubles |
| maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0])); | maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0])); |
| Line 2321 yyreduce: | Line 2345 yyreduce: |
| break; | break; |
| case 167: | case 167: |
| #line 754 "compile.y" | #line 782 "compile.y" |
| { | { |
| #ifdef OPTIMIZE_BYTECODE_STRING_POOL | #ifdef OPTIMIZE_BYTECODE_STRING_POOL |
| // it brakes ^if(" 09 "){...} | // it brakes ^if(" 09 "){...} |
| Line 2343 yyreduce: | Line 2367 yyreduce: |
| break; | break; |
| case 168: | case 168: |
| #line 775 "compile.y" | #line 803 "compile.y" |
| { | { |
| // optimized OP_STRING+OP_WRITE_VALUE => OP_STRING__WRITE | // optimized OP_STRING+OP_WRITE_VALUE => OP_STRING__WRITE |
| change_string_literal_to_write_string_literal(*(yyval=yyvsp[0])) | change_string_literal_to_write_string_literal(*(yyval=yyvsp[0])) |
| Line 2351 yyreduce: | Line 2375 yyreduce: |
| break; | break; |
| case 169: | case 169: |
| #line 780 "compile.y" | #line 808 "compile.y" |
| { yyval=VL(/*we know that we will not change it*/const_cast<VVoid*>(&vvoid), 0, 0, 0) ;} | { yyval=VL(/*we know that we will not change it*/const_cast<VVoid*>(&vvoid), 0, 0, 0) ;} |
| break; | break; |
| case 170: | case 170: |
| #line 781 "compile.y" | #line 809 "compile.y" |
| { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vtrue), 0, 0, 0) ;} | { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vtrue), 0, 0, 0) ;} |
| break; | break; |
| case 171: | case 171: |
| #line 782 "compile.y" | #line 810 "compile.y" |
| { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vfalse), 0, 0, 0) ;} | { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vfalse), 0, 0, 0) ;} |
| break; | break; |
| case 172: | case 172: |
| #line 784 "compile.y" | #line 812 "compile.y" |
| { yyval=N() ;} | { yyval=N() ;} |
| break; | break; |
| Line 2374 yyreduce: | Line 2398 yyreduce: |
| } | } |
| /* Line 1010 of yacc.c. */ | /* Line 1010 of yacc.c. */ |
| #line 2378 "compile.tab.C" | #line 2406 "compile.tab.C" |
| yyvsp -= yylen; | yyvsp -= yylen; |
| yyssp -= yylen; | yyssp -= yylen; |
| Line 2599 yyreturn: | Line 2623 yyreturn: |
| } | } |
| #line 786 "compile.y" | #line 814 "compile.y" |
| #endif | #endif |
| Line 3139 default: | Line 3163 default: |
| case ']': case '}': case ')': | case ']': case '}': case ')': |
| case '"': case '\'': | case '"': case '\'': |
| case '<': case '>': // these stand for HTML brackets AND expression binary ops | case '<': case '>': // these stand for HTML brackets AND expression binary ops |
| case '+': case '*': case '/': case '%': | case '+': case '*': case '/': case '\\': case '%': |
| case '&': case '|': | case '&': case '|': |
| case '=': case '!': | case '=': case '!': |
| // common delimiters | // common delimiters |