|
|
| version 1.163, 2015/09/27 20:19:20 | version 1.167, 2016/04/01 16:29:03 |
|---|---|
| Line 67 | Line 67 |
| /** @file | /** @file |
| Parser: compiler(lexical parser and grammar). | Parser: compiler(lexical parser and grammar). |
| Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) | Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com) |
| Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) | Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) |
| Line 130 static const VString vempty; | Line 130 static const VString vempty; |
| #ifndef DOXYGEN | #ifndef DOXYGEN |
| #define CLASS_ADD if(PC.class_add()){ \ | #define CLASS_ADD if(PC.class_add()){ \ |
| strncpy(PC.error, PC.cclass->name().cstr(), MAX_STRING/2); \ | strncpy(PC.error, PC.cclass->type(), MAX_STRING/2); \ |
| strcat(PC.error, " - class is already defined"); \ | strcat(PC.error, " - class is already defined"); \ |
| YYERROR; \ | YYERROR; \ |
| } | } |
| Line 519 static const yytype_uint8 yytranslate[] | Line 519 static const yytype_uint8 yytranslate[] |
| static const yytype_uint16 yyrline[] = | static const yytype_uint16 yyrline[] = |
| { | { |
| 0, 142, 142, 149, 151, 151, 152, 154, 154, 156, | 0, 142, 142, 149, 151, 151, 152, 154, 154, 156, |
| 266, 266, 267, 267, 268, 269, 269, 271, 271, 319, | 268, 268, 269, 269, 270, 271, 271, 273, 273, 321, |
| 319, 320, 321, 321, 322, 322, 324, 324, 328, 328, | 321, 322, 323, 323, 324, 324, 326, 326, 330, 330, |
| 330, 330, 331, 331, 332, 332, 332, 336, 384, 385, | 332, 332, 333, 333, 334, 334, 334, 338, 386, 387, |
| 385, 386, 388, 389, 390, 443, 444, 444, 448, 461, | 387, 388, 390, 391, 392, 445, 446, 446, 450, 463, |
| 462, 463, 464, 490, 495, 498, 499, 500, 502, 505, | 464, 465, 466, 492, 497, 500, 501, 502, 504, 507, |
| 502, 513, 521, 528, 529, 530, 532, 538, 539, 539, | 504, 515, 523, 530, 531, 532, 534, 540, 541, 541, |
| 543, 556, 559, 556, 604, 606, 606, 608, 609, 610, | 545, 558, 561, 558, 610, 626, 626, 628, 629, 630, |
| 612, 615, 612, 618, 619, 621, 622, 625, 626, 629, | 632, 635, 632, 638, 639, 641, 642, 645, 646, 649, |
| 630, 632, 635, 649, 654, 655, 656, 661, 661, 663, | 650, 652, 655, 669, 674, 675, 676, 681, 681, 683, |
| 663, 664, 665, 677, 686, 689, 690, 691, 692, 694, | 683, 684, 685, 697, 706, 709, 710, 711, 712, 714, |
| 698, 707, 710, 707, 723, 728, 728, 729, 735, 736, | 718, 727, 730, 727, 743, 748, 748, 749, 755, 756, |
| 738, 751, 763, 765, 766, 767, 768, 769, 770, 771, | 758, 771, 783, 785, 786, 787, 788, 789, 790, 791, |
| 772, 774, 775, 776, 777, 778, 779, 780, 781, 783, | 792, 794, 795, 796, 797, 798, 799, 800, 801, 803, |
| 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, | 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, |
| 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, | 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, |
| 804, 805, 806, 807, 808, 809, 812, 817, 838, 843, | 824, 825, 826, 827, 828, 829, 832, 837, 858, 863, |
| 844, 845, 847 | 864, 865, 867 |
| }; | }; |
| #endif | #endif |
| Line 1598 yyreduce: | Line 1598 yyreduce: |
| // creating the class | // creating the class |
| VStateless_class* cclass=new VClass; | VStateless_class* cclass=new VClass; |
| PC.cclass_new=cclass; | PC.cclass_new=cclass; |
| PC.cclass_new->set_name(name); | PC.cclass_new->set_type(name.cstr()); |
| PC.append=false; | PC.append=false; |
| } else { | } else { |
| strcpy(PC.error, "@" CLASS_NAME " must contain only one line with class name (contains more then one)"); | strcpy(PC.error, "@" CLASS_NAME " must contain only one line with class name (contains more then one)"); |
| Line 1606 yyreduce: | Line 1606 yyreduce: |
| } | } |
| } else if(command==USE_CONTROL_METHOD_NAME) { | } else if(command==USE_CONTROL_METHOD_NAME) { |
| CLASS_ADD; | CLASS_ADD; |
| for(size_t i=0; i<strings_code->count(); i+=OPERATIONS_PER_OPVALUE) | 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)->trim(String::TRIM_END), PC.request.get_used_filename(PC.file_no)); | PC.request.use_file(PC.request.main_class, LA2S(*strings_code, i)->trim(String::TRIM_END), |
| PC.request.get_used_filename(PC.file_no), strings_code->get(i+1).origin); | |
| } | |
| } else if(command==BASE_NAME) { | } else if(command==BASE_NAME) { |
| if(PC.append){ | if(PC.append){ |
| strcpy(PC.error, "can't set base while appending methods to class '"); | strcpy(PC.error, "can't set base while appending methods to class '"); |
| strncat(PC.error, PC.cclass->name().cstr(), MAX_STRING/2); | strncat(PC.error, PC.cclass->type(), MAX_STRING/2); |
| strcat(PC.error, "'"); | strcat(PC.error, "'"); |
| YYERROR; | YYERROR; |
| } | } |
| CLASS_ADD; | CLASS_ADD; |
| if(PC.cclass->base_class()) { // already changed from default? | if(PC.cclass->base_class()) { // already changed from default? |
| strcpy(PC.error, "class already have a base '"); | strcpy(PC.error, "class already have a base '"); |
| strncat(PC.error, PC.cclass->base_class()->name().cstr(), MAX_STRING/2); | strncat(PC.error, PC.cclass->base_class()->type(), MAX_STRING/2); |
| strcat(PC.error, "'"); | strcat(PC.error, "'"); |
| YYERROR; | YYERROR; |
| } | } |
| Line 1656 yyreduce: | Line 1658 yyreduce: |
| if(VStateless_class* existed=PC.get_existed_class(PC.cclass_new)){ | if(VStateless_class* existed=PC.get_existed_class(PC.cclass_new)){ |
| if(!PC.reuse_existed_class(existed)){ | if(!PC.reuse_existed_class(existed)){ |
| strcpy(PC.error, "can't append methods to '"); | strcpy(PC.error, "can't append methods to '"); |
| strncat(PC.error, PC.cclass_new->name().cstr(), MAX_STRING/2); | strncat(PC.error, PC.cclass_new->type(), MAX_STRING/2); |
| strcat(PC.error, "' - the class wasn't marked as partial"); | strcat(PC.error, "' - the class wasn't marked as partial"); |
| YYERROR; | YYERROR; |
| } | } |
| Line 1690 yyreduce: | Line 1692 yyreduce: |
| YYERROR; | YYERROR; |
| } | } |
| } | } |
| #line 1694 "compile.tab.C" /* yacc.c:1646 */ | #line 1696 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 13: | case 13: |
| #line 267 "compile.y" /* yacc.c:1646 */ | #line 269 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 1700 "compile.tab.C" /* yacc.c:1646 */ | #line 1702 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 17: | case 17: |
| #line 271 "compile.y" /* yacc.c:1646 */ | #line 273 "compile.y" /* yacc.c:1646 */ |
| { | { |
| CLASS_ADD; | CLASS_ADD; |
| PC.explicit_result=false; | PC.explicit_result=false; |
| Line 1740 yyreduce: | Line 1742 yyreduce: |
| *reinterpret_cast<Method**>(&(yyval))=method; | *reinterpret_cast<Method**>(&(yyval))=method; |
| } | } |
| #line 1744 "compile.tab.C" /* yacc.c:1646 */ | #line 1746 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 18: | case 18: |
| #line 309 "compile.y" /* yacc.c:1646 */ | #line 311 "compile.y" /* yacc.c:1646 */ |
| { | { |
| Method* method=reinterpret_cast<Method*>((yyvsp[-1])); | Method* method=reinterpret_cast<Method*>((yyvsp[-1])); |
| // fill in the code | // fill in the code |
| Line 1754 yyreduce: | Line 1756 yyreduce: |
| const String& name=*LA2S(*(yyvsp[-6])); | const String& name=*LA2S(*(yyvsp[-6])); |
| PC.cclass->set_method(PC.alias_method(name), method); | PC.cclass->set_method(PC.alias_method(name), method); |
| } | } |
| #line 1758 "compile.tab.C" /* yacc.c:1646 */ | #line 1760 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 21: | case 21: |
| #line 320 "compile.y" /* yacc.c:1646 */ | #line 322 "compile.y" /* yacc.c:1646 */ |
| {(yyval)=(yyvsp[-1]);} | {(yyval)=(yyvsp[-1]);} |
| #line 1764 "compile.tab.C" /* yacc.c:1646 */ | #line 1766 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 25: | case 25: |
| #line 322 "compile.y" /* yacc.c:1646 */ | #line 324 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } |
| #line 1770 "compile.tab.C" /* yacc.c:1646 */ | #line 1772 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 31: | case 31: |
| #line 330 "compile.y" /* yacc.c:1646 */ | #line 332 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 1776 "compile.tab.C" /* yacc.c:1646 */ | #line 1778 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 37: | case 37: |
| #line 336 "compile.y" /* yacc.c:1646 */ | #line 338 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| YYSTYPE code=(yyvsp[0]); | YYSTYPE code=(yyvsp[0]); |
| Line 1825 yyreduce: | Line 1827 yyreduce: |
| P(*(yyval), *code); | P(*(yyval), *code); |
| } | } |
| #line 1829 "compile.tab.C" /* yacc.c:1646 */ | #line 1831 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 38: | case 38: |
| #line 384 "compile.y" /* yacc.c:1646 */ | #line 386 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); } | { (yyval)=(yyvsp[0]); } |
| #line 1835 "compile.tab.C" /* yacc.c:1646 */ | #line 1837 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 41: | case 41: |
| #line 386 "compile.y" /* yacc.c:1646 */ | #line 388 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); } | { (yyval)=(yyvsp[-1]); } |
| #line 1841 "compile.tab.C" /* yacc.c:1646 */ | #line 1843 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 44: | case 44: |
| #line 390 "compile.y" /* yacc.c:1646 */ | #line 392 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| YYSTYPE diving_code=(yyvsp[0]); | YYSTYPE diving_code=(yyvsp[0]); |
| Line 1895 yyreduce: | Line 1897 yyreduce: |
| #endif | #endif |
| /* diving code; stack: current context */ | /* diving code; stack: current context */ |
| } | } |
| #line 1899 "compile.tab.C" /* yacc.c:1646 */ | #line 1901 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 45: | case 45: |
| #line 443 "compile.y" /* yacc.c:1646 */ | #line 445 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 1905 "compile.tab.C" /* yacc.c:1646 */ | #line 1907 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 47: | case 47: |
| #line 444 "compile.y" /* yacc.c:1646 */ | #line 446 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 1911 "compile.tab.C" /* yacc.c:1646 */ | #line 1913 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 48: | case 48: |
| #line 448 "compile.y" /* yacc.c:1646 */ | #line 450 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| #ifdef OPTIMIZE_BYTECODE_CONSTRUCT | #ifdef OPTIMIZE_BYTECODE_CONSTRUCT |
| Line 1924 yyreduce: | Line 1926 yyreduce: |
| P(*(yyval), *(yyvsp[0])); /* stack: context,name,constructor_value */ | P(*(yyval), *(yyvsp[0])); /* stack: context,name,constructor_value */ |
| } | } |
| } | } |
| #line 1928 "compile.tab.C" /* yacc.c:1646 */ | #line 1930 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 52: | case 52: |
| #line 464 "compile.y" /* yacc.c:1646 */ | #line 466 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| YYSTYPE diving_code=(yyvsp[0]); | YYSTYPE diving_code=(yyvsp[0]); |
| Line 1955 yyreduce: | Line 1957 yyreduce: |
| } | } |
| /* diving code; stack: current context */ | /* diving code; stack: current context */ |
| } | } |
| #line 1959 "compile.tab.C" /* yacc.c:1646 */ | #line 1961 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 53: | case 53: |
| #line 490 "compile.y" /* yacc.c:1646 */ | #line 492 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| O(*(yyval), OP::OP_WITH_WRITE); /* stack: starting context */ | O(*(yyval), OP::OP_WITH_WRITE); /* stack: starting context */ |
| P(*(yyval), *(yyvsp[0])); /* diving code; stack: context,name */ | P(*(yyval), *(yyvsp[0])); /* diving code; stack: context,name */ |
| } | } |
| #line 1969 "compile.tab.C" /* yacc.c:1646 */ | #line 1971 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 54: | case 54: |
| #line 495 "compile.y" /* yacc.c:1646 */ | #line 497 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 1975 "compile.tab.C" /* yacc.c:1646 */ | #line 1977 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 58: | case 58: |
| #line 502 "compile.y" /* yacc.c:1646 */ | #line 504 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 1984 "compile.tab.C" /* yacc.c:1646 */ | #line 1986 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 59: | case 59: |
| #line 505 "compile.y" /* yacc.c:1646 */ | #line 507 "compile.y" /* yacc.c:1646 */ |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); | PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); |
| } | } |
| #line 1992 "compile.tab.C" /* yacc.c:1646 */ | #line 1994 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 60: | case 60: |
| #line 507 "compile.y" /* yacc.c:1646 */ | #line 509 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // stack: context, name | // stack: context, name |
| (yyval)=(yyvsp[-2]); // stack: context, name, value | (yyval)=(yyvsp[-2]); // stack: context, name, value |
| O(*(yyval), OP::OP_CONSTRUCT_VALUE); /* value=pop; name=pop; context=pop; construct(context,name,value) */ | O(*(yyval), OP::OP_CONSTRUCT_VALUE); /* value=pop; name=pop; context=pop; construct(context,name,value) */ |
| } | } |
| #line 2002 "compile.tab.C" /* yacc.c:1646 */ | #line 2004 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 61: | case 61: |
| #line 513 "compile.y" /* yacc.c:1646 */ | #line 515 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| O(*(yyval), OP::OP_PREPARE_TO_EXPRESSION); | O(*(yyval), OP::OP_PREPARE_TO_EXPRESSION); |
| Line 2010 yyreduce: | Line 2012 yyreduce: |
| P(*(yyval), *(yyvsp[-1])); // stack: context, name, value | P(*(yyval), *(yyvsp[-1])); // stack: context, name, value |
| O(*(yyval), OP::OP_CONSTRUCT_EXPR); /* value=pop->as_expr_result; name=pop; context=pop; construct(context,name,value) */ | O(*(yyval), OP::OP_CONSTRUCT_EXPR); /* value=pop->as_expr_result; name=pop; context=pop; construct(context,name,value) */ |
| } | } |
| #line 2014 "compile.tab.C" /* yacc.c:1646 */ | #line 2016 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 62: | case 62: |
| #line 521 "compile.y" /* yacc.c:1646 */ | #line 523 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // stack: context, name | // stack: context, name |
| (yyval)=N(); | (yyval)=N(); |
| OA(*(yyval), OP::OP_CURLY_CODE__CONSTRUCT, (yyvsp[-1])); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */ | OA(*(yyval), OP::OP_CURLY_CODE__CONSTRUCT, (yyvsp[-1])); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */ |
| } | } |
| #line 2024 "compile.tab.C" /* yacc.c:1646 */ | #line 2026 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 66: | case 66: |
| #line 532 "compile.y" /* yacc.c:1646 */ | #line 534 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (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 */ |
| /* some code that writes to that context */ | /* some code that writes to that context */ |
| /* context=pop; stack: context.value() */ | /* context=pop; stack: context.value() */ |
| } | } |
| #line 2035 "compile.tab.C" /* yacc.c:1646 */ | #line 2037 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 69: | case 69: |
| #line 539 "compile.y" /* yacc.c:1646 */ | #line 541 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 2041 "compile.tab.C" /* yacc.c:1646 */ | #line 2043 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 70: | case 70: |
| #line 543 "compile.y" /* yacc.c:1646 */ | #line 545 "compile.y" /* yacc.c:1646 */ |
| { | { |
| size_t count=(yyvsp[0])->count(); | size_t count=(yyvsp[0])->count(); |
| #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR | #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR |
| Line 2055 yyreduce: | Line 2057 yyreduce: |
| /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ |
| } | } |
| } | } |
| #line 2059 "compile.tab.C" /* yacc.c:1646 */ | #line 2061 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 71: | case 71: |
| #line 556 "compile.y" /* yacc.c:1646 */ | #line 558 "compile.y" /* yacc.c:1646 */ |
| { | { |
| PC.in_call_value=true; | PC.in_call_value=true; |
| } | } |
| #line 2067 "compile.tab.C" /* yacc.c:1646 */ | #line 2069 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 72: | case 72: |
| #line 559 "compile.y" /* yacc.c:1646 */ | #line 561 "compile.y" /* yacc.c:1646 */ |
| { | { |
| PC.in_call_value=false; | PC.in_call_value=false; |
| } | } |
| #line 2075 "compile.tab.C" /* yacc.c:1646 */ | #line 2077 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 73: | case 73: |
| #line 562 "compile.y" /* yacc.c:1646 */ | #line 564 "compile.y" /* yacc.c:1646 */ |
| { /* ^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 2103 yyreduce: | Line 2105 yyreduce: |
| && (*var_code)[0].code==OP::OP_VALUE__GET_CLASS | && (*var_code)[0].code==OP::OP_VALUE__GET_CLASS |
| && (*var_code)[3].code==OP::OP_PREPARE_TO_CONSTRUCT_OBJECT | && (*var_code)[3].code==OP::OP_PREPARE_TO_CONSTRUCT_OBJECT |
| && (*var_code)[4].code==OP::OP_VALUE | && (*var_code)[4].code==OP::OP_VALUE |
| #ifdef FEATURE_GET_ELEMENT4CALL | |
| && (*var_code)[7].code==OP::OP_GET_ELEMENT4CALL | |
| #else | |
| && (*var_code)[7].code==OP::OP_GET_ELEMENT | && (*var_code)[7].code==OP::OP_GET_ELEMENT |
| #endif | |
| ){ | ){ |
| (yyval)=N(); | (yyval)=N(); |
| O(*(yyval), OP::OP_CONSTRUCT_OBJECT); | O(*(yyval), OP::OP_CONSTRUCT_OBJECT); |
| Line 2117 yyreduce: | Line 2123 yyreduce: |
| } | } |
| } | } |
| } | } |
| #line 2121 "compile.tab.C" /* yacc.c:1646 */ | #line 2127 "compile.tab.C" /* yacc.c:1646 */ |
| break; | |
| case 74: | |
| #line 610 "compile.y" /* yacc.c:1646 */ | |
| { | |
| #ifdef FEATURE_GET_ELEMENT4CALL | |
| size_t count=(yyvsp[0])->count(); | |
| if(count){ | |
| (yyval)=(yyvsp[0]); | |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT | |
| !(count==5 && change_first(*(yyval), OP::OP_GET_OBJECT_ELEMENT, OP::OP_GET_OBJECT_ELEMENT4CALL)) && | |
| #endif | |
| #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT | |
| !(count==5 && change_first(*(yyval), OP::OP_GET_OBJECT_VAR_ELEMENT, OP::OP_GET_OBJECT_VAR_ELEMENT4CALL)) && | |
| #endif | |
| !change(*(yyval), count-1, OP::OP_GET_ELEMENT, OP::OP_GET_ELEMENT4CALL); | |
| } | |
| #endif | |
| } | |
| #line 2147 "compile.tab.C" /* yacc.c:1646 */ | |
| break; | break; |
| case 76: | case 76: |
| #line 606 "compile.y" /* yacc.c:1646 */ | #line 626 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 2127 "compile.tab.C" /* yacc.c:1646 */ | #line 2153 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 80: | case 80: |
| #line 612 "compile.y" /* yacc.c:1646 */ | #line 632 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 2136 "compile.tab.C" /* yacc.c:1646 */ | #line 2162 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 81: | case 81: |
| #line 615 "compile.y" /* yacc.c:1646 */ | #line 635 "compile.y" /* yacc.c:1646 */ |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); | PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); |
| } | } |
| #line 2144 "compile.tab.C" /* yacc.c:1646 */ | #line 2170 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 82: | case 82: |
| #line 617 "compile.y" /* yacc.c:1646 */ | #line 637 "compile.y" /* yacc.c:1646 */ |
| {(yyval)=(yyvsp[-2]);} | {(yyval)=(yyvsp[-2]);} |
| #line 2150 "compile.tab.C" /* yacc.c:1646 */ | #line 2176 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 83: | case 83: |
| #line 618 "compile.y" /* yacc.c:1646 */ | #line 638 "compile.y" /* yacc.c:1646 */ |
| {(yyval)=(yyvsp[-1]);} | {(yyval)=(yyvsp[-1]);} |
| #line 2156 "compile.tab.C" /* yacc.c:1646 */ | #line 2182 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 84: | case 84: |
| #line 619 "compile.y" /* yacc.c:1646 */ | #line 639 "compile.y" /* yacc.c:1646 */ |
| {(yyval)=(yyvsp[-1]);} | {(yyval)=(yyvsp[-1]);} |
| #line 2162 "compile.tab.C" /* yacc.c:1646 */ | #line 2188 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 86: | case 86: |
| #line 622 "compile.y" /* yacc.c:1646 */ | #line 642 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } |
| #line 2168 "compile.tab.C" /* yacc.c:1646 */ | #line 2194 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 88: | case 88: |
| #line 626 "compile.y" /* yacc.c:1646 */ | #line 646 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } |
| #line 2174 "compile.tab.C" /* yacc.c:1646 */ | #line 2200 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 90: | case 90: |
| #line 630 "compile.y" /* yacc.c:1646 */ | #line 650 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); } |
| #line 2180 "compile.tab.C" /* yacc.c:1646 */ | #line 2206 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 91: | case 91: |
| #line 632 "compile.y" /* yacc.c:1646 */ | #line 652 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=(yyvsp[0]); | (yyval)=(yyvsp[0]); |
| } | } |
| #line 2188 "compile.tab.C" /* yacc.c:1646 */ | #line 2214 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 92: | case 92: |
| #line 635 "compile.y" /* yacc.c:1646 */ | #line 655 "compile.y" /* yacc.c:1646 */ |
| { | { |
| YYSTYPE expr_code=(yyvsp[0]); | YYSTYPE expr_code=(yyvsp[0]); |
| if(expr_code->count()==3 | if(expr_code->count()==3 |
| Line 2203 yyreduce: | Line 2229 yyreduce: |
| OA(*(yyval), OP::OP_EXPR_CODE__STORE_PARAM, code); | OA(*(yyval), OP::OP_EXPR_CODE__STORE_PARAM, code); |
| } | } |
| } | } |
| #line 2207 "compile.tab.C" /* yacc.c:1646 */ | #line 2233 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 93: | case 93: |
| #line 649 "compile.y" /* yacc.c:1646 */ | #line 669 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (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 2216 "compile.tab.C" /* yacc.c:1646 */ | #line 2242 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 98: | case 98: |
| #line 661 "compile.y" /* yacc.c:1646 */ | #line 681 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 2222 "compile.tab.C" /* yacc.c:1646 */ | #line 2248 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 100: | case 100: |
| #line 663 "compile.y" /* yacc.c:1646 */ | #line 683 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 2228 "compile.tab.C" /* yacc.c:1646 */ | #line 2254 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 102: | case 102: |
| #line 665 "compile.y" /* yacc.c:1646 */ | #line 685 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 2241 yyreduce: | Line 2267 yyreduce: |
| O(*(yyval), OP::OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */ | O(*(yyval), OP::OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */ |
| #endif | #endif |
| } | } |
| #line 2245 "compile.tab.C" /* yacc.c:1646 */ | #line 2271 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 103: | case 103: |
| #line 677 "compile.y" /* yacc.c:1646 */ | #line 697 "compile.y" /* yacc.c:1646 */ |
| { | { |
| /* stack: context */ | /* stack: context */ |
| (yyval)=(yyvsp[0]); /* stack: context,name */ | (yyval)=(yyvsp[0]); /* stack: context,name */ |
| Line 2255 yyreduce: | Line 2281 yyreduce: |
| O(*(yyval), OP::OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */ | O(*(yyval), OP::OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */ |
| #endif | #endif |
| } | } |
| #line 2259 "compile.tab.C" /* yacc.c:1646 */ | #line 2285 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 109: | case 109: |
| #line 694 "compile.y" /* yacc.c:1646 */ | #line 714 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=(yyvsp[0]); | (yyval)=(yyvsp[0]); |
| O(*(yyval), OP::OP_GET_ELEMENT); | O(*(yyval), OP::OP_GET_ELEMENT); |
| } | } |
| #line 2268 "compile.tab.C" /* yacc.c:1646 */ | #line 2294 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 110: | case 110: |
| #line 698 "compile.y" /* yacc.c:1646 */ | #line 718 "compile.y" /* yacc.c:1646 */ |
| { | { |
| YYSTYPE code; | YYSTYPE code; |
| { | { |
| Line 2278 yyreduce: | Line 2304 yyreduce: |
| (yyval)=N(); | (yyval)=N(); |
| OA(*(yyval), OP::OP_STRING_POOL, code); | OA(*(yyval), OP::OP_STRING_POOL, code); |
| } | } |
| #line 2282 "compile.tab.C" /* yacc.c:1646 */ | #line 2308 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 111: | case 111: |
| #line 707 "compile.y" /* yacc.c:1646 */ | #line 727 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 2291 "compile.tab.C" /* yacc.c:1646 */ | #line 2317 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 112: | case 112: |
| #line 710 "compile.y" /* yacc.c:1646 */ | #line 730 "compile.y" /* yacc.c:1646 */ |
| { | { |
| PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); | PC.explicit_result=*reinterpret_cast<bool*>(&(yyvsp[-1])); |
| } | } |
| #line 2299 "compile.tab.C" /* yacc.c:1646 */ | #line 2325 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 113: | case 113: |
| #line 712 "compile.y" /* yacc.c:1646 */ | #line 732 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL | #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT__SPECIAL |
| Line 2311 yyreduce: | Line 2337 yyreduce: |
| /* context=pop; stack: context.value() */ | /* context=pop; stack: context.value() */ |
| } | } |
| } | } |
| #line 2315 "compile.tab.C" /* yacc.c:1646 */ | #line 2341 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 114: | case 114: |
| #line 723 "compile.y" /* yacc.c:1646 */ | #line 743 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=N(); | (yyval)=N(); |
| O(*(yyval), OP::OP_WITH_READ); | O(*(yyval), OP::OP_WITH_READ); |
| P(*(yyval), *(yyvsp[0])); | P(*(yyval), *(yyvsp[0])); |
| } | } |
| #line 2325 "compile.tab.C" /* yacc.c:1646 */ | #line 2351 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 116: | case 116: |
| #line 728 "compile.y" /* yacc.c:1646 */ | #line 748 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } | { (yyval)=(yyvsp[-1]); P(*(yyval), *(yyvsp[0])); } |
| #line 2331 "compile.tab.C" /* yacc.c:1646 */ | #line 2357 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 117: | case 117: |
| #line 729 "compile.y" /* yacc.c:1646 */ | #line 749 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=(yyvsp[0]); | (yyval)=(yyvsp[0]); |
| O(*(yyval), OP::OP_GET_ELEMENT__WRITE); | O(*(yyval), OP::OP_GET_ELEMENT__WRITE); |
| } | } |
| #line 2340 "compile.tab.C" /* yacc.c:1646 */ | #line 2366 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 120: | case 120: |
| #line 738 "compile.y" /* yacc.c:1646 */ | #line 758 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (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 |
| if(VStateless_class* base=PC.cclass->base_class()) { | if(VStateless_class* base=PC.cclass->base_class()) { |
| change_string_literal_value(*(yyval), base->name()); | change_string_literal_value(*(yyval), *new String(base->type())); |
| } else { | } else { |
| strcpy(PC.error, "no base class declared"); | strcpy(PC.error, "no base class declared"); |
| YYERROR; | YYERROR; |
| Line 2354 yyreduce: | Line 2380 yyreduce: |
| // 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 |
| change_first(*(yyval), OP::OP_VALUE, OP::OP_VALUE__GET_CLASS); | change_first(*(yyval), OP::OP_VALUE, OP::OP_VALUE__GET_CLASS); |
| } | } |
| #line 2358 "compile.tab.C" /* yacc.c:1646 */ | #line 2384 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 121: | case 121: |
| #line 751 "compile.y" /* yacc.c:1646 */ | #line 771 "compile.y" /* yacc.c:1646 */ |
| { | { |
| (yyval)=(yyvsp[-1]); | (yyval)=(yyvsp[-1]); |
| if(!PC.in_call_value) { | if(!PC.in_call_value) { |
| Line 2367 yyreduce: | Line 2393 yyreduce: |
| } | } |
| O(*(yyval), OP::OP_PREPARE_TO_CONSTRUCT_OBJECT); | O(*(yyval), OP::OP_PREPARE_TO_CONSTRUCT_OBJECT); |
| } | } |
| #line 2371 "compile.tab.C" /* yacc.c:1646 */ | #line 2397 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 128: | case 128: |
| #line 770 "compile.y" /* yacc.c:1646 */ | #line 790 "compile.y" /* yacc.c:1646 */ |
| { (yyval) = (yyvsp[-1]); } | { (yyval) = (yyvsp[-1]); } |
| #line 2377 "compile.tab.C" /* yacc.c:1646 */ | #line 2403 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 129: | case 129: |
| #line 771 "compile.y" /* yacc.c:1646 */ | #line 791 "compile.y" /* yacc.c:1646 */ |
| { (yyval) = (yyvsp[-1]); } | { (yyval) = (yyvsp[-1]); } |
| #line 2383 "compile.tab.C" /* yacc.c:1646 */ | #line 2409 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 130: | case 130: |
| #line 772 "compile.y" /* yacc.c:1646 */ | #line 792 "compile.y" /* yacc.c:1646 */ |
| { (yyval) = (yyvsp[-1]); } | { (yyval) = (yyvsp[-1]); } |
| #line 2389 "compile.tab.C" /* yacc.c:1646 */ | #line 2415 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 131: | case 131: |
| #line 774 "compile.y" /* yacc.c:1646 */ | #line 794 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_NEG); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_NEG); } |
| #line 2395 "compile.tab.C" /* yacc.c:1646 */ | #line 2421 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 132: | case 132: |
| #line 775 "compile.y" /* yacc.c:1646 */ | #line 795 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); } | { (yyval)=(yyvsp[0]); } |
| #line 2401 "compile.tab.C" /* yacc.c:1646 */ | #line 2427 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 133: | case 133: |
| #line 776 "compile.y" /* yacc.c:1646 */ | #line 796 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_INV); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_INV); } |
| #line 2407 "compile.tab.C" /* yacc.c:1646 */ | #line 2433 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 134: | case 134: |
| #line 777 "compile.y" /* yacc.c:1646 */ | #line 797 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_NOT); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_NOT); } |
| #line 2413 "compile.tab.C" /* yacc.c:1646 */ | #line 2439 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 135: | case 135: |
| #line 778 "compile.y" /* yacc.c:1646 */ | #line 798 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_DEF); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_DEF); } |
| #line 2419 "compile.tab.C" /* yacc.c:1646 */ | #line 2445 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 136: | case 136: |
| #line 779 "compile.y" /* yacc.c:1646 */ | #line 799 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_IN); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_IN); } |
| #line 2425 "compile.tab.C" /* yacc.c:1646 */ | #line 2451 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 137: | case 137: |
| #line 780 "compile.y" /* yacc.c:1646 */ | #line 800 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_FEXISTS); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_FEXISTS); } |
| #line 2431 "compile.tab.C" /* yacc.c:1646 */ | #line 2457 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 138: | case 138: |
| #line 781 "compile.y" /* yacc.c:1646 */ | #line 801 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_DEXISTS); } | { (yyval)=(yyvsp[0]); O(*(yyval), OP::OP_DEXISTS); } |
| #line 2437 "compile.tab.C" /* yacc.c:1646 */ | #line 2463 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 139: | case 139: |
| #line 783 "compile.y" /* yacc.c:1646 */ | #line 803 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_SUB); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_SUB); } |
| #line 2443 "compile.tab.C" /* yacc.c:1646 */ | #line 2469 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 140: | case 140: |
| #line 784 "compile.y" /* yacc.c:1646 */ | #line 804 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_ADD); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_ADD); } |
| #line 2449 "compile.tab.C" /* yacc.c:1646 */ | #line 2475 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 141: | case 141: |
| #line 785 "compile.y" /* yacc.c:1646 */ | #line 805 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_MUL); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_MUL); } |
| #line 2455 "compile.tab.C" /* yacc.c:1646 */ | #line 2481 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 142: | case 142: |
| #line 786 "compile.y" /* yacc.c:1646 */ | #line 806 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_DIV); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_DIV); } |
| #line 2461 "compile.tab.C" /* yacc.c:1646 */ | #line 2487 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 143: | case 143: |
| #line 787 "compile.y" /* yacc.c:1646 */ | #line 807 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_MOD); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_MOD); } |
| #line 2467 "compile.tab.C" /* yacc.c:1646 */ | #line 2493 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 144: | case 144: |
| #line 788 "compile.y" /* yacc.c:1646 */ | #line 808 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_INTDIV); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_INTDIV); } |
| #line 2473 "compile.tab.C" /* yacc.c:1646 */ | #line 2499 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 145: | case 145: |
| #line 789 "compile.y" /* yacc.c:1646 */ | #line 809 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2479 "compile.tab.C" /* yacc.c:1646 */ | #line 2505 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 146: | case 146: |
| #line 790 "compile.y" /* yacc.c:1646 */ | #line 810 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2485 "compile.tab.C" /* yacc.c:1646 */ | #line 2511 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 147: | case 147: |
| #line 791 "compile.y" /* yacc.c:1646 */ | #line 811 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2491 "compile.tab.C" /* yacc.c:1646 */ | #line 2517 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 148: | case 148: |
| #line 792 "compile.y" /* yacc.c:1646 */ | #line 812 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2497 "compile.tab.C" /* yacc.c:1646 */ | #line 2523 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 149: | case 149: |
| #line 793 "compile.y" /* yacc.c:1646 */ | #line 813 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2503 "compile.tab.C" /* yacc.c:1646 */ | #line 2529 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 150: | case 150: |
| #line 794 "compile.y" /* yacc.c:1646 */ | #line 814 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2509 "compile.tab.C" /* yacc.c:1646 */ | #line 2535 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 151: | case 151: |
| #line 795 "compile.y" /* yacc.c:1646 */ | #line 815 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2515 "compile.tab.C" /* yacc.c:1646 */ | #line 2541 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 152: | case 152: |
| #line 796 "compile.y" /* yacc.c:1646 */ | #line 816 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2521 "compile.tab.C" /* yacc.c:1646 */ | #line 2547 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 153: | case 153: |
| #line 797 "compile.y" /* yacc.c:1646 */ | #line 817 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2527 "compile.tab.C" /* yacc.c:1646 */ | #line 2553 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 154: | case 154: |
| #line 798 "compile.y" /* yacc.c:1646 */ | #line 818 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2533 "compile.tab.C" /* yacc.c:1646 */ | #line 2559 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 155: | case 155: |
| #line 799 "compile.y" /* yacc.c:1646 */ | #line 819 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2539 "compile.tab.C" /* yacc.c:1646 */ | #line 2565 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 156: | case 156: |
| #line 800 "compile.y" /* yacc.c:1646 */ | #line 820 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2545 "compile.tab.C" /* yacc.c:1646 */ | #line 2571 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 157: | case 157: |
| #line 801 "compile.y" /* yacc.c:1646 */ | #line 821 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2551 "compile.tab.C" /* yacc.c:1646 */ | #line 2577 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 158: | case 158: |
| #line 802 "compile.y" /* yacc.c:1646 */ | #line 822 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2557 "compile.tab.C" /* yacc.c:1646 */ | #line 2583 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 159: | case 159: |
| #line 803 "compile.y" /* yacc.c:1646 */ | #line 823 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2563 "compile.tab.C" /* yacc.c:1646 */ | #line 2589 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 160: | case 160: |
| #line 804 "compile.y" /* yacc.c:1646 */ | #line 824 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2569 "compile.tab.C" /* yacc.c:1646 */ | #line 2595 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 161: | case 161: |
| #line 805 "compile.y" /* yacc.c:1646 */ | #line 825 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2575 "compile.tab.C" /* yacc.c:1646 */ | #line 2601 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 162: | case 162: |
| #line 806 "compile.y" /* yacc.c:1646 */ | #line 826 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2581 "compile.tab.C" /* yacc.c:1646 */ | #line 2607 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 163: | case 163: |
| #line 807 "compile.y" /* yacc.c:1646 */ | #line 827 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2587 "compile.tab.C" /* yacc.c:1646 */ | #line 2613 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 164: | case 164: |
| #line 808 "compile.y" /* yacc.c:1646 */ | #line 828 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2593 "compile.tab.C" /* yacc.c:1646 */ | #line 2619 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 165: | case 165: |
| #line 809 "compile.y" /* yacc.c:1646 */ | #line 829 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_IS); } | { (yyval)=(yyvsp[-2]); P(*(yyval), *(yyvsp[0])); O(*(yyval), OP::OP_IS); } |
| #line 2599 "compile.tab.C" /* yacc.c:1646 */ | #line 2625 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 166: | case 166: |
| #line 812 "compile.y" /* yacc.c:1646 */ | #line 832 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 2608 "compile.tab.C" /* yacc.c:1646 */ | #line 2634 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 167: | case 167: |
| #line 817 "compile.y" /* yacc.c:1646 */ | #line 837 "compile.y" /* yacc.c:1646 */ |
| { | { |
| #ifdef OPTIMIZE_BYTECODE_STRING_POOL | #ifdef OPTIMIZE_BYTECODE_STRING_POOL |
| // it brakes ^if(" 09 "){...} | // it brakes ^if(" 09 "){...} |
| Line 2627 yyreduce: | Line 2653 yyreduce: |
| /* some code that writes to that context */ | /* some code that writes to that context */ |
| /* context=pop; stack: context.get_string() */ | /* context=pop; stack: context.get_string() */ |
| } | } |
| #line 2631 "compile.tab.C" /* yacc.c:1646 */ | #line 2657 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 168: | case 168: |
| #line 838 "compile.y" /* yacc.c:1646 */ | #line 858 "compile.y" /* yacc.c:1646 */ |
| { | { |
| // 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 2640 "compile.tab.C" /* yacc.c:1646 */ | #line 2666 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 169: | case 169: |
| #line 843 "compile.y" /* yacc.c:1646 */ | #line 863 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=VL(/*we know that we will not change it*/const_cast<VString*>(&vempty), 0, 0, 0); } | { (yyval)=VL(/*we know that we will not change it*/const_cast<VString*>(&vempty), 0, 0, 0); } |
| #line 2646 "compile.tab.C" /* yacc.c:1646 */ | #line 2672 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 170: | case 170: |
| #line 844 "compile.y" /* yacc.c:1646 */ | #line 864 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2652 "compile.tab.C" /* yacc.c:1646 */ | #line 2678 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 171: | case 171: |
| #line 845 "compile.y" /* yacc.c:1646 */ | #line 865 "compile.y" /* yacc.c:1646 */ |
| { (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); } |
| #line 2658 "compile.tab.C" /* yacc.c:1646 */ | #line 2684 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| case 172: | case 172: |
| #line 847 "compile.y" /* yacc.c:1646 */ | #line 867 "compile.y" /* yacc.c:1646 */ |
| { (yyval)=N(); } | { (yyval)=N(); } |
| #line 2664 "compile.tab.C" /* yacc.c:1646 */ | #line 2690 "compile.tab.C" /* yacc.c:1646 */ |
| break; | break; |
| #line 2668 "compile.tab.C" /* yacc.c:1646 */ | #line 2694 "compile.tab.C" /* yacc.c:1646 */ |
| default: break; | default: break; |
| } | } |
| /* User semantic actions sometimes alter yychar, and that requires | /* User semantic actions sometimes alter yychar, and that requires |
| Line 2892 yyreturn: | Line 2918 yyreturn: |
| #endif | #endif |
| return yyresult; | return yyresult; |
| } | } |
| #line 849 "compile.y" /* yacc.c:1906 */ | #line 869 "compile.y" /* yacc.c:1906 */ |
| #endif | #endif |