--- parser3/src/main/compile.tab.C 2007/10/17 13:34:59 1.114 +++ parser3/src/main/compile.tab.C 2009/04/29 03:55:08 1.127 @@ -132,7 +132,7 @@ Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: compile.tab.C,v 1.114 2007/10/17 13:34:59 misha Exp $ + $Id: compile.tab.C,v 1.127 2009/04/29 03:55:08 misha Exp $ */ /** @@ -168,6 +168,9 @@ // defines #define USE_CONTROL_METHOD_NAME "USE" +#define OPTIONS_CONTROL_METHOD_NAME "OPTIONS" +#define OPTION_ALL_VARS_LOCAL_NAME "locals" +#define OPTION_PARTIAL_CLASS "partial" // forwards @@ -213,7 +216,7 @@ typedef int YYSTYPE; /* Line 214 of yacc.c. */ -#line 217 "compile.tab.C" +#line 220 "compile.tab.C" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -319,16 +322,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 51 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 500 +#define YYLAST 470 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 62 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 88 +#define YYNNTS 89 /* YYNRULES -- Number of rules. */ -#define YYNRULES 171 +#define YYNRULES 172 /* YYNRULES -- Number of states. */ -#define YYNSTATES 262 +#define YYNSTATES 263 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -377,99 +380,99 @@ static const unsigned char yytranslate[] static const unsigned short int yyprhs[] = { 0, 0, 3, 5, 7, 9, 12, 14, 16, 18, - 23, 25, 27, 29, 32, 35, 37, 39, 47, 49, - 51, 55, 57, 59, 61, 65, 67, 69, 71, 73, - 75, 78, 80, 82, 84, 86, 88, 90, 93, 96, - 98, 102, 104, 106, 108, 111, 113, 116, 120, 122, - 124, 126, 128, 131, 134, 136, 138, 140, 141, 142, - 148, 152, 156, 158, 160, 162, 164, 166, 168, 171, - 173, 174, 175, 182, 184, 186, 189, 191, 193, 195, - 196, 197, 203, 207, 211, 213, 217, 219, 223, 225, - 229, 231, 233, 235, 237, 239, 241, 243, 246, 248, - 251, 254, 256, 258, 261, 263, 265, 267, 269, 272, - 275, 276, 277, 283, 285, 287, 290, 293, 295, 297, - 300, 303, 305, 307, 309, 311, 313, 315, 319, 323, - 327, 330, 333, 336, 339, 342, 345, 348, 351, 355, - 359, 363, 367, 371, 375, 379, 383, 387, 391, 395, - 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, - 439, 443, 447, 451, 455, 459, 461, 463, 465, 466, - 468, 470 + 23, 25, 27, 29, 32, 35, 37, 39, 40, 49, + 51, 53, 57, 59, 61, 63, 67, 69, 71, 73, + 75, 77, 80, 82, 84, 86, 88, 90, 92, 95, + 98, 100, 104, 106, 108, 110, 113, 115, 118, 122, + 124, 126, 128, 130, 133, 136, 138, 140, 142, 143, + 144, 150, 154, 158, 160, 162, 164, 166, 168, 170, + 173, 175, 176, 177, 184, 186, 188, 191, 193, 195, + 197, 198, 199, 205, 209, 213, 215, 219, 221, 225, + 227, 231, 233, 235, 237, 239, 241, 243, 245, 248, + 250, 253, 256, 258, 260, 263, 265, 267, 269, 271, + 274, 277, 278, 279, 285, 287, 289, 292, 295, 297, + 299, 302, 305, 307, 309, 311, 313, 315, 317, 321, + 325, 329, 332, 335, 338, 341, 344, 347, 350, 353, + 357, 361, 365, 369, 373, 377, 381, 385, 389, 393, + 397, 401, 405, 409, 413, 417, 421, 425, 429, 433, + 437, 441, 445, 449, 453, 457, 461, 463, 465, 467, + 468, 470, 472 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const short int yyrhs[] = { 63, 0, -1, 65, -1, 64, -1, 66, -1, 64, - 66, -1, 78, -1, 67, -1, 72, -1, 47, 4, - 48, 68, -1, 149, -1, 69, -1, 70, -1, 69, - 70, -1, 71, 48, -1, 149, -1, 4, -1, 47, - 4, 74, 73, 77, 48, 78, -1, 149, -1, 74, - -1, 49, 75, 50, -1, 149, -1, 76, -1, 4, - -1, 76, 51, 4, -1, 149, -1, 4, -1, 149, - -1, 79, -1, 80, -1, 79, 80, -1, 145, -1, - 81, -1, 82, -1, 90, -1, 105, -1, 83, -1, - 52, 84, -1, 86, 3, -1, 85, -1, 53, 86, - 54, -1, 87, -1, 88, -1, 89, -1, 138, 89, - -1, 128, -1, 125, 128, -1, 52, 91, 95, -1, - 92, -1, 93, -1, 94, -1, 124, -1, 55, 124, - -1, 138, 124, -1, 96, -1, 99, -1, 100, -1, - -1, -1, 49, 97, 101, 98, 50, -1, 56, 141, - 57, -1, 53, 78, 54, -1, 146, -1, 4, -1, - 102, -1, 103, -1, 104, -1, 81, -1, 80, 79, - -1, 106, -1, -1, -1, 58, 107, 109, 108, 110, - 3, -1, 86, -1, 111, -1, 110, 111, -1, 112, - -1, 115, -1, 116, -1, -1, -1, 49, 113, 117, - 114, 50, -1, 56, 118, 57, -1, 53, 119, 54, - -1, 120, -1, 117, 51, 120, -1, 121, -1, 118, - 51, 121, -1, 122, -1, 119, 51, 122, -1, 123, - -1, 141, -1, 78, -1, 146, -1, 4, -1, 102, - -1, 129, -1, 125, 129, -1, 126, -1, 125, 126, - -1, 127, 55, -1, 129, -1, 129, -1, 4, 5, - -1, 4, -1, 130, -1, 131, -1, 132, -1, 52, - 135, -1, 4, 136, -1, -1, -1, 49, 133, 79, - 134, 50, -1, 4, -1, 137, -1, 136, 137, -1, - 52, 135, -1, 139, -1, 140, -1, 4, 59, -1, - 139, 59, -1, 142, -1, 143, -1, 147, -1, 148, - -1, 83, -1, 106, -1, 60, 144, 60, -1, 61, - 144, 61, -1, 56, 142, 57, -1, 39, 142, -1, - 38, 142, -1, 45, 142, -1, 46, 142, -1, 27, - 142, -1, 28, 142, -1, 29, 142, -1, 30, 142, - -1, 142, 39, 142, -1, 142, 38, 142, -1, 142, - 40, 142, -1, 142, 41, 142, -1, 142, 43, 142, - -1, 142, 42, 142, -1, 142, 19, 142, -1, 142, - 20, 142, -1, 142, 37, 142, -1, 142, 36, 142, - -1, 142, 14, 142, -1, 142, 11, 142, -1, 142, - 12, 142, -1, 142, 13, 142, -1, 142, 34, 142, - -1, 142, 35, 142, -1, 142, 15, 142, -1, 142, - 16, 142, -1, 142, 17, 142, -1, 142, 18, 142, - -1, 142, 21, 142, -1, 142, 22, 142, -1, 142, - 23, 142, -1, 142, 24, 142, -1, 142, 25, 142, - -1, 142, 26, 142, -1, 142, 31, 142, -1, 4, - -1, 78, -1, 4, -1, -1, 32, -1, 33, -1, - -1 + 66, -1, 79, -1, 67, -1, 72, -1, 47, 4, + 48, 68, -1, 150, -1, 69, -1, 70, -1, 69, + 70, -1, 71, 48, -1, 150, -1, 4, -1, -1, + 47, 4, 75, 74, 78, 48, 73, 79, -1, 150, + -1, 75, -1, 49, 76, 50, -1, 150, -1, 77, + -1, 4, -1, 77, 51, 4, -1, 150, -1, 4, + -1, 150, -1, 80, -1, 81, -1, 80, 81, -1, + 146, -1, 82, -1, 83, -1, 91, -1, 106, -1, + 84, -1, 52, 85, -1, 87, 3, -1, 86, -1, + 53, 87, 54, -1, 88, -1, 89, -1, 90, -1, + 139, 90, -1, 129, -1, 126, 129, -1, 52, 92, + 96, -1, 93, -1, 94, -1, 95, -1, 125, -1, + 55, 125, -1, 139, 125, -1, 97, -1, 100, -1, + 101, -1, -1, -1, 49, 98, 102, 99, 50, -1, + 56, 142, 57, -1, 53, 79, 54, -1, 147, -1, + 4, -1, 103, -1, 104, -1, 105, -1, 82, -1, + 81, 80, -1, 107, -1, -1, -1, 58, 108, 110, + 109, 111, 3, -1, 87, -1, 112, -1, 111, 112, + -1, 113, -1, 116, -1, 117, -1, -1, -1, 49, + 114, 118, 115, 50, -1, 56, 119, 57, -1, 53, + 120, 54, -1, 121, -1, 118, 51, 121, -1, 122, + -1, 119, 51, 122, -1, 123, -1, 120, 51, 123, + -1, 124, -1, 142, -1, 79, -1, 147, -1, 4, + -1, 103, -1, 130, -1, 126, 130, -1, 127, -1, + 126, 127, -1, 128, 55, -1, 130, -1, 130, -1, + 4, 5, -1, 4, -1, 131, -1, 132, -1, 133, + -1, 52, 136, -1, 4, 137, -1, -1, -1, 49, + 134, 80, 135, 50, -1, 4, -1, 138, -1, 137, + 138, -1, 52, 136, -1, 140, -1, 141, -1, 4, + 59, -1, 140, 59, -1, 143, -1, 144, -1, 148, + -1, 149, -1, 84, -1, 107, -1, 60, 145, 60, + -1, 61, 145, 61, -1, 56, 143, 57, -1, 39, + 143, -1, 38, 143, -1, 45, 143, -1, 46, 143, + -1, 27, 143, -1, 28, 143, -1, 29, 143, -1, + 30, 143, -1, 143, 39, 143, -1, 143, 38, 143, + -1, 143, 40, 143, -1, 143, 41, 143, -1, 143, + 43, 143, -1, 143, 42, 143, -1, 143, 19, 143, + -1, 143, 20, 143, -1, 143, 37, 143, -1, 143, + 36, 143, -1, 143, 14, 143, -1, 143, 11, 143, + -1, 143, 12, 143, -1, 143, 13, 143, -1, 143, + 34, 143, -1, 143, 35, 143, -1, 143, 15, 143, + -1, 143, 16, 143, -1, 143, 17, 143, -1, 143, + 18, 143, -1, 143, 21, 143, -1, 143, 22, 143, + -1, 143, 23, 143, -1, 143, 24, 143, -1, 143, + 25, 143, -1, 143, 26, 143, -1, 143, 31, 143, + -1, 4, -1, 79, -1, 4, -1, -1, 32, -1, + 33, -1, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 128, 128, 135, 137, 137, 138, 140, 140, 142, - 214, 214, 215, 215, 216, 217, 217, 219, 257, 257, - 258, 259, 259, 260, 260, 262, 262, 266, 266, 268, - 268, 269, 269, 270, 270, 270, 274, 281, 282, 282, - 283, 285, 286, 287, 309, 310, 310, 314, 319, 320, - 321, 322, 339, 344, 347, 348, 349, 351, 354, 351, - 362, 370, 377, 378, 379, 381, 387, 388, 388, 392, - 398, 401, 398, 417, 419, 419, 421, 422, 423, 425, - 428, 425, 431, 432, 434, 435, 438, 439, 442, 443, - 445, 449, 464, 469, 470, 471, 476, 476, 478, 478, - 479, 480, 488, 493, 496, 497, 498, 499, 501, 505, - 514, 517, 514, 525, 530, 530, 531, 537, 538, 540, - 552, 564, 566, 567, 568, 569, 570, 571, 572, 573, - 575, 576, 577, 578, 579, 580, 581, 582, 584, 585, - 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 613, 618, 627, 632, 633, - 634, 636 + 0, 131, 131, 138, 140, 140, 141, 143, 143, 145, + 246, 246, 247, 247, 248, 249, 249, 251, 251, 301, + 301, 302, 303, 303, 304, 304, 306, 306, 310, 310, + 312, 312, 313, 313, 314, 314, 314, 318, 326, 327, + 327, 328, 330, 331, 332, 368, 369, 369, 373, 378, + 379, 380, 381, 398, 403, 406, 407, 408, 410, 413, + 410, 421, 429, 436, 437, 438, 440, 446, 447, 447, + 451, 457, 460, 457, 476, 478, 478, 480, 481, 482, + 484, 487, 484, 490, 491, 493, 494, 497, 498, 501, + 502, 504, 507, 521, 526, 527, 528, 533, 533, 535, + 535, 536, 537, 545, 550, 553, 554, 555, 556, 558, + 562, 571, 574, 571, 582, 587, 587, 588, 594, 595, + 597, 614, 626, 628, 629, 630, 631, 632, 633, 634, + 635, 637, 638, 639, 640, 641, 642, 643, 644, 646, + 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 675, 680, 689, 694, + 695, 696, 698 }; #endif @@ -490,25 +493,25 @@ static const char *const yytname[] = "';'", "'$'", "'{'", "'}'", "'.'", "'('", "')'", "'^'", "':'", "'\"'", "'''", "$accept", "all", "methods", "one_big_piece", "method", "control_method", "maybe_control_strings", "control_strings", - "control_string", "maybe_string", "code_method", + "control_string", "maybe_string", "code_method", "@1", "maybe_bracketed_strings", "bracketed_maybe_strings", "maybe_strings", "strings", "maybe_comment", "maybe_codes", "codes", "code", "action", "get", "get_value", "get_name_value", "name_in_curly_rdive", "name_without_curly_rdive", "name_without_curly_rdive_read", "name_without_curly_rdive_class", "name_without_curly_rdive_code", "put", "name_expr_wdive", "name_expr_wdive_root", "name_expr_wdive_write", - "name_expr_wdive_class", "construct", "construct_square", "@1", "@2", + "name_expr_wdive_class", "construct", "construct_square", "@2", "@3", "construct_round", "construct_curly", "any_constructor_code_value", "constructor_code_value", "constructor_code", - "codes__excluding_sole_str_literal", "call", "call_value", "@3", "@4", - "call_name", "store_params", "store_param", "store_square_param", "@5", - "@6", "store_round_param", "store_curly_param", "store_code_param_parts", + "codes__excluding_sole_str_literal", "call", "call_value", "@4", "@5", + "call_name", "store_params", "store_param", "store_square_param", "@6", + "@7", "store_round_param", "store_curly_param", "store_code_param_parts", "store_expr_param_parts", "store_curly_param_parts", "store_code_param_part", "store_expr_param_part", "store_curly_param_part", "code_param_value", "name_expr_dive_code", "name_path", "name_step", "name_advance1", "name_advance2", "name_expr_value", "name_expr_subvar_value", - "name_expr_with_subvar_value", "name_square_code_value", "@7", "@8", + "name_expr_with_subvar_value", "name_square_code_value", "@8", "@9", "subvar_ref_name_rdive", "subvar_get_writes", "subvar__get_write", "class_prefix", "class_static_prefix", "class_constructor_prefix", "expr_value", "expr", "double_or_STRING", "string_inside_quotes_value", @@ -535,46 +538,46 @@ static const unsigned short int yytoknum static const unsigned char yyr1[] = { 0, 62, 63, 63, 64, 64, 65, 66, 66, 67, - 68, 68, 69, 69, 70, 71, 71, 72, 73, 73, - 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, - 79, 80, 80, 81, 81, 81, 82, 83, 84, 84, - 85, 86, 86, 87, 88, 89, 89, 90, 91, 91, - 91, 92, 93, 94, 95, 95, 95, 97, 98, 96, - 99, 100, 101, 101, 101, 102, 103, 104, 104, 105, - 107, 108, 106, 109, 110, 110, 111, 111, 111, 113, - 114, 112, 115, 116, 117, 117, 118, 118, 119, 119, - 120, 121, 122, 123, 123, 123, 124, 124, 125, 125, - 126, 127, 128, 128, 129, 129, 129, 129, 130, 131, - 133, 134, 132, 135, 136, 136, 137, 138, 138, 139, - 140, 141, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 143, 144, 145, 146, 147, - 148, 149 + 68, 68, 69, 69, 70, 71, 71, 73, 72, 74, + 74, 75, 76, 76, 77, 77, 78, 78, 79, 79, + 80, 80, 81, 81, 82, 82, 82, 83, 84, 85, + 85, 86, 87, 87, 88, 89, 90, 90, 91, 92, + 92, 92, 93, 94, 95, 96, 96, 96, 98, 99, + 97, 100, 101, 102, 102, 102, 103, 104, 105, 105, + 106, 108, 109, 107, 110, 111, 111, 112, 112, 112, + 114, 115, 113, 116, 117, 118, 118, 119, 119, 120, + 120, 121, 122, 123, 124, 124, 124, 125, 125, 126, + 126, 127, 128, 129, 129, 130, 130, 130, 130, 131, + 132, 134, 135, 133, 136, 137, 137, 138, 139, 139, + 140, 141, 142, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 144, 145, 146, 147, + 148, 149, 150 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 1, 1, 1, 2, 1, 1, 1, 4, - 1, 1, 1, 2, 2, 1, 1, 7, 1, 1, - 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, - 3, 1, 1, 1, 2, 1, 2, 3, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 0, 0, 5, - 3, 3, 1, 1, 1, 1, 1, 1, 2, 1, - 0, 0, 6, 1, 1, 2, 1, 1, 1, 0, - 0, 5, 3, 3, 1, 3, 1, 3, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, - 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, - 0, 0, 5, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, + 1, 1, 1, 2, 2, 1, 1, 0, 8, 1, + 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, + 1, 3, 1, 1, 1, 2, 1, 2, 3, 1, + 1, 1, 1, 2, 2, 1, 1, 1, 0, 0, + 5, 3, 3, 1, 1, 1, 1, 1, 1, 2, + 1, 0, 0, 6, 1, 1, 2, 1, 1, 1, + 0, 0, 5, 3, 3, 1, 3, 1, 3, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, + 2, 0, 0, 5, 1, 1, 2, 2, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 1, 1, 1, 0, 1, - 1, 0 + 3, 3, 3, 3, 3, 3, 1, 1, 1, 0, + 1, 1, 0 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -582,209 +585,203 @@ static const unsigned char yyr2[] = means the default is an error. */ static const unsigned char yydefact[] = { - 171, 167, 0, 0, 70, 0, 3, 2, 4, 7, - 8, 6, 28, 29, 32, 33, 36, 34, 35, 69, - 31, 27, 0, 104, 110, 0, 0, 0, 37, 39, - 0, 41, 42, 43, 0, 48, 49, 50, 51, 0, - 98, 0, 45, 96, 105, 106, 107, 0, 117, 118, - 0, 1, 5, 30, 171, 171, 171, 103, 0, 119, - 109, 114, 0, 113, 108, 0, 0, 102, 0, 104, - 52, 0, 96, 38, 57, 171, 0, 47, 54, 55, - 56, 104, 99, 46, 97, 100, 44, 53, 120, 73, - 71, 16, 9, 11, 12, 0, 10, 23, 0, 22, - 21, 171, 19, 18, 116, 115, 111, 40, 97, 168, - 0, 165, 0, 0, 0, 0, 169, 170, 0, 0, - 0, 0, 0, 0, 171, 171, 125, 126, 0, 121, - 122, 123, 124, 0, 13, 15, 14, 20, 0, 26, - 0, 25, 0, 167, 0, 32, 58, 64, 65, 66, - 62, 61, 134, 135, 136, 137, 131, 130, 132, 133, - 0, 166, 0, 0, 60, 0, 0, 0, 0, 0, + 172, 168, 0, 0, 71, 0, 3, 2, 4, 7, + 8, 6, 29, 30, 33, 34, 37, 35, 36, 70, + 32, 28, 0, 105, 111, 0, 0, 0, 38, 40, + 0, 42, 43, 44, 0, 49, 50, 51, 52, 0, + 99, 0, 46, 97, 106, 107, 108, 0, 118, 119, + 0, 1, 5, 31, 172, 172, 172, 104, 0, 120, + 110, 115, 0, 114, 109, 0, 0, 103, 0, 105, + 53, 0, 97, 39, 58, 172, 0, 48, 55, 56, + 57, 105, 100, 47, 98, 101, 45, 54, 121, 74, + 72, 16, 9, 11, 12, 0, 10, 24, 0, 23, + 22, 172, 20, 19, 117, 116, 112, 41, 98, 169, + 0, 166, 0, 0, 0, 0, 170, 171, 0, 0, + 0, 0, 0, 0, 172, 172, 126, 127, 0, 122, + 123, 124, 125, 0, 13, 15, 14, 21, 0, 27, + 0, 26, 0, 168, 0, 33, 59, 65, 66, 67, + 63, 62, 135, 136, 137, 138, 132, 131, 133, 134, + 0, 167, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 79, 171, 0, 0, 74, 76, 77, 78, - 24, 171, 112, 68, 0, 129, 127, 128, 149, 150, - 151, 148, 154, 155, 156, 157, 144, 145, 158, 159, - 160, 161, 162, 163, 164, 152, 153, 147, 146, 139, - 138, 140, 141, 143, 142, 168, 92, 0, 88, 0, - 86, 91, 72, 75, 17, 59, 167, 95, 80, 84, - 90, 93, 171, 83, 0, 82, 168, 0, 89, 87, - 85, 81 + 0, 0, 80, 172, 0, 0, 75, 77, 78, 79, + 25, 17, 113, 69, 0, 130, 128, 129, 150, 151, + 152, 149, 155, 156, 157, 158, 145, 146, 159, 160, + 161, 162, 163, 164, 165, 153, 154, 148, 147, 140, + 139, 141, 142, 144, 143, 169, 93, 0, 89, 0, + 87, 92, 73, 76, 172, 60, 168, 96, 81, 85, + 91, 94, 172, 84, 0, 83, 18, 169, 0, 90, + 88, 86, 82 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short int yydefgoto[] = { -1, 5, 6, 7, 8, 9, 92, 93, 94, 95, - 10, 101, 56, 98, 99, 140, 161, 12, 13, 14, - 15, 126, 28, 29, 30, 31, 32, 33, 17, 34, - 35, 36, 37, 77, 78, 109, 204, 79, 80, 146, - 247, 148, 149, 18, 127, 50, 133, 90, 195, 196, - 197, 235, 257, 198, 199, 248, 239, 237, 249, 240, - 238, 250, 38, 66, 40, 41, 42, 67, 44, 45, - 46, 62, 142, 64, 60, 61, 68, 48, 49, 241, - 129, 130, 162, 20, 251, 131, 132, 21 + 10, 244, 101, 56, 98, 99, 140, 161, 12, 13, + 14, 15, 126, 28, 29, 30, 31, 32, 33, 17, + 34, 35, 36, 37, 77, 78, 109, 204, 79, 80, + 146, 247, 148, 149, 18, 127, 50, 133, 90, 195, + 196, 197, 235, 258, 198, 199, 248, 239, 237, 249, + 240, 238, 250, 38, 66, 40, 41, 42, 67, 44, + 45, 46, 62, 142, 64, 60, 61, 68, 48, 49, + 241, 129, 130, 162, 20, 251, 131, 132, 21 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -104 +#define YYPACT_NINF -107 static const short int yypact[] = { - 11, -104, 17, 44, -104, 13, -22, -104, -104, -104, - -104, -104, 12, -104, -104, -104, -104, -104, -104, -104, - -104, -104, 55, 9, -104, 30, 42, 96, -104, -104, - 33, -104, -104, -104, -26, -104, -104, -104, -104, 98, - -104, -16, -104, 16, -104, -104, -104, 98, -12, -104, - 42, -104, -104, -104, 39, 45, 56, -104, 30, -104, - 58, -104, 12, -104, -104, 28, 98, -3, 98, 58, - -104, 96, -3, -104, -104, 12, 27, -104, -104, -104, - -104, -2, -104, -104, 16, -104, -104, -104, -104, -104, - -104, -104, -104, 3, -104, 60, 72, -104, 68, 76, - -104, 124, -104, -104, -104, -104, 12, -104, -3, 34, - 79, -104, 27, 27, 27, 27, -104, -104, 27, 27, - 27, 27, 86, 27, 12, 12, -104, -104, 77, 325, - -104, -104, -104, 70, -104, -104, -104, -104, 132, -104, - 89, -104, 102, 105, 12, 62, -104, -104, -104, -104, - -104, -104, 426, 426, 426, 426, -104, -104, -104, -104, - 278, -104, 99, 85, -104, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, -104, 12, 27, 25, -104, -104, -104, -104, - -104, 12, -104, 12, 106, -104, -104, -104, 388, 358, - 149, 451, 418, 418, 291, 291, 190, 190, 418, 418, - 418, 418, 291, 291, 426, 418, 418, 204, 457, 100, - 100, -104, -104, -104, -104, 37, -104, -25, -104, -33, - -104, -104, -104, -104, -104, -104, 71, -104, 107, -104, - -104, -104, 12, -104, 27, -104, 37, 126, -104, -104, - -104, -104 + 14, -107, 13, 45, -107, 28, -15, -107, -107, -107, + -107, -107, 21, -107, -107, -107, -107, -107, -107, -107, + -107, -107, 73, 19, -107, 50, 6, 44, -107, -107, + 87, -107, -107, -107, -34, -107, -107, -107, -107, 65, + -107, 48, -107, 5, -107, -107, -107, 65, 24, -107, + 6, -107, -107, -107, 88, 109, 74, -107, 50, -107, + 76, -107, 21, -107, -107, 86, 65, 101, 65, 76, + -107, 44, 101, -107, -107, 21, 7, -107, -107, -107, + -107, 18, -107, -107, 5, -107, -107, -107, -107, -107, + -107, -107, -107, 9, -107, 94, 99, -107, 93, 112, + -107, 146, -107, -107, -107, -107, 21, -107, 101, 29, + 110, -107, 7, 7, 7, 7, -107, -107, 7, 7, + 7, 7, 52, 7, 21, 21, -107, -107, 113, 323, + -107, -107, -107, 92, -107, -107, -107, -107, 165, -107, + 144, -107, 147, 149, 21, 80, -107, -107, -107, -107, + -107, -107, 96, 96, 96, 96, -107, -107, -107, -107, + 276, -107, 138, 139, -107, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, -107, 21, 7, 35, -107, -107, -107, -107, + -107, -107, -107, 21, 154, -107, -107, -107, 419, 389, + 356, 284, 135, 135, 148, 148, 191, 191, 135, 135, + 135, 135, 148, 148, 96, 135, 135, 182, 427, 140, + 140, -107, -107, -107, -107, 37, -107, 31, -107, -30, + -107, -107, -107, -107, 21, -107, 108, -107, 155, -107, + -107, -107, 21, -107, 7, -107, -107, 37, 161, -107, + -107, -107, -107 }; /* YYPGOTO[NTERM-NUM]. */ static const short int yypgoto[] = { - -104, -104, -104, -104, 151, -104, -104, -104, 84, -104, - -104, -104, 122, -104, -104, -104, 1, -60, -8, -103, - -104, 0, -104, -104, -6, -104, -104, -36, -104, -104, - -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, - 73, -104, -104, -104, 5, -104, -104, -104, -104, -14, - -104, -104, -104, -104, -104, -104, -104, -104, -77, -58, - -55, -104, -5, 104, -31, -104, -29, 6, -104, -104, - -104, -104, -104, 141, -104, 140, 201, -104, -104, 129, - 97, -104, 82, -104, 110, -104, -104, 61 + -107, -107, -107, -107, 206, -107, -107, -107, 124, -107, + -107, -107, -107, 170, -107, -107, -107, 1, -58, -7, + -106, -107, 0, -107, -107, -6, -107, -107, -21, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, 118, -107, -107, -107, 2, -107, -107, -107, -107, + 43, -107, -107, -107, -107, -107, -107, -107, -107, -17, + -13, -16, -107, -18, 4, 41, -107, -23, 3, -107, + -107, -107, -107, -107, 181, -107, 183, 239, -107, -107, + 171, 95, -107, 123, -107, 142, -107, -107, 64 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -172 +#define YYTABLE_NINF -173 static const short int yytable[] = { - 16, 11, 106, 57, 53, 19, 145, 91, 82, 43, - 83, 86, 16, 51, 57, 1, 1, 19, 254, -102, - 65, 22, 70, 74, 255, 2, 252, 75, 242, 253, - 76, 111, 86, 72, 63, 82, 73, 83, 143, 85, - 82, 246, 87, 91, 89, 84, 23, 88, 23, 97, - 58, -171, -101, 43, 112, 113, 114, 115, 2, 116, - 117, 58, 16, 3, 3, 118, 119, 19, 59, 4, - 4, -101, 120, 121, 192, 16, 110, 108, 193, 122, - 19, 194, 107, 123, 203, 4, 3, 124, 125, 3, - 23, 24, 4, 24, 25, 4, 25, 26, 53, 27, - 69, 144, 81, 54, 55, 55, 16, 39, 136, 16, - 58, 19, -67, -67, 19, 96, 100, 103, 137, 192, - -15, -94, -94, 193, 16, 16, 194, 138, 139, 19, - 19, 71, 145, 151, 164, 24, 200, 201, 25, 26, - 188, 189, 190, 191, 16, 24, 207, 24, 25, 19, - 25, 39, 202, 145, 135, -63, 245, 52, 256, 206, - 165, 166, 141, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 261, 134, 102, 260, - 181, 243, 147, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 16, 236, 53, 259, 258, 19, 104, - 105, 16, 244, 16, 47, 128, 19, 163, 19, 152, - 153, 154, 155, 0, 0, 156, 157, 158, 159, 150, - 160, 0, 0, 173, 174, 0, 0, 144, 186, 187, - 188, 189, 190, 191, 0, 16, 0, 0, 0, 0, - 19, 185, 186, 187, 188, 189, 190, 191, 144, 0, - 0, 0, 16, 236, 0, 0, 16, 19, 0, 0, - 0, 19, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 168, 0, 0, 0, 181, - 173, 174, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 181, 0, 0, 0, 0, 184, 185, 186, - 187, 188, 189, 190, 191, 205, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 0, 0, 0, 0, 181, 0, 0, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 165, - 0, 0, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 0, 0, 0, 0, 181, - 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 0, 0, 0, 0, 181, - 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 168, 0, 0, 171, 172, 173, 174, 0, - 168, 0, 0, 179, 180, 173, 174, 0, 0, 181, - 0, 0, 0, 0, 184, 185, 186, 187, 188, 189, - 190, 191, 184, 185, 186, 187, 188, 189, 190, 191, - 173, 174, 0, 0, 0, 0, 173, 174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 184, 185, 186, - 187, 188, 189, 190, 191, 186, 187, 188, 189, 190, + 16, 11, 19, 145, 106, 53, 43, 39, -103, 70, + 23, 111, 16, 91, 19, 74, 83, 22, 1, 75, + 65, 254, 76, 57, 57, 1, 86, 255, 51, 87, + 72, 71, 2, 143, 112, 113, 114, 115, 242, 116, + 117, 246, 84, 83, 89, 118, 119, 86, 69, 23, + 43, 39, 120, 121, 63, 24, 23, -172, 25, 122, + -102, 2, 16, 123, 19, 4, 3, 124, 125, 81, + 58, 58, 4, 3, 108, 16, 110, 19, 59, 4, + 82, 3, 252, 88, 192, 253, 203, 4, 193, 3, + 73, 194, 91, 24, 24, 4, 25, 25, 26, 53, + 27, 24, 144, 85, 25, 26, 16, 82, 19, 16, + 168, 19, 82, 97, 24, 173, 174, 25, 96, 100, + 103, 54, 55, 55, 16, 16, 19, 19, 58, 145, + -68, -68, 184, 185, 186, 187, 188, 189, 190, 191, + 107, 192, 136, 137, 16, 193, 19, -15, 194, 168, + 139, 145, 171, 172, 173, 174, -102, 135, -95, -95, + 179, 180, 168, 138, 151, 141, 181, 173, 174, 200, + 164, 184, 185, 186, 187, 188, 189, 190, 191, 181, + 188, 189, 190, 191, 184, 185, 186, 187, 188, 189, + 190, 191, 201, 16, 236, 19, 53, 202, 206, -64, + 207, 173, 174, 16, 245, 19, 257, 152, 153, 154, + 155, 262, 52, 156, 157, 158, 159, 134, 160, 185, + 186, 187, 188, 189, 190, 191, 102, 147, 144, 186, + 187, 188, 189, 190, 191, 16, 259, 19, 243, 104, + 261, 260, 47, 105, 16, 256, 19, 128, 163, 0, + 144, 150, 16, 236, 19, 0, 0, 16, 0, 19, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 173, 174, 0, 0, 181, 0, 0, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 184, 185, 186, 187, 188, 189, 190, 191, 0, 0, + 0, 0, 0, 205, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 0, 0, 0, 0, 181, 0, 0, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 165, 166, 0, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 0, 0, 0, 0, 181, 0, 0, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 165, 0, 0, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 0, 0, 0, 0, + 181, 0, 0, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 173, 174, 0, 0, + 181, 0, 0, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 0, 0, 186, 187, 188, 189, 190, 191 }; static const short int yycheck[] = { - 0, 0, 62, 5, 12, 0, 109, 4, 39, 3, - 39, 47, 12, 0, 5, 4, 4, 12, 51, 3, - 26, 4, 27, 49, 57, 47, 51, 53, 3, 54, - 56, 4, 68, 27, 4, 66, 3, 66, 4, 55, - 71, 4, 47, 4, 50, 39, 4, 59, 4, 4, - 52, 48, 55, 47, 27, 28, 29, 30, 47, 32, - 33, 52, 62, 52, 52, 38, 39, 62, 59, 58, - 58, 55, 45, 46, 49, 75, 75, 71, 53, 52, - 75, 56, 54, 56, 144, 58, 52, 60, 61, 52, - 4, 49, 58, 49, 52, 58, 52, 53, 106, 55, - 4, 109, 4, 48, 49, 49, 106, 3, 48, 109, - 52, 106, 50, 51, 109, 54, 55, 56, 50, 49, - 48, 50, 51, 53, 124, 125, 56, 51, 4, 124, - 125, 27, 235, 54, 57, 49, 4, 48, 52, 53, - 40, 41, 42, 43, 144, 49, 61, 49, 52, 144, - 52, 47, 50, 256, 93, 50, 50, 6, 51, 60, - 11, 12, 101, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 50, 93, 56, 256, - 31, 195, 109, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 193, 193, 203, 254, 252, 193, 58, - 60, 201, 201, 203, 3, 76, 201, 125, 203, 112, - 113, 114, 115, -1, -1, 118, 119, 120, 121, 109, - 123, -1, -1, 19, 20, -1, -1, 235, 38, 39, - 40, 41, 42, 43, -1, 235, -1, -1, -1, -1, - 235, 37, 38, 39, 40, 41, 42, 43, 256, -1, - -1, -1, 252, 252, -1, -1, 256, 252, -1, -1, - -1, 256, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 14, -1, -1, -1, 31, - 19, 20, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 31, -1, -1, -1, -1, 36, 37, 38, - 39, 40, 41, 42, 43, 57, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, -1, -1, -1, -1, 31, -1, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 11, - -1, -1, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, -1, -1, -1, -1, 31, - -1, -1, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, -1, -1, -1, -1, 31, - -1, -1, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 14, -1, -1, 17, 18, 19, 20, -1, - 14, -1, -1, 25, 26, 19, 20, -1, -1, 31, - -1, -1, -1, -1, 36, 37, 38, 39, 40, 41, - 42, 43, 36, 37, 38, 39, 40, 41, 42, 43, - 19, 20, -1, -1, -1, -1, 19, 20, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 36, 37, 38, - 39, 40, 41, 42, 43, 38, 39, 40, 41, 42, + 0, 0, 0, 109, 62, 12, 3, 3, 3, 27, + 4, 4, 12, 4, 12, 49, 39, 4, 4, 53, + 26, 51, 56, 5, 5, 4, 47, 57, 0, 47, + 27, 27, 47, 4, 27, 28, 29, 30, 3, 32, + 33, 4, 39, 66, 50, 38, 39, 68, 4, 4, + 47, 47, 45, 46, 4, 49, 4, 48, 52, 52, + 55, 47, 62, 56, 62, 58, 52, 60, 61, 4, + 52, 52, 58, 52, 71, 75, 75, 75, 59, 58, + 39, 52, 51, 59, 49, 54, 144, 58, 53, 52, + 3, 56, 4, 49, 49, 58, 52, 52, 53, 106, + 55, 49, 109, 55, 52, 53, 106, 66, 106, 109, + 14, 109, 71, 4, 49, 19, 20, 52, 54, 55, + 56, 48, 49, 49, 124, 125, 124, 125, 52, 235, + 50, 51, 36, 37, 38, 39, 40, 41, 42, 43, + 54, 49, 48, 50, 144, 53, 144, 48, 56, 14, + 4, 257, 17, 18, 19, 20, 55, 93, 50, 51, + 25, 26, 14, 51, 54, 101, 31, 19, 20, 4, + 57, 36, 37, 38, 39, 40, 41, 42, 43, 31, + 40, 41, 42, 43, 36, 37, 38, 39, 40, 41, + 42, 43, 48, 193, 193, 193, 203, 50, 60, 50, + 61, 19, 20, 203, 50, 203, 51, 112, 113, 114, + 115, 50, 6, 118, 119, 120, 121, 93, 123, 37, + 38, 39, 40, 41, 42, 43, 56, 109, 235, 38, + 39, 40, 41, 42, 43, 235, 252, 235, 195, 58, + 257, 254, 3, 60, 244, 244, 244, 76, 125, -1, + 257, 109, 252, 252, 252, -1, -1, 257, -1, 257, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 19, 20, -1, -1, 31, -1, -1, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, + -1, -1, -1, 57, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + -1, -1, -1, -1, 31, -1, -1, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 11, 12, -1, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, -1, -1, -1, -1, 31, -1, -1, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 11, -1, -1, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, + 31, -1, -1, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 19, 20, -1, -1, + 31, -1, -1, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, -1, -1, 38, 39, 40, 41, 42, 43 }; @@ -793,32 +790,32 @@ static const short int yycheck[] = static const unsigned char yystos[] = { 0, 4, 47, 52, 58, 63, 64, 65, 66, 67, - 72, 78, 79, 80, 81, 82, 83, 90, 105, 106, - 145, 149, 4, 4, 49, 52, 53, 55, 84, 85, - 86, 87, 88, 89, 91, 92, 93, 94, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 138, 139, 140, - 107, 0, 66, 80, 48, 49, 74, 5, 52, 59, - 136, 137, 133, 4, 135, 86, 125, 129, 138, 4, - 124, 125, 129, 3, 49, 53, 56, 95, 96, 99, - 100, 4, 126, 128, 129, 55, 89, 124, 59, 86, - 109, 4, 68, 69, 70, 71, 149, 4, 75, 76, - 149, 73, 74, 149, 135, 137, 79, 54, 129, 97, - 78, 4, 27, 28, 29, 30, 32, 33, 38, 39, - 45, 46, 52, 56, 60, 61, 83, 106, 141, 142, - 143, 147, 148, 108, 70, 149, 48, 50, 51, 4, - 77, 149, 134, 4, 80, 81, 101, 102, 103, 104, - 146, 54, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 78, 144, 144, 57, 11, 12, 13, 14, 15, + 72, 79, 80, 81, 82, 83, 84, 91, 106, 107, + 146, 150, 4, 4, 49, 52, 53, 55, 85, 86, + 87, 88, 89, 90, 92, 93, 94, 95, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 139, 140, 141, + 108, 0, 66, 81, 48, 49, 75, 5, 52, 59, + 137, 138, 134, 4, 136, 87, 126, 130, 139, 4, + 125, 126, 130, 3, 49, 53, 56, 96, 97, 100, + 101, 4, 127, 129, 130, 55, 90, 125, 59, 87, + 110, 4, 68, 69, 70, 71, 150, 4, 76, 77, + 150, 74, 75, 150, 136, 138, 80, 54, 130, 98, + 79, 4, 27, 28, 29, 30, 32, 33, 38, 39, + 45, 46, 52, 56, 60, 61, 84, 107, 142, 143, + 144, 148, 149, 109, 70, 150, 48, 50, 51, 4, + 78, 150, 135, 4, 81, 82, 102, 103, 104, 105, + 147, 54, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 79, 145, 145, 57, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 31, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 49, 53, 56, 110, 111, 112, 115, 116, - 4, 48, 50, 79, 98, 57, 60, 61, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 113, 78, 119, 122, 118, - 121, 141, 3, 111, 78, 50, 4, 102, 117, 120, - 123, 146, 51, 54, 51, 57, 51, 114, 122, 121, - 120, 50 + 42, 43, 49, 53, 56, 111, 112, 113, 116, 117, + 4, 48, 50, 80, 99, 57, 60, 61, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 114, 79, 120, 123, 119, + 122, 142, 3, 112, 73, 50, 4, 103, 118, 121, + 124, 147, 51, 54, 51, 57, 79, 51, 115, 123, + 122, 121, 50 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1430,7 +1427,7 @@ yyreduce: switch (yyn) { case 2: -#line 128 "compile.y" +#line 131 "compile.y" { Method& method=*new Method(Method::CT_ANY, 0, 0, /*min, max numbered_params_count*/ @@ -1441,7 +1438,7 @@ yyreduce: break; case 9: -#line 143 "compile.y" +#line 146 "compile.y" { const String& command=*LA2S(*yyvsp[-2]); YYSTYPE strings_code=yyvsp[0]; @@ -1452,21 +1449,13 @@ yyreduce: YYERROR; } if(command==CLASS_NAME) { - if(PC.cclass->base_class()) { // already changed from default? - strcpy(PC.error, "class already have a name '"); - strncat(PC.error, PC.cclass->name().cstr(), 100); - strcat(PC.error, "'"); - YYERROR; - } if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) { // new class' name const String& name=*LA2S(*strings_code); // creating the class VStateless_class* cclass=new VClass; - PC.cclass=cclass; - PC.cclass->set_name(name); - // append to request's classes - PC.request.classes().put(name, cclass); + PC.cclass_new=cclass; + PC.cclass_new->set_name(name); } else { strcpy(PC.error, "@"CLASS_NAME" must contain only one line with class name (contains more then one)"); YYERROR; @@ -1475,9 +1464,16 @@ yyreduce: for(size_t i=0; icount(); i+=OPERATIONS_PER_OPVALUE) PC.request.use_file(PC.request.main_class, *LA2S(*strings_code, i)); } else if(command==BASE_NAME) { + if(PC.append){ + strcpy(PC.error, "can't set base while appending methods to class '"); + strncat(PC.error, PC.cclass->name().cstr(), MAX_STRING/2); + strcat(PC.error, "'"); + YYERROR; + } + PC.class_add(); if(PC.cclass->base_class()) { // already changed from default? strcpy(PC.error, "class already have a base '"); - strncat(PC.error, PC.cclass->base_class()->name().cstr(), 100); + strncat(PC.error, PC.cclass->base_class()->name().cstr(), MAX_STRING/2); strcat(PC.error, "'"); YYERROR; } @@ -1505,28 +1501,58 @@ yyreduce: strcpy(PC.error, "@"BASE_NAME" must contain sole name"); YYERROR; } + } else if(command==OPTIONS_CONTROL_METHOD_NAME) { + for(size_t i=0; icount(); i+=OPERATIONS_PER_OPVALUE) { + const String& option=*LA2S(*strings_code, i); + if(option==OPTION_ALL_VARS_LOCAL_NAME){ + PC.set_all_vars_local(); + } else if(option==OPTION_PARTIAL_CLASS){ + if(PC.cclass_new){ + if(VStateless_class* existed=PC.get_existed_class(PC.cclass_new)){ + if(!PC.reuse_existed_class(existed)){ + strcpy(PC.error, "can't append methods to '"); + strncat(PC.error, PC.cclass_new->name().cstr(), MAX_STRING/2); + strcat(PC.error, "' - the class wasn't marked as partial"); + YYERROR; + } + } else { + // mark new class as partial. we can add methods to it later. + PC.cclass_new->set_partial(); + } + } else { + strcpy(PC.error, "'"OPTION_PARTIAL_CLASS"' option should be used straight after @"CLASS_NAME); + YYERROR; + } + } else { + strcpy(PC.error, "'"); + strncat(PC.error, option.cstr(), MAX_STRING/2); + strcat(PC.error, "' invalid option. valid options are " + "'"OPTION_PARTIAL_CLASS"' and '"OPTION_ALL_VARS_LOCAL_NAME"'"); + YYERROR; + } + } } else { strcpy(PC.error, "'"); strncat(PC.error, command.cstr(), MAX_STRING/2); strcat(PC.error, "' invalid special name. valid names are " - "'"CLASS_NAME"', '"USE_CONTROL_METHOD_NAME"' and '"BASE_NAME"'"); + "'"CLASS_NAME"', '"USE_CONTROL_METHOD_NAME"', '"BASE_NAME"' and '"OPTIONS_CONTROL_METHOD_NAME"'."); YYERROR; } ;} break; case 13: -#line 215 "compile.y" +#line 247 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; case 17: -#line 219 "compile.y" +#line 251 "compile.y" { + PC.class_add(); PC.explicit_result=false; - const String& name=*LA2S(*yyvsp[-5]); - YYSTYPE params_names_code=yyvsp[-4]; + YYSTYPE params_names_code=yyvsp[-3]; ArrayString* params_names=0; if(int size=params_names_code->count()) { params_names=new ArrayString; @@ -1534,71 +1560,89 @@ yyreduce: *params_names+=LA2S(*params_names_code, i); } - YYSTYPE locals_names_code=yyvsp[-3]; + YYSTYPE locals_names_code=yyvsp[-2]; ArrayString* locals_names=0; + bool all_vars_local=false; if(int size=locals_names_code->count()) { locals_names=new ArrayString; for(int i=0; iis_vars_local()) + all_vars_local=true; Method* method=new Method( //name, Method::CT_ANY, 0, 0/*min,max numbered_params_count*/, params_names, locals_names, - yyvsp[0], 0); + 0/*to be filled later in next {} */, 0, all_vars_local); - PC.cclass->add_method(PC.alias_method(name), *method); *reinterpret_cast(&yyval)=method; // todo: check [][;result;] ;} break; - case 20: -#line 258 "compile.y" + case 18: +#line 291 "compile.y" + { + Method& method=*reinterpret_cast(yyvsp[-1]); + // fill in the code + method.parser_code=yyvsp[0]; + + // register in class + const String& name=*LA2S(*yyvsp[-6]); + PC.cclass->add_method(PC.alias_method(name), method); +;} + break; + + case 21: +#line 302 "compile.y" {yyval=yyvsp[-1];} break; - case 24: -#line 260 "compile.y" + case 25: +#line 304 "compile.y" { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} break; - case 30: -#line 268 "compile.y" + case 31: +#line 312 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 36: -#line 274 "compile.y" + case 37: +#line 318 "compile.y" { yyval=yyvsp[0]; /* stack: resulting value */ - changetail_or_append(*yyval, - OP_GET_ELEMENT, false, /*->*/OP_GET_ELEMENT__WRITE, - /*or */OP_WRITE_VALUE - ); /* value=pop; wcontext.write(value) */ + if(!replace_top_opcode(*yyval, OP::OP_VALUE__GET_ELEMENT, OP::OP_VALUE__GET_ELEMENT__WRITE)) + changetail_or_append(*yyval, + OP::OP_GET_ELEMENT, false, /*->*/OP::OP_GET_ELEMENT__WRITE, + /*or */OP::OP_WRITE_VALUE + ); /* value=pop; wcontext.write(value) */ ;} break; - case 37: -#line 281 "compile.y" + case 38: +#line 326 "compile.y" { yyval=yyvsp[0] ;} break; - case 40: -#line 283 "compile.y" + case 41: +#line 328 "compile.y" { yyval=yyvsp[-1] ;} break; - case 43: -#line 287 "compile.y" + case 44: +#line 332 "compile.y" { yyval=N(); ArrayOperation* diving_code=yyvsp[0]; @@ -1606,43 +1650,57 @@ yyreduce: // self.xxx... -> xxx... // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... if(first_name && *first_name==SELF_ELEMENT_NAME) { - O(*yyval, OP_WITH_SELF); /* stack: starting context */ + O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */ P(*yyval, *diving_code, /* skip over... */ - diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/); + diving_code->count()>=4?4/*OP::OP_VALUE+origin+string+OP::OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/); } else { - O(*yyval, OP_WITH_READ); /* stack: starting context */ +#ifdef OPTIMIZE_BYTECODE_GET_ELEMENT + if(diving_code->count()==4){ // optimisations for simple (but very popular) cases + O(*yyval, + (PC.in_call_value) // ^call + ? OP::OP_VALUE__GET_ELEMENT_OR_OPERATOR // OP_VALUE+origin+string+OP_GET_ELEMENT -> OP_VALUE__GET_ELEMENT_OR_OPERATOR+origin+string + : OP::OP_VALUE__GET_ELEMENT // OP_VALUE+origin+string+OP_GET_ELEMENT -> OP_VALUE__GET_ELEMENT+origin+string + ); + P(*yyval, *diving_code, 1/*offset==1: skip leading OP_VALUE*/, 2/*limit==2: skip trailing OP_GET_ELEMENT*/); + } else { + O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ + P(*yyval, *diving_code); + } +#else + O(*yyval, OP::OP_WITH_READ); /* stack: starting context */ // ^if ELEMENT -> ^if 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()==4) - diving_code->put(4-1, OP_GET_ELEMENT_OR_OPERATOR); + diving_code->put(4-1, OP::OP_GET_ELEMENT_OR_OPERATOR); P(*yyval, *diving_code); +#endif } /* diving code; stack: current context */ ;} break; - case 44: -#line 309 "compile.y" + case 45: +#line 368 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 46: -#line 310 "compile.y" + case 47: +#line 369 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 47: -#line 314 "compile.y" + case 48: +#line 373 "compile.y" { yyval=yyvsp[-1]; /* stack: context,name */ P(*yyval, *yyvsp[0]); /* stack: context,name,constructor_value */ ;} break; - case 51: -#line 322 "compile.y" + case 52: +#line 381 "compile.y" { yyval=N(); ArrayOperation* diving_code=yyvsp[0]; @@ -1650,257 +1708,255 @@ yyreduce: // $self.xxx... -> $xxx... // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+... if(first_name && *first_name==SELF_ELEMENT_NAME) { - O(*yyval, OP_WITH_SELF); /* stack: starting context */ + O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */ P(*yyval, *diving_code, /* skip over... */ - diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/); + diving_code->count()>=4?4/*OP::OP_VALUE+origin+string+OP::OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/); } else { - O(*yyval, OP_WITH_ROOT); /* stack: starting context */ + O(*yyval, OP::OP_WITH_ROOT); /* stack: starting context */ P(*yyval, *diving_code); } /* diving code; stack: current context */ ;} break; - case 52: -#line 339 "compile.y" + case 53: +#line 398 "compile.y" { yyval=N(); - O(*yyval, OP_WITH_WRITE); /* stack: starting context */ + O(*yyval, OP::OP_WITH_WRITE); /* stack: starting context */ P(*yyval, *yyvsp[0]); /* diving code; stack: context,name */ ;} break; - case 53: -#line 344 "compile.y" + case 54: +#line 403 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 57: -#line 351 "compile.y" + case 58: +#line 410 "compile.y" { // allow $result_or_other_variable[ letters here any time ] *reinterpret_cast(&yyval)=PC.explicit_result; PC.explicit_result=false; ;} break; - case 58: -#line 354 "compile.y" + case 59: +#line 413 "compile.y" { PC.explicit_result=*reinterpret_cast(&yyvsp[-1]); ;} break; - case 59: -#line 356 "compile.y" + case 60: +#line 415 "compile.y" { // stack: context, name yyval=yyvsp[-2]; // stack: context, name, value - O(*yyval, 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) */ ;} break; - case 60: -#line 362 "compile.y" + case 61: +#line 421 "compile.y" { yyval=N(); - O(*yyval, OP_PREPARE_TO_EXPRESSION); + O(*yyval, OP::OP_PREPARE_TO_EXPRESSION); // stack: context, name P(*yyval, *yyvsp[-1]); // stack: context, name, value - O(*yyval, 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) */ ;} break; - case 61: -#line 370 "compile.y" + case 62: +#line 429 "compile.y" { // stack: context, name yyval=N(); - OA(*yyval, 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)) */ ;} break; - case 65: -#line 381 "compile.y" + case 66: +#line 440 "compile.y" { yyval=N(); - OA(*yyval, 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 */ /* context=pop; stack: context.value() */ ;} break; - case 68: -#line 388 "compile.y" + case 69: +#line 447 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 69: -#line 392 "compile.y" + case 70: +#line 451 "compile.y" { yyval=yyvsp[0]; /* stack: value */ changetail_or_append(*yyval, - OP_CALL, true, /*->*/ OP_CALL__WRITE, - /*or */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; - case 70: -#line 398 "compile.y" + case 71: +#line 457 "compile.y" { PC.in_call_value=true; ;} break; - case 71: -#line 401 "compile.y" + case 72: +#line 460 "compile.y" { PC.in_call_value=false; ;} break; - case 72: -#line 404 "compile.y" + case 73: +#line 463 "compile.y" { /* ^field.$method{vasya} */ yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */ YYSTYPE params_code=yyvsp[-1]; - if(params_code->count()==4) { // probably [] case. [OP_VALUE+origin+Void+STORE_PARAM] + 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->is_void()) // value is VVoid? params_code=0; // ^zzz[] case. don't append lone empty param. } /* stack: context, method_junction */ - OA(*yyval, OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value + OA(*yyval, OP::OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value ;} break; - case 75: -#line 419 "compile.y" + case 76: +#line 478 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 79: -#line 425 "compile.y" + case 80: +#line 484 "compile.y" { // allow ^call[ letters here any time ] *reinterpret_cast(&yyval)=PC.explicit_result; PC.explicit_result=false; ;} break; - case 80: -#line 428 "compile.y" + case 81: +#line 487 "compile.y" { PC.explicit_result=*reinterpret_cast(&yyvsp[-1]); ;} break; - case 81: -#line 430 "compile.y" + case 82: +#line 489 "compile.y" {yyval=yyvsp[-2];} break; - case 82: -#line 431 "compile.y" + case 83: +#line 490 "compile.y" {yyval=yyvsp[-1];} break; - case 83: -#line 432 "compile.y" + case 84: +#line 491 "compile.y" {yyval=yyvsp[-1];} break; - case 85: -#line 435 "compile.y" + case 86: +#line 494 "compile.y" { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} break; - case 87: -#line 439 "compile.y" + case 88: +#line 498 "compile.y" { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} break; - case 89: -#line 443 "compile.y" + case 90: +#line 502 "compile.y" { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;} break; - case 90: -#line 445 "compile.y" + case 91: +#line 504 "compile.y" { yyval=yyvsp[0]; - O(*yyval, OP_STORE_PARAM); ;} break; - case 91: -#line 449 "compile.y" + case 92: +#line 507 "compile.y" { YYSTYPE expr_code=yyvsp[0]; if(expr_code->count()==3 - && (*expr_code)[0].code==OP_VALUE) { // optimizing (double/bool/incidently 'string' too) case. [OP_VALUE+origin+Double] + && (*expr_code)[0].code==OP::OP_VALUE) { // optimizing (double/bool/incidently 'string' too) case. [OP::OP_VALUE+origin+Double]. no evaluating yyval=expr_code; - O(*yyval, OP_STORE_PARAM); // no evaluating } else { ArrayOperation* code=N(); - O(*code, OP_PREPARE_TO_EXPRESSION); + O(*code, OP::OP_PREPARE_TO_EXPRESSION); P(*code, *expr_code); - O(*code, OP_WRITE_EXPR_RESULT); + O(*code, OP::OP_WRITE_EXPR_RESULT); yyval=N(); - OA(*yyval, OP_EXPR_CODE__STORE_PARAM, code); + OA(*yyval, OP::OP_EXPR_CODE__STORE_PARAM, code); } ;} break; - case 92: -#line 464 "compile.y" + case 93: +#line 521 "compile.y" { yyval=N(); - OA(*yyval, OP_CURLY_CODE__STORE_PARAM, yyvsp[0]); + OA(*yyval, OP::OP_CURLY_CODE__STORE_PARAM, yyvsp[0]); ;} break; - case 97: -#line 476 "compile.y" + case 98: +#line 533 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 99: -#line 478 "compile.y" + case 100: +#line 535 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 101: -#line 480 "compile.y" + case 102: +#line 537 "compile.y" { // 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 /* stack: context */ yyval=yyvsp[0]; /* stack: context,name */ - O(*yyval, 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) */ ;} break; - case 102: -#line 488 "compile.y" + case 103: +#line 545 "compile.y" { /* stack: context */ yyval=yyvsp[0]; /* stack: context,name */ - O(*yyval, 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) */ ;} break; - case 108: -#line 501 "compile.y" + case 109: +#line 558 "compile.y" { yyval=yyvsp[0]; - O(*yyval, OP_GET_ELEMENT); + O(*yyval, OP::OP_GET_ELEMENT); ;} break; - case 109: -#line 505 "compile.y" + case 110: +#line 562 "compile.y" { ArrayOperation* code; { @@ -1908,59 +1964,59 @@ yyreduce: P(*code, *yyvsp[0]); } yyval=N(); - OA(*yyval, OP_STRING_POOL, code); + OA(*yyval, OP::OP_STRING_POOL, code); ;} break; - case 110: -#line 514 "compile.y" + case 111: +#line 571 "compile.y" { // allow $result_or_other_variable[ letters here any time ] *reinterpret_cast(&yyval)=PC.explicit_result; PC.explicit_result=false; ;} break; - case 111: -#line 517 "compile.y" + case 112: +#line 574 "compile.y" { PC.explicit_result=*reinterpret_cast(&yyvsp[-1]); ;} break; - case 112: -#line 519 "compile.y" + case 113: +#line 576 "compile.y" { yyval=N(); - OA(*yyval, OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */ + OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */ /* some code that writes to that context */ /* context=pop; stack: context.value() */ ;} break; - case 113: -#line 525 "compile.y" + case 114: +#line 582 "compile.y" { yyval=N(); - O(*yyval, OP_WITH_READ); + O(*yyval, OP::OP_WITH_READ); P(*yyval, *yyvsp[0]); ;} break; - case 115: -#line 530 "compile.y" + case 116: +#line 587 "compile.y" { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;} break; - case 116: -#line 531 "compile.y" + case 117: +#line 588 "compile.y" { yyval=yyvsp[0]; - O(*yyval, OP_GET_ELEMENT__WRITE); + O(*yyval, OP::OP_GET_ELEMENT__WRITE); ;} break; - case 119: -#line 540 "compile.y" + case 120: +#line 597 "compile.y" { yyval=yyvsp[-1]; // stack: class name string if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class @@ -1971,255 +2027,260 @@ yyreduce: YYERROR; } } - O(*yyval, OP_GET_CLASS); +#ifdef OPTIMIZE_BYTECODE_GET_CLASS + // OP_VALUE+origin+string+OP_GET_CLASS -> OP_VALUE__GET_CLASS+origin+string + replace_top_opcode(*yyval, OP::OP_VALUE, OP::OP_VALUE__GET_CLASS, true/*assert if top opcode != OP_VALUE*/) +#else + O(*yyval, OP::OP_GET_CLASS); +#endif ;} break; - case 120: -#line 552 "compile.y" + case 121: +#line 614 "compile.y" { yyval=yyvsp[-1]; if(!PC.in_call_value) { strcpy(PC.error, ":: not allowed here"); YYERROR; } - O(*yyval, OP_PREPARE_TO_CONSTRUCT_OBJECT); + O(*yyval, OP::OP_PREPARE_TO_CONSTRUCT_OBJECT); ;} break; - case 127: -#line 571 "compile.y" - { yyval = yyvsp[-1] ;} - break; - case 128: -#line 572 "compile.y" +#line 633 "compile.y" { yyval = yyvsp[-1] ;} break; case 129: -#line 573 "compile.y" - { yyval = yyvsp[-1]; ;} +#line 634 "compile.y" + { yyval = yyvsp[-1] ;} break; case 130: -#line 575 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_NEG) ;} +#line 635 "compile.y" + { yyval = yyvsp[-1]; ;} break; case 131: -#line 576 "compile.y" - { yyval=yyvsp[0] ;} +#line 637 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_NEG) ;} break; case 132: -#line 577 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_INV) ;} +#line 638 "compile.y" + { yyval=yyvsp[0] ;} break; case 133: -#line 578 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_NOT) ;} +#line 639 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_INV) ;} break; case 134: -#line 579 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_DEF) ;} +#line 640 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_NOT) ;} break; case 135: -#line 580 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_IN) ;} +#line 641 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_DEF) ;} break; case 136: -#line 581 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_FEXISTS) ;} +#line 642 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_IN) ;} break; case 137: -#line 582 "compile.y" - { yyval=yyvsp[0]; O(*yyval, OP_DEXISTS) ;} +#line 643 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_FEXISTS) ;} break; case 138: -#line 584 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_SUB) ;} +#line 644 "compile.y" + { yyval=yyvsp[0]; O(*yyval, OP::OP_DEXISTS) ;} break; case 139: -#line 585 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_ADD) ;} +#line 646 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_SUB) ;} break; case 140: -#line 586 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_MUL) ;} +#line 647 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_ADD) ;} break; case 141: -#line 587 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_DIV) ;} +#line 648 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MUL) ;} break; case 142: -#line 588 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_MOD) ;} +#line 649 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_DIV) ;} break; case 143: -#line 589 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_INTDIV) ;} +#line 650 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_MOD) ;} break; case 144: -#line 590 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_BIN_SL) ;} +#line 651 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_INTDIV) ;} break; case 145: -#line 591 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_BIN_SR) ;} +#line 652 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SL) ;} break; case 146: -#line 592 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_BIN_AND) ;} +#line 653 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_SR) ;} break; case 147: -#line 593 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_BIN_OR) ;} +#line 654 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_AND) ;} break; case 148: -#line 594 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_BIN_XOR) ;} +#line 655 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_OR) ;} break; case 149: -#line 595 "compile.y" - { yyval=yyvsp[-2]; OA(*yyval, OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP_LOG_AND) ;} +#line 656 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_BIN_XOR) ;} break; case 150: -#line 596 "compile.y" - { yyval=yyvsp[-2]; OA(*yyval, OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP_LOG_OR) ;} +#line 657 "compile.y" + { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_AND) ;} break; case 151: -#line 597 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_LOG_XOR) ;} +#line 658 "compile.y" + { yyval=yyvsp[-2]; OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]); O(*yyval, OP::OP_LOG_OR) ;} break; case 152: -#line 598 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_LT) ;} +#line 659 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_LOG_XOR) ;} break; case 153: -#line 599 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_GT) ;} +#line 660 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LT) ;} break; case 154: -#line 600 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_LE) ;} +#line 661 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GT) ;} break; case 155: -#line 601 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_GE) ;} +#line 662 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_LE) ;} break; case 156: -#line 602 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_EQ) ;} +#line 663 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_GE) ;} break; case 157: -#line 603 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_NUM_NE) ;} +#line 664 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_EQ) ;} break; case 158: -#line 604 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_LT) ;} +#line 665 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_NUM_NE) ;} break; case 159: -#line 605 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_GT) ;} +#line 666 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LT) ;} break; case 160: -#line 606 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_LE) ;} +#line 667 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GT) ;} break; case 161: -#line 607 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_GE) ;} +#line 668 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_LE) ;} break; case 162: -#line 608 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_EQ) ;} +#line 669 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_GE) ;} break; case 163: -#line 609 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_STR_NE) ;} +#line 670 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_EQ) ;} break; case 164: -#line 610 "compile.y" - { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP_IS) ;} +#line 671 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_STR_NE) ;} break; case 165: -#line 613 "compile.y" +#line 672 "compile.y" + { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]); O(*yyval, OP::OP_IS) ;} + break; + + case 166: +#line 675 "compile.y" { // optimized from OP_STRING->OP_VALUE for doubles maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0])); ;} break; - case 166: -#line 618 "compile.y" + case 167: +#line 680 "compile.y" { yyval=N(); - OA(*yyval, OP_STRING_POOL, yyvsp[0]); /* stack: empty write context */ + OA(*yyval, OP::OP_STRING_POOL, yyvsp[0]); /* stack: empty write context */ /* some code that writes to that context */ /* context=pop; stack: context.get_string() */ ;} break; - case 167: -#line 627 "compile.y" + case 168: +#line 689 "compile.y" { // optimized from OP_STRING+OP_WRITE_VALUE to OP_STRING__WRITE change_string_literal_to_write_string_literal(*(yyval=yyvsp[0])) ;} break; - case 168: -#line 632 "compile.y" + case 169: +#line 694 "compile.y" { yyval=VL(/*we know that we will not change it*/const_cast(&vvoid), 0, 0, 0) ;} break; - case 169: -#line 633 "compile.y" + case 170: +#line 695 "compile.y" { yyval = VL(/*we know that we will not change it*/const_cast(&vtrue), 0, 0, 0) ;} break; - case 170: -#line 634 "compile.y" + case 171: +#line 696 "compile.y" { yyval = VL(/*we know that we will not change it*/const_cast(&vfalse), 0, 0, 0) ;} break; - case 171: -#line 636 "compile.y" + case 172: +#line 698 "compile.y" { yyval=N() ;} break; @@ -2227,7 +2288,7 @@ yyreduce: } /* Line 1010 of yacc.c. */ -#line 2231 "compile.tab.C" +#line 2292 "compile.tab.C" yyvsp -= yylen; yyssp -= yylen; @@ -2452,7 +2513,7 @@ yyreturn: } -#line 638 "compile.y" +#line 700 "compile.y" #endif @@ -2545,7 +2606,7 @@ case LS_DEF_COMMENT: default: switch(*pc.source) { // ^escaping some punctuators - case '^': case '$': case ';': + case '^': case '$': case ';': case '@': case '(': case ')': case '[': case ']': case '{': case '}': @@ -2573,7 +2634,7 @@ default: pc.string.append_strdup_know_length(begin, end-begin); } // #HH ? - if(pc.source[0]=='#' && pc.source[1] && pc.source[2]) { + if(pc.source[1] && isxdigit(pc.source[1]) && pc.source[2] && isxdigit(pc.source[2])) { char c=(char)( hex_value[(unsigned char)pc.source[1]]*0x10+ hex_value[(unsigned char)pc.source[2]]); @@ -2592,7 +2653,14 @@ default: // skip analysis = forced literal continue; } - break; + // just escaped char + // reset piece 'begin' position & line + begin=pc.source; + begin_pos=pc.pos; + // skip over _ after ^ + pc.source++; pc.pos.col++; + // skip analysis = forced literal + continue; } break; } @@ -2889,14 +2957,18 @@ default: case 'd': if(end==begin) // right after whitespace if(pc.source[0]=='e' && pc.source[1]=='f') { // def - skip_analized=2; - result=DEF; - goto break2; + switch(pc.source[2]){ + case ' ': case '\t': case '\n': case '"': case '\'': case '^': case '$': // non-quoted string without whitespace after 'def' is not allowed + skip_analized=2; + result=DEF; + goto break2; + } + // error: incorrect char after 'def' } break; case 't': if(end==begin) // right after whitespace - if(pc.source[0]=='r' && pc.source[1]=='u' && pc.source[2]=='e') { // def + if(pc.source[0]=='r' && pc.source[1]=='u' && pc.source[2]=='e') { // true skip_analized=3; result=LITERAL_TRUE; goto break2; @@ -2904,7 +2976,7 @@ default: break; case 'f': if(end==begin) // right after whitespace - if(pc.source[0]=='a' && pc.source[1]=='l' && pc.source[2]=='s' && pc.source[3]=='e') { // def + if(pc.source[0]=='a' && pc.source[1]=='l' && pc.source[2]=='s' && pc.source[3]=='e') { // false skip_analized=4; result=LITERAL_FALSE; goto break2;