Kouhei Sutou
null+****@clear*****
Wed May 4 21:50:40 JST 2016
Kouhei Sutou 2016-05-04 21:50:40 +0900 (Wed, 04 May 2016) New Revision: 3ae82a5db9cba8f7aa74836793bc3c9e9362c464 https://github.com/groonga/groonga/commit/3ae82a5db9cba8f7aa74836793bc3c9e9362c464 Message: select output_columns v2: fix a bug that "*" isn't expand to columns Modified files: lib/grn_ecmascript.c lib/grn_ecmascript.lemon Modified: lib/grn_ecmascript.c (+682 -648) =================================================================== --- lib/grn_ecmascript.c 2016-05-04 20:39:09 +0900 (73e188e) +++ lib/grn_ecmascript.c 2016-05-04 21:50:40 +0900 (3ae2585) @@ -103,21 +103,17 @@ typedef union { #define grn_expr_parserARG_FETCH efs_info *efsi = yypParser->efsi #define grn_expr_parserARG_STORE yypParser->efsi = efsi #define YYNSTATE 142 -#define YYNRULE 133 +#define YYNRULE 134 #define YY_MAX_SHIFT 141 #define YY_MIN_SHIFTREDUCE 227 -#define YY_MAX_SHIFTREDUCE 359 -#define YY_MIN_REDUCE 360 -#define YY_MAX_REDUCE 492 -#define YY_ERROR_ACTION 493 -#define YY_ACCEPT_ACTION 494 -#define YY_NO_ACTION 495 +#define YY_MAX_SHIFTREDUCE 360 +#define YY_MIN_REDUCE 361 +#define YY_MAX_REDUCE 494 +#define YY_ERROR_ACTION 495 +#define YY_ACCEPT_ACTION 496 +#define YY_NO_ACTION 497 /************* End control #defines *******************************************/ -/* The yyzerominor constant is used to initialize instances of -** YYMINORTYPE objects to zero. */ -static const YYMINORTYPE yyzerominor = { 0 }; - /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** @@ -185,182 +181,182 @@ static const YYMINORTYPE yyzerominor = { 0 }; *********** Begin parsing tables **********************************************/ #define YY_ACTTAB_COUNT (1759) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 3, 71, 112, 338, 133, 236, 2, 77, 81, 126, - /* 10 */ 1, 231, 70, 494, 78, 109, 128, 241, 231, 317, - /* 20 */ 242, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 30 */ 100, 113, 101, 295, 299, 314, 74, 319, 322, 319, - /* 40 */ 322, 236, 73, 341, 81, 141, 9, 232, 70, 235, + /* 0 */ 3, 71, 112, 354, 133, 316, 2, 77, 81, 126, + /* 10 */ 1, 315, 70, 496, 78, 109, 128, 234, 315, 335, + /* 20 */ 318, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 30 */ 100, 113, 101, 330, 331, 333, 74, 337, 340, 337, + /* 40 */ 340, 316, 73, 356, 81, 141, 9, 227, 70, 230, /* 50 */ 65, 64, 53, 52, 51, 68, 67, 66, 63, 62, - /* 60 */ 61, 60, 59, 58, 323, 324, 325, 326, 327, 4, - /* 70 */ 124, 69, 57, 56, 317, 242, 244, 88, 123, 122, - /* 80 */ 136, 135, 134, 117, 85, 100, 113, 101, 295, 299, - /* 90 */ 314, 74, 356, 130, 319, 322, 316, 318, 112, 338, - /* 100 */ 133, 236, 2, 239, 81, 126, 1, 107, 70, 77, - /* 110 */ 115, 31, 30, 231, 317, 242, 244, 88, 123, 122, - /* 120 */ 136, 135, 134, 117, 85, 100, 113, 101, 295, 299, - /* 130 */ 314, 74, 238, 7, 319, 322, 321, 72, 355, 130, - /* 140 */ 339, 133, 344, 336, 234, 76, 65, 64, 23, 55, + /* 60 */ 61, 60, 59, 58, 341, 342, 343, 344, 345, 4, + /* 70 */ 124, 69, 57, 56, 335, 318, 319, 88, 123, 122, + /* 80 */ 136, 135, 134, 117, 85, 100, 113, 101, 330, 331, + /* 90 */ 333, 74, 308, 130, 337, 340, 292, 336, 112, 354, + /* 100 */ 133, 316, 2, 232, 81, 126, 1, 107, 70, 77, + /* 110 */ 115, 31, 30, 315, 335, 318, 319, 88, 123, 122, + /* 120 */ 136, 135, 134, 117, 85, 100, 113, 101, 330, 331, + /* 130 */ 333, 74, 231, 7, 337, 340, 339, 72, 359, 130, + /* 140 */ 355, 133, 297, 293, 229, 76, 65, 64, 23, 55, /* 150 */ 54, 68, 67, 66, 63, 62, 61, 60, 59, 58, - /* 160 */ 323, 324, 325, 326, 327, 4, 83, 82, 79, 236, - /* 170 */ 73, 237, 81, 141, 9, 320, 70, 65, 64, 351, - /* 180 */ 233, 28, 68, 67, 66, 63, 62, 61, 60, 59, - /* 190 */ 58, 323, 324, 325, 326, 327, 4, 108, 331, 352, - /* 200 */ 317, 353, 244, 88, 123, 122, 136, 135, 134, 117, - /* 210 */ 85, 100, 113, 101, 295, 299, 314, 74, 10, 7, - /* 220 */ 319, 322, 321, 72, 36, 35, 332, 6, 349, 317, - /* 230 */ 333, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 240 */ 100, 113, 101, 295, 299, 314, 74, 362, 361, 319, - /* 250 */ 322, 11, 84, 7, 474, 330, 321, 72, 312, 313, - /* 260 */ 332, 5, 28, 65, 64, 28, 80, 29, 68, 67, - /* 270 */ 66, 63, 62, 61, 60, 59, 58, 323, 324, 325, - /* 280 */ 326, 327, 4, 329, 7, 359, 358, 321, 72, 26, - /* 290 */ 8, 331, 132, 240, 127, 28, 129, 65, 64, 363, - /* 300 */ 32, 343, 68, 67, 66, 63, 62, 61, 60, 59, - /* 310 */ 58, 323, 324, 325, 326, 327, 4, 328, 24, 34, - /* 320 */ 25, 362, 342, 33, 362, 362, 362, 362, 65, 64, - /* 330 */ 362, 362, 362, 68, 67, 66, 63, 62, 61, 60, - /* 340 */ 59, 58, 323, 324, 325, 326, 327, 4, 362, 362, - /* 350 */ 75, 317, 353, 244, 88, 123, 122, 136, 135, 134, - /* 360 */ 117, 85, 100, 113, 101, 295, 299, 314, 74, 362, - /* 370 */ 362, 319, 322, 362, 362, 362, 362, 362, 362, 350, - /* 380 */ 317, 346, 244, 88, 123, 122, 136, 135, 134, 117, - /* 390 */ 85, 100, 113, 101, 295, 299, 314, 74, 362, 362, - /* 400 */ 319, 322, 362, 362, 362, 362, 362, 111, 115, 362, - /* 410 */ 362, 362, 317, 242, 244, 88, 123, 122, 136, 135, - /* 420 */ 134, 117, 85, 100, 113, 101, 295, 299, 314, 74, - /* 430 */ 118, 362, 319, 322, 317, 242, 244, 88, 123, 122, - /* 440 */ 136, 135, 134, 117, 85, 100, 113, 101, 295, 299, - /* 450 */ 314, 74, 362, 7, 319, 322, 321, 72, 124, 362, - /* 460 */ 362, 362, 317, 242, 244, 88, 123, 122, 136, 135, - /* 470 */ 134, 117, 85, 100, 113, 101, 295, 299, 314, 74, - /* 480 */ 362, 7, 319, 322, 321, 72, 362, 362, 362, 362, - /* 490 */ 362, 362, 362, 362, 362, 362, 362, 65, 64, 362, - /* 500 */ 362, 362, 68, 67, 66, 63, 62, 61, 60, 59, - /* 510 */ 58, 323, 324, 125, 326, 327, 4, 362, 362, 362, - /* 520 */ 362, 362, 362, 362, 362, 65, 64, 362, 362, 362, - /* 530 */ 68, 67, 66, 63, 62, 61, 60, 59, 58, 323, - /* 540 */ 324, 325, 326, 327, 4, 317, 335, 244, 88, 123, - /* 550 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 295, - /* 560 */ 299, 314, 74, 362, 362, 319, 322, 317, 334, 244, + /* 160 */ 341, 342, 343, 344, 345, 4, 83, 82, 79, 316, + /* 170 */ 73, 317, 81, 141, 9, 338, 70, 65, 64, 305, + /* 180 */ 228, 28, 68, 67, 66, 63, 62, 61, 60, 59, + /* 190 */ 58, 341, 342, 343, 344, 345, 4, 108, 349, 306, + /* 200 */ 335, 307, 319, 88, 123, 122, 136, 135, 134, 117, + /* 210 */ 85, 100, 113, 101, 330, 331, 333, 74, 10, 7, + /* 220 */ 337, 340, 339, 72, 36, 35, 350, 6, 302, 335, + /* 230 */ 351, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 240 */ 100, 113, 101, 330, 331, 333, 74, 447, 446, 337, + /* 250 */ 340, 11, 84, 7, 490, 348, 339, 72, 290, 291, + /* 260 */ 350, 5, 28, 65, 64, 28, 80, 29, 68, 67, + /* 270 */ 66, 63, 62, 61, 60, 59, 58, 341, 342, 343, + /* 280 */ 344, 345, 4, 347, 7, 310, 309, 339, 72, 26, + /* 290 */ 8, 349, 132, 233, 127, 28, 129, 65, 64, 448, + /* 300 */ 32, 357, 68, 67, 66, 63, 62, 61, 60, 59, + /* 310 */ 58, 341, 342, 343, 344, 345, 4, 346, 24, 34, + /* 320 */ 25, 363, 296, 33, 363, 363, 363, 363, 65, 64, + /* 330 */ 363, 363, 363, 68, 67, 66, 63, 62, 61, 60, + /* 340 */ 59, 58, 341, 342, 343, 344, 345, 4, 363, 363, + /* 350 */ 75, 335, 307, 319, 88, 123, 122, 136, 135, 134, + /* 360 */ 117, 85, 100, 113, 101, 330, 331, 333, 74, 363, + /* 370 */ 363, 337, 340, 363, 363, 363, 363, 363, 363, 304, + /* 380 */ 335, 299, 319, 88, 123, 122, 136, 135, 134, 117, + /* 390 */ 85, 100, 113, 101, 330, 331, 333, 74, 363, 363, + /* 400 */ 337, 340, 363, 363, 363, 363, 363, 111, 115, 363, + /* 410 */ 363, 363, 335, 318, 319, 88, 123, 122, 136, 135, + /* 420 */ 134, 117, 85, 100, 113, 101, 330, 331, 333, 74, + /* 430 */ 118, 363, 337, 340, 335, 318, 319, 88, 123, 122, + /* 440 */ 136, 135, 134, 117, 85, 100, 113, 101, 330, 331, + /* 450 */ 333, 74, 363, 7, 337, 340, 339, 72, 124, 363, + /* 460 */ 363, 363, 335, 318, 319, 88, 123, 122, 136, 135, + /* 470 */ 134, 117, 85, 100, 113, 101, 330, 331, 333, 74, + /* 480 */ 363, 7, 337, 340, 339, 72, 363, 363, 363, 363, + /* 490 */ 363, 363, 363, 363, 363, 363, 363, 65, 64, 363, + /* 500 */ 363, 363, 68, 67, 66, 63, 62, 61, 60, 59, + /* 510 */ 58, 341, 342, 125, 344, 345, 4, 363, 363, 363, + /* 520 */ 363, 363, 363, 363, 363, 65, 64, 363, 363, 363, + /* 530 */ 68, 67, 66, 63, 62, 61, 60, 59, 58, 341, + /* 540 */ 342, 343, 344, 345, 4, 335, 353, 319, 88, 123, + /* 550 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 330, + /* 560 */ 331, 333, 74, 363, 363, 337, 340, 335, 352, 319, /* 570 */ 88, 123, 122, 136, 135, 134, 117, 85, 100, 113, - /* 580 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 317, - /* 590 */ 256, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 600 */ 100, 113, 101, 295, 299, 314, 74, 362, 362, 319, - /* 610 */ 322, 362, 362, 317, 255, 244, 88, 123, 122, 136, - /* 620 */ 135, 134, 117, 85, 100, 113, 101, 295, 299, 314, - /* 630 */ 74, 362, 362, 319, 322, 317, 254, 244, 88, 123, - /* 640 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 295, - /* 650 */ 299, 314, 74, 362, 362, 319, 322, 317, 253, 244, + /* 580 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 335, + /* 590 */ 247, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 600 */ 100, 113, 101, 330, 331, 333, 74, 363, 363, 337, + /* 610 */ 340, 363, 363, 335, 246, 319, 88, 123, 122, 136, + /* 620 */ 135, 134, 117, 85, 100, 113, 101, 330, 331, 333, + /* 630 */ 74, 363, 363, 337, 340, 335, 245, 319, 88, 123, + /* 640 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 330, + /* 650 */ 331, 333, 74, 363, 363, 337, 340, 335, 244, 319, /* 660 */ 88, 123, 122, 136, 135, 134, 117, 85, 100, 113, - /* 670 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 317, - /* 680 */ 252, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 690 */ 100, 113, 101, 295, 299, 314, 74, 362, 362, 319, - /* 700 */ 322, 317, 251, 244, 88, 123, 122, 136, 135, 134, - /* 710 */ 117, 85, 100, 113, 101, 295, 299, 314, 74, 362, - /* 720 */ 362, 319, 322, 317, 250, 244, 88, 123, 122, 136, - /* 730 */ 135, 134, 117, 85, 100, 113, 101, 295, 299, 314, - /* 740 */ 74, 362, 362, 319, 322, 317, 249, 244, 88, 123, - /* 750 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 295, - /* 760 */ 299, 314, 74, 362, 362, 319, 322, 317, 248, 244, + /* 670 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 335, + /* 680 */ 243, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 690 */ 100, 113, 101, 330, 331, 333, 74, 363, 363, 337, + /* 700 */ 340, 335, 242, 319, 88, 123, 122, 136, 135, 134, + /* 710 */ 117, 85, 100, 113, 101, 330, 331, 333, 74, 363, + /* 720 */ 363, 337, 340, 335, 241, 319, 88, 123, 122, 136, + /* 730 */ 135, 134, 117, 85, 100, 113, 101, 330, 331, 333, + /* 740 */ 74, 363, 363, 337, 340, 335, 240, 319, 88, 123, + /* 750 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 330, + /* 760 */ 331, 333, 74, 363, 363, 337, 340, 335, 239, 319, /* 770 */ 88, 123, 122, 136, 135, 134, 117, 85, 100, 113, - /* 780 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 317, - /* 790 */ 247, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 800 */ 100, 113, 101, 295, 299, 314, 74, 362, 362, 319, - /* 810 */ 322, 317, 246, 244, 88, 123, 122, 136, 135, 134, - /* 820 */ 117, 85, 100, 113, 101, 295, 299, 314, 74, 362, - /* 830 */ 362, 319, 322, 317, 347, 244, 88, 123, 122, 136, - /* 840 */ 135, 134, 117, 85, 100, 113, 101, 295, 299, 314, - /* 850 */ 74, 362, 362, 319, 322, 317, 340, 244, 88, 123, - /* 860 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 295, - /* 870 */ 299, 314, 74, 362, 362, 319, 322, 317, 258, 244, + /* 780 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 335, + /* 790 */ 238, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 800 */ 100, 113, 101, 330, 331, 333, 74, 363, 363, 337, + /* 810 */ 340, 335, 237, 319, 88, 123, 122, 136, 135, 134, + /* 820 */ 117, 85, 100, 113, 101, 330, 331, 333, 74, 363, + /* 830 */ 363, 337, 340, 335, 300, 319, 88, 123, 122, 136, + /* 840 */ 135, 134, 117, 85, 100, 113, 101, 330, 331, 333, + /* 850 */ 74, 363, 363, 337, 340, 335, 295, 319, 88, 123, + /* 860 */ 122, 136, 135, 134, 117, 85, 100, 113, 101, 330, + /* 870 */ 331, 333, 74, 363, 363, 337, 340, 335, 248, 319, /* 880 */ 88, 123, 122, 136, 135, 134, 117, 85, 100, 113, - /* 890 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 317, - /* 900 */ 140, 244, 88, 123, 122, 136, 135, 134, 117, 85, - /* 910 */ 100, 113, 101, 295, 299, 314, 74, 362, 362, 319, - /* 920 */ 322, 317, 245, 244, 88, 123, 122, 136, 135, 134, - /* 930 */ 117, 85, 100, 113, 101, 295, 299, 314, 74, 362, - /* 940 */ 362, 319, 322, 317, 243, 244, 88, 123, 122, 136, - /* 950 */ 135, 134, 117, 85, 100, 113, 101, 295, 299, 314, - /* 960 */ 74, 362, 317, 319, 322, 119, 362, 110, 136, 135, - /* 970 */ 134, 117, 85, 100, 113, 101, 295, 299, 314, 74, - /* 980 */ 362, 317, 319, 322, 119, 362, 362, 131, 135, 134, - /* 990 */ 117, 85, 100, 113, 101, 295, 299, 314, 74, 362, - /* 1000 */ 362, 319, 322, 317, 362, 362, 119, 362, 362, 139, - /* 1010 */ 135, 134, 117, 85, 100, 113, 101, 295, 299, 314, - /* 1020 */ 74, 362, 362, 319, 322, 317, 362, 362, 119, 362, - /* 1030 */ 362, 362, 138, 134, 117, 85, 100, 113, 101, 295, - /* 1040 */ 299, 314, 74, 362, 362, 319, 322, 317, 362, 362, - /* 1050 */ 119, 362, 362, 362, 362, 137, 117, 85, 100, 113, - /* 1060 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 50, + /* 890 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 335, + /* 900 */ 140, 319, 88, 123, 122, 136, 135, 134, 117, 85, + /* 910 */ 100, 113, 101, 330, 331, 333, 74, 363, 363, 337, + /* 920 */ 340, 335, 236, 319, 88, 123, 122, 136, 135, 134, + /* 930 */ 117, 85, 100, 113, 101, 330, 331, 333, 74, 363, + /* 940 */ 363, 337, 340, 335, 235, 319, 88, 123, 122, 136, + /* 950 */ 135, 134, 117, 85, 100, 113, 101, 330, 331, 333, + /* 960 */ 74, 363, 335, 337, 340, 119, 363, 110, 136, 135, + /* 970 */ 134, 117, 85, 100, 113, 101, 330, 331, 333, 74, + /* 980 */ 363, 335, 337, 340, 119, 363, 363, 131, 135, 134, + /* 990 */ 117, 85, 100, 113, 101, 330, 331, 333, 74, 363, + /* 1000 */ 363, 337, 340, 335, 363, 363, 119, 363, 363, 139, + /* 1010 */ 135, 134, 117, 85, 100, 113, 101, 330, 331, 333, + /* 1020 */ 74, 363, 363, 337, 340, 335, 363, 363, 119, 363, + /* 1030 */ 363, 363, 138, 134, 117, 85, 100, 113, 101, 330, + /* 1040 */ 331, 333, 74, 363, 363, 337, 340, 335, 363, 363, + /* 1050 */ 119, 363, 363, 363, 363, 137, 117, 85, 100, 113, + /* 1060 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 50, /* 1070 */ 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, /* 1080 */ 39, 38, 37, 27, 22, 21, 20, 19, 18, 17, - /* 1090 */ 16, 15, 14, 13, 12, 317, 362, 362, 119, 362, - /* 1100 */ 362, 362, 362, 362, 121, 85, 100, 113, 101, 295, - /* 1110 */ 299, 314, 74, 362, 362, 319, 322, 362, 317, 362, - /* 1120 */ 362, 119, 362, 362, 362, 312, 313, 362, 86, 100, - /* 1130 */ 113, 101, 295, 299, 314, 74, 362, 362, 319, 322, - /* 1140 */ 317, 362, 362, 119, 362, 362, 362, 362, 362, 362, - /* 1150 */ 87, 100, 113, 101, 295, 299, 314, 74, 362, 317, - /* 1160 */ 319, 322, 119, 362, 362, 362, 362, 362, 362, 362, - /* 1170 */ 89, 113, 101, 295, 299, 314, 74, 362, 317, 319, - /* 1180 */ 322, 119, 362, 362, 362, 362, 362, 362, 362, 90, - /* 1190 */ 113, 101, 295, 299, 314, 74, 362, 362, 319, 322, - /* 1200 */ 362, 317, 362, 362, 119, 362, 362, 7, 362, 362, - /* 1210 */ 321, 72, 91, 113, 101, 295, 299, 314, 74, 362, - /* 1220 */ 362, 319, 322, 317, 362, 362, 119, 362, 362, 362, - /* 1230 */ 362, 362, 362, 362, 92, 113, 101, 295, 299, 314, - /* 1240 */ 74, 362, 317, 319, 322, 119, 362, 362, 362, 362, - /* 1250 */ 362, 362, 362, 93, 113, 101, 295, 299, 314, 74, - /* 1260 */ 362, 317, 319, 322, 119, 323, 324, 325, 326, 327, - /* 1270 */ 4, 362, 94, 113, 101, 295, 299, 314, 74, 362, - /* 1280 */ 362, 319, 322, 362, 317, 362, 362, 119, 362, 362, - /* 1290 */ 362, 362, 362, 362, 362, 95, 113, 101, 295, 299, - /* 1300 */ 314, 74, 362, 362, 319, 322, 317, 362, 362, 119, - /* 1310 */ 362, 362, 362, 362, 362, 362, 362, 96, 113, 101, - /* 1320 */ 295, 299, 314, 74, 362, 317, 319, 322, 119, 362, - /* 1330 */ 362, 362, 362, 362, 362, 362, 97, 113, 101, 295, - /* 1340 */ 299, 314, 74, 362, 317, 319, 322, 119, 362, 362, - /* 1350 */ 362, 362, 362, 362, 362, 98, 113, 101, 295, 299, - /* 1360 */ 314, 74, 362, 362, 319, 322, 362, 317, 362, 362, - /* 1370 */ 119, 362, 362, 362, 362, 362, 362, 362, 99, 113, - /* 1380 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 317, - /* 1390 */ 362, 362, 119, 362, 362, 362, 362, 362, 362, 362, - /* 1400 */ 102, 113, 101, 295, 299, 314, 74, 362, 317, 319, - /* 1410 */ 322, 119, 362, 362, 362, 362, 362, 362, 362, 104, - /* 1420 */ 113, 101, 295, 299, 314, 74, 362, 317, 319, 322, - /* 1430 */ 119, 362, 362, 362, 362, 362, 362, 362, 106, 113, - /* 1440 */ 101, 295, 299, 314, 74, 362, 362, 319, 322, 362, - /* 1450 */ 317, 362, 362, 119, 362, 362, 362, 362, 362, 362, - /* 1460 */ 362, 362, 114, 101, 295, 299, 314, 74, 362, 362, - /* 1470 */ 319, 322, 317, 362, 362, 119, 362, 362, 362, 362, - /* 1480 */ 362, 362, 362, 362, 116, 101, 295, 299, 314, 74, - /* 1490 */ 362, 317, 319, 322, 119, 362, 362, 362, 362, 362, - /* 1500 */ 362, 362, 362, 120, 101, 295, 299, 314, 74, 362, - /* 1510 */ 362, 319, 322, 360, 362, 362, 83, 82, 79, 236, - /* 1520 */ 73, 362, 81, 141, 9, 317, 70, 362, 119, 362, - /* 1530 */ 362, 362, 362, 362, 362, 362, 362, 362, 103, 295, - /* 1540 */ 299, 314, 74, 362, 362, 319, 322, 317, 362, 362, - /* 1550 */ 119, 362, 362, 362, 362, 317, 362, 362, 119, 362, - /* 1560 */ 105, 295, 299, 314, 74, 362, 362, 319, 322, 298, - /* 1570 */ 299, 314, 74, 362, 317, 319, 322, 119, 362, 362, - /* 1580 */ 362, 362, 362, 362, 362, 362, 362, 362, 297, 299, - /* 1590 */ 314, 74, 362, 362, 319, 322, 317, 362, 362, 119, - /* 1600 */ 362, 362, 362, 362, 362, 317, 362, 362, 119, 362, - /* 1610 */ 310, 299, 314, 74, 362, 362, 319, 322, 362, 309, - /* 1620 */ 299, 314, 74, 362, 317, 319, 322, 119, 362, 362, - /* 1630 */ 362, 362, 362, 317, 362, 362, 119, 362, 308, 299, - /* 1640 */ 314, 74, 362, 317, 319, 322, 119, 307, 299, 314, - /* 1650 */ 74, 362, 317, 319, 322, 119, 362, 306, 299, 314, - /* 1660 */ 74, 362, 362, 319, 322, 362, 305, 299, 314, 74, - /* 1670 */ 362, 317, 319, 322, 119, 362, 362, 362, 362, 317, - /* 1680 */ 362, 362, 119, 362, 362, 304, 299, 314, 74, 362, - /* 1690 */ 362, 319, 322, 303, 299, 314, 74, 362, 362, 319, - /* 1700 */ 322, 362, 317, 362, 362, 119, 362, 362, 362, 362, - /* 1710 */ 317, 362, 362, 119, 362, 362, 302, 299, 314, 74, - /* 1720 */ 362, 362, 319, 322, 301, 299, 314, 74, 362, 317, - /* 1730 */ 319, 322, 119, 362, 362, 362, 362, 317, 362, 362, - /* 1740 */ 119, 362, 362, 300, 299, 314, 74, 362, 362, 319, - /* 1750 */ 322, 296, 299, 314, 74, 362, 362, 319, 322, + /* 1090 */ 16, 15, 14, 13, 12, 335, 363, 363, 119, 363, + /* 1100 */ 363, 363, 363, 363, 121, 85, 100, 113, 101, 330, + /* 1110 */ 331, 333, 74, 363, 363, 337, 340, 363, 335, 363, + /* 1120 */ 363, 119, 363, 363, 363, 290, 291, 363, 86, 100, + /* 1130 */ 113, 101, 330, 331, 333, 74, 363, 363, 337, 340, + /* 1140 */ 335, 363, 363, 119, 363, 363, 363, 363, 363, 363, + /* 1150 */ 87, 100, 113, 101, 330, 331, 333, 74, 363, 335, + /* 1160 */ 337, 340, 119, 363, 363, 363, 363, 363, 363, 363, + /* 1170 */ 89, 113, 101, 330, 331, 333, 74, 363, 335, 337, + /* 1180 */ 340, 119, 363, 363, 363, 363, 363, 363, 363, 90, + /* 1190 */ 113, 101, 330, 331, 333, 74, 363, 363, 337, 340, + /* 1200 */ 363, 335, 363, 363, 119, 363, 363, 7, 363, 363, + /* 1210 */ 339, 72, 91, 113, 101, 330, 331, 333, 74, 363, + /* 1220 */ 363, 337, 340, 335, 363, 363, 119, 363, 363, 363, + /* 1230 */ 363, 363, 363, 363, 92, 113, 101, 330, 331, 333, + /* 1240 */ 74, 363, 335, 337, 340, 119, 363, 363, 363, 363, + /* 1250 */ 363, 363, 363, 93, 113, 101, 330, 331, 333, 74, + /* 1260 */ 363, 335, 337, 340, 119, 341, 342, 343, 344, 345, + /* 1270 */ 4, 363, 94, 113, 101, 330, 331, 333, 74, 363, + /* 1280 */ 363, 337, 340, 363, 335, 363, 363, 119, 363, 363, + /* 1290 */ 363, 363, 363, 363, 363, 95, 113, 101, 330, 331, + /* 1300 */ 333, 74, 363, 363, 337, 340, 335, 363, 363, 119, + /* 1310 */ 363, 363, 363, 363, 363, 363, 363, 96, 113, 101, + /* 1320 */ 330, 331, 333, 74, 363, 335, 337, 340, 119, 363, + /* 1330 */ 363, 363, 363, 363, 363, 363, 97, 113, 101, 330, + /* 1340 */ 331, 333, 74, 363, 335, 337, 340, 119, 363, 363, + /* 1350 */ 363, 363, 363, 363, 363, 98, 113, 101, 330, 331, + /* 1360 */ 333, 74, 363, 363, 337, 340, 363, 335, 363, 363, + /* 1370 */ 119, 363, 363, 363, 363, 363, 363, 363, 99, 113, + /* 1380 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 335, + /* 1390 */ 363, 363, 119, 363, 363, 363, 363, 363, 363, 363, + /* 1400 */ 102, 113, 101, 330, 331, 333, 74, 363, 335, 337, + /* 1410 */ 340, 119, 363, 363, 363, 363, 363, 363, 363, 104, + /* 1420 */ 113, 101, 330, 331, 333, 74, 363, 335, 337, 340, + /* 1430 */ 119, 363, 363, 363, 363, 363, 363, 363, 106, 113, + /* 1440 */ 101, 330, 331, 333, 74, 363, 363, 337, 340, 363, + /* 1450 */ 335, 363, 363, 119, 363, 363, 363, 363, 363, 363, + /* 1460 */ 363, 363, 114, 101, 330, 331, 333, 74, 363, 363, + /* 1470 */ 337, 340, 335, 363, 363, 119, 363, 363, 363, 363, + /* 1480 */ 363, 363, 363, 363, 116, 101, 330, 331, 333, 74, + /* 1490 */ 363, 335, 337, 340, 119, 363, 363, 363, 363, 363, + /* 1500 */ 363, 363, 363, 120, 101, 330, 331, 333, 74, 363, + /* 1510 */ 363, 337, 340, 445, 363, 363, 83, 82, 79, 316, + /* 1520 */ 73, 363, 81, 141, 9, 335, 70, 363, 119, 363, + /* 1530 */ 363, 363, 363, 363, 363, 363, 363, 363, 103, 330, + /* 1540 */ 331, 333, 74, 363, 363, 337, 340, 335, 363, 363, + /* 1550 */ 119, 363, 363, 363, 363, 335, 363, 363, 119, 363, + /* 1560 */ 105, 330, 331, 333, 74, 363, 363, 337, 340, 278, + /* 1570 */ 331, 333, 74, 363, 335, 337, 340, 119, 363, 363, + /* 1580 */ 363, 363, 363, 363, 363, 363, 363, 363, 277, 331, + /* 1590 */ 333, 74, 363, 363, 337, 340, 335, 363, 363, 119, + /* 1600 */ 363, 363, 363, 363, 363, 335, 363, 363, 119, 363, + /* 1610 */ 289, 331, 333, 74, 363, 363, 337, 340, 363, 288, + /* 1620 */ 331, 333, 74, 363, 335, 337, 340, 119, 363, 363, + /* 1630 */ 363, 363, 363, 335, 363, 363, 119, 363, 287, 331, + /* 1640 */ 333, 74, 363, 335, 337, 340, 119, 286, 331, 333, + /* 1650 */ 74, 363, 335, 337, 340, 119, 363, 285, 331, 333, + /* 1660 */ 74, 363, 363, 337, 340, 363, 284, 331, 333, 74, + /* 1670 */ 363, 335, 337, 340, 119, 363, 363, 363, 363, 335, + /* 1680 */ 363, 363, 119, 363, 363, 283, 331, 333, 74, 363, + /* 1690 */ 363, 337, 340, 282, 331, 333, 74, 363, 363, 337, + /* 1700 */ 340, 363, 335, 363, 363, 119, 363, 363, 363, 363, + /* 1710 */ 335, 363, 363, 119, 363, 363, 281, 331, 333, 74, + /* 1720 */ 363, 363, 337, 340, 280, 331, 333, 74, 363, 335, + /* 1730 */ 337, 340, 119, 363, 363, 363, 363, 335, 363, 363, + /* 1740 */ 119, 363, 363, 279, 331, 333, 74, 363, 363, 337, + /* 1750 */ 340, 276, 331, 333, 74, 363, 363, 337, 340, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 1, 2, 106, 107, 108, 6, 7, 77, 9, 10, @@ -577,21 +573,21 @@ static const short yy_reduce_ofst[] = { /* 80 */ 22, 51, 63, 99, 114, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 493, 470, 493, 481, 493, 493, 478, 493, 493, 493, - /* 10 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 20 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 30 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 40 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 50 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 60 */ 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - /* 70 */ 493, 487, 470, 493, 448, 493, 493, 493, 493, 493, - /* 80 */ 493, 493, 493, 493, 493, 403, 405, 404, 444, 420, - /* 90 */ 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, - /* 100 */ 406, 425, 409, 427, 408, 426, 407, 493, 493, 493, - /* 110 */ 393, 493, 493, 421, 424, 493, 423, 401, 493, 444, - /* 120 */ 422, 402, 392, 390, 493, 458, 454, 493, 493, 493, - /* 130 */ 490, 396, 493, 493, 399, 397, 394, 400, 398, 395, - /* 140 */ 493, 493, + /* 0 */ 495, 428, 495, 435, 495, 437, 432, 495, 495, 495, + /* 10 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 20 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 30 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 40 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 50 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 60 */ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + /* 70 */ 495, 492, 428, 495, 468, 495, 495, 495, 495, 495, + /* 80 */ 495, 495, 495, 495, 495, 460, 390, 389, 466, 404, + /* 90 */ 403, 402, 401, 400, 399, 398, 397, 396, 395, 394, + /* 100 */ 461, 463, 393, 409, 392, 408, 391, 495, 495, 495, + /* 110 */ 383, 495, 495, 462, 407, 495, 406, 459, 495, 466, + /* 120 */ 405, 388, 455, 454, 495, 477, 473, 495, 495, 495, + /* 130 */ 494, 385, 495, 495, 458, 457, 456, 387, 386, 384, + /* 140 */ 495, 495, }; /********** End of lemon-generated parsing tables *****************************/ @@ -646,7 +642,9 @@ struct yyParser { #ifdef YYTRACKMAXSTACKDEPTH int yyidxMax; /* Maximum value of yyidx */ #endif +#ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ +#endif grn_expr_parserARG_SDECL /* A place to hold %extra_argument */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ @@ -729,139 +727,140 @@ static const char *const yyTokenName[] = { /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { - /* 0 */ "input ::= query", - /* 1 */ "input ::= expression", - /* 2 */ "input ::= START_OUTPUT_COLUMNS output_columns", - /* 3 */ "input ::= START_ADJUSTER adjuster", - /* 4 */ "query ::= query_element", - /* 5 */ "query ::= query query_element", - /* 6 */ "query ::= query LOGICAL_AND query_element", - /* 7 */ "query ::= query LOGICAL_AND_NOT query_element", - /* 8 */ "query ::= query LOGICAL_OR query_element", - /* 9 */ "query_element ::= QSTRING", - /* 10 */ "query_element ::= PARENL query PARENR", - /* 11 */ "query_element ::= RELATIVE_OP query_element", - /* 12 */ "query_element ::= IDENTIFIER RELATIVE_OP query_element", - /* 13 */ "query_element ::= BRACEL expression BRACER", - /* 14 */ "query_element ::= EVAL primary_expression", - /* 15 */ "expression ::= assignment_expression", - /* 16 */ "expression ::= expression COMMA assignment_expression", - /* 17 */ "assignment_expression ::= conditional_expression", - /* 18 */ "assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression", - /* 19 */ "assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression", - /* 20 */ "assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression", - /* 21 */ "assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression", - /* 22 */ "assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression", - /* 23 */ "assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression", - /* 24 */ "assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression", - /* 25 */ "assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression", - /* 26 */ "assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression", - /* 27 */ "assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression", - /* 28 */ "assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression", - /* 29 */ "assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression", - /* 30 */ "conditional_expression ::= logical_or_expression", - /* 31 */ "conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression", - /* 32 */ "logical_or_expression ::= logical_and_expression", - /* 33 */ "logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression", - /* 34 */ "logical_and_expression ::= bitwise_or_expression", - /* 35 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression", - /* 36 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression", - /* 37 */ "bitwise_or_expression ::= bitwise_xor_expression", - /* 38 */ "bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression", - /* 39 */ "bitwise_xor_expression ::= bitwise_and_expression", - /* 40 */ "bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression", - /* 41 */ "bitwise_and_expression ::= equality_expression", - /* 42 */ "bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression", - /* 43 */ "equality_expression ::= relational_expression", - /* 44 */ "equality_expression ::= equality_expression EQUAL relational_expression", - /* 45 */ "equality_expression ::= equality_expression NOT_EQUAL relational_expression", - /* 46 */ "relational_expression ::= shift_expression", - /* 47 */ "relational_expression ::= relational_expression LESS shift_expression", - /* 48 */ "relational_expression ::= relational_expression GREATER shift_expression", - /* 49 */ "relational_expression ::= relational_expression LESS_EQUAL shift_expression", - /* 50 */ "relational_expression ::= relational_expression GREATER_EQUAL shift_expression", - /* 51 */ "relational_expression ::= relational_expression IN shift_expression", - /* 52 */ "relational_expression ::= relational_expression MATCH shift_expression", - /* 53 */ "relational_expression ::= relational_expression NEAR shift_expression", - /* 54 */ "relational_expression ::= relational_expression NEAR2 shift_expression", - /* 55 */ "relational_expression ::= relational_expression SIMILAR shift_expression", - /* 56 */ "relational_expression ::= relational_expression TERM_EXTRACT shift_expression", - /* 57 */ "relational_expression ::= relational_expression LCP shift_expression", - /* 58 */ "relational_expression ::= relational_expression PREFIX shift_expression", - /* 59 */ "relational_expression ::= relational_expression SUFFIX shift_expression", - /* 60 */ "relational_expression ::= relational_expression REGEXP shift_expression", - /* 61 */ "shift_expression ::= additive_expression", - /* 62 */ "shift_expression ::= shift_expression SHIFTL additive_expression", - /* 63 */ "shift_expression ::= shift_expression SHIFTR additive_expression", - /* 64 */ "shift_expression ::= shift_expression SHIFTRR additive_expression", - /* 65 */ "additive_expression ::= multiplicative_expression", - /* 66 */ "additive_expression ::= additive_expression PLUS multiplicative_expression", - /* 67 */ "additive_expression ::= additive_expression MINUS multiplicative_expression", - /* 68 */ "multiplicative_expression ::= unary_expression", - /* 69 */ "multiplicative_expression ::= multiplicative_expression STAR unary_expression", - /* 70 */ "multiplicative_expression ::= multiplicative_expression SLASH unary_expression", - /* 71 */ "multiplicative_expression ::= multiplicative_expression MOD unary_expression", - /* 72 */ "unary_expression ::= postfix_expression", - /* 73 */ "unary_expression ::= DELETE unary_expression", - /* 74 */ "unary_expression ::= INCR unary_expression", - /* 75 */ "unary_expression ::= DECR unary_expression", - /* 76 */ "unary_expression ::= PLUS unary_expression", - /* 77 */ "unary_expression ::= MINUS unary_expression", - /* 78 */ "unary_expression ::= NOT unary_expression", - /* 79 */ "unary_expression ::= BITWISE_NOT unary_expression", - /* 80 */ "unary_expression ::= ADJUST unary_expression", - /* 81 */ "unary_expression ::= EXACT unary_expression", - /* 82 */ "unary_expression ::= PARTIAL unary_expression", - /* 83 */ "unary_expression ::= UNSPLIT unary_expression", - /* 84 */ "postfix_expression ::= lefthand_side_expression", - /* 85 */ "postfix_expression ::= lefthand_side_expression INCR", - /* 86 */ "postfix_expression ::= lefthand_side_expression DECR", - /* 87 */ "lefthand_side_expression ::= call_expression", - /* 88 */ "lefthand_side_expression ::= member_expression", - /* 89 */ "call_expression ::= member_expression arguments", - /* 90 */ "member_expression ::= primary_expression", - /* 91 */ "member_expression ::= member_expression member_expression_part", - /* 92 */ "primary_expression ::= object_literal", - /* 93 */ "primary_expression ::= PARENL expression PARENR", - /* 94 */ "primary_expression ::= IDENTIFIER", - /* 95 */ "primary_expression ::= array_literal", - /* 96 */ "primary_expression ::= DECIMAL", - /* 97 */ "primary_expression ::= HEX_INTEGER", - /* 98 */ "primary_expression ::= STRING", - /* 99 */ "primary_expression ::= BOOLEAN", - /* 100 */ "primary_expression ::= NULL", - /* 101 */ "array_literal ::= BRACKETL elision BRACKETR", - /* 102 */ "array_literal ::= BRACKETL element_list elision BRACKETR", - /* 103 */ "array_literal ::= BRACKETL element_list BRACKETR", - /* 104 */ "elision ::= COMMA", - /* 105 */ "elision ::= elision COMMA", - /* 106 */ "element_list ::= assignment_expression", - /* 107 */ "element_list ::= elision assignment_expression", - /* 108 */ "element_list ::= element_list elision assignment_expression", - /* 109 */ "object_literal ::= BRACEL property_name_and_value_list BRACER", - /* 110 */ "property_name_and_value_list ::=", - /* 111 */ "property_name_and_value_list ::= property_name_and_value", - /* 112 */ "property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value", - /* 113 */ "property_name_and_value ::= property_name COLON assignment_expression", - /* 114 */ "property_name ::= STRING", - /* 115 */ "member_expression_part ::= BRACKETL expression BRACKETR", - /* 116 */ "member_expression_part ::= DOT IDENTIFIER", - /* 117 */ "arguments ::= PARENL argument_list PARENR", - /* 118 */ "argument_list ::=", - /* 119 */ "argument_list ::= assignment_expression", - /* 120 */ "argument_list ::= argument_list COMMA assignment_expression", - /* 121 */ "output_columns ::=", - /* 122 */ "output_columns ::= output_column", - /* 123 */ "output_columns ::= output_columns COMMA output_column", - /* 124 */ "output_column ::= STAR", - /* 125 */ "output_column ::= NONEXISTENT_COLUMN", - /* 126 */ "output_column ::= assignment_expression", - /* 127 */ "adjuster ::=", - /* 128 */ "adjuster ::= adjust_expression", - /* 129 */ "adjuster ::= adjuster PLUS adjust_expression", - /* 130 */ "adjust_expression ::= adjust_match_expression", - /* 131 */ "adjust_expression ::= adjust_match_expression STAR DECIMAL", - /* 132 */ "adjust_match_expression ::= IDENTIFIER MATCH STRING", + /* 0 */ "query ::= query query_element", + /* 1 */ "query ::= query LOGICAL_AND query_element", + /* 2 */ "query ::= query LOGICAL_AND_NOT query_element", + /* 3 */ "query ::= query LOGICAL_OR query_element", + /* 4 */ "query_element ::= RELATIVE_OP query_element", + /* 5 */ "query_element ::= IDENTIFIER RELATIVE_OP query_element", + /* 6 */ "query_element ::= BRACEL expression BRACER", + /* 7 */ "query_element ::= EVAL primary_expression", + /* 8 */ "expression ::= expression COMMA assignment_expression", + /* 9 */ "assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression", + /* 10 */ "assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression", + /* 11 */ "assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression", + /* 12 */ "assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression", + /* 13 */ "assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression", + /* 14 */ "assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression", + /* 15 */ "assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression", + /* 16 */ "assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression", + /* 17 */ "assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression", + /* 18 */ "assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression", + /* 19 */ "assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression", + /* 20 */ "assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression", + /* 21 */ "conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression", + /* 22 */ "logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression", + /* 23 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression", + /* 24 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression", + /* 25 */ "bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression", + /* 26 */ "bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression", + /* 27 */ "bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression", + /* 28 */ "equality_expression ::= equality_expression EQUAL relational_expression", + /* 29 */ "equality_expression ::= equality_expression NOT_EQUAL relational_expression", + /* 30 */ "relational_expression ::= relational_expression LESS shift_expression", + /* 31 */ "relational_expression ::= relational_expression GREATER shift_expression", + /* 32 */ "relational_expression ::= relational_expression LESS_EQUAL shift_expression", + /* 33 */ "relational_expression ::= relational_expression GREATER_EQUAL shift_expression", + /* 34 */ "relational_expression ::= relational_expression IN shift_expression", + /* 35 */ "relational_expression ::= relational_expression MATCH shift_expression", + /* 36 */ "relational_expression ::= relational_expression NEAR shift_expression", + /* 37 */ "relational_expression ::= relational_expression NEAR2 shift_expression", + /* 38 */ "relational_expression ::= relational_expression SIMILAR shift_expression", + /* 39 */ "relational_expression ::= relational_expression TERM_EXTRACT shift_expression", + /* 40 */ "relational_expression ::= relational_expression LCP shift_expression", + /* 41 */ "relational_expression ::= relational_expression PREFIX shift_expression", + /* 42 */ "relational_expression ::= relational_expression SUFFIX shift_expression", + /* 43 */ "relational_expression ::= relational_expression REGEXP shift_expression", + /* 44 */ "shift_expression ::= shift_expression SHIFTL additive_expression", + /* 45 */ "shift_expression ::= shift_expression SHIFTR additive_expression", + /* 46 */ "shift_expression ::= shift_expression SHIFTRR additive_expression", + /* 47 */ "additive_expression ::= additive_expression PLUS multiplicative_expression", + /* 48 */ "additive_expression ::= additive_expression MINUS multiplicative_expression", + /* 49 */ "multiplicative_expression ::= multiplicative_expression STAR unary_expression", + /* 50 */ "multiplicative_expression ::= multiplicative_expression SLASH unary_expression", + /* 51 */ "multiplicative_expression ::= multiplicative_expression MOD unary_expression", + /* 52 */ "unary_expression ::= DELETE unary_expression", + /* 53 */ "unary_expression ::= INCR unary_expression", + /* 54 */ "unary_expression ::= DECR unary_expression", + /* 55 */ "unary_expression ::= PLUS unary_expression", + /* 56 */ "unary_expression ::= MINUS unary_expression", + /* 57 */ "unary_expression ::= NOT unary_expression", + /* 58 */ "unary_expression ::= BITWISE_NOT unary_expression", + /* 59 */ "unary_expression ::= ADJUST unary_expression", + /* 60 */ "unary_expression ::= EXACT unary_expression", + /* 61 */ "unary_expression ::= PARTIAL unary_expression", + /* 62 */ "unary_expression ::= UNSPLIT unary_expression", + /* 63 */ "postfix_expression ::= lefthand_side_expression INCR", + /* 64 */ "postfix_expression ::= lefthand_side_expression DECR", + /* 65 */ "call_expression ::= member_expression arguments", + /* 66 */ "object_literal ::= BRACEL property_name_and_value_list BRACER", + /* 67 */ "property_name_and_value_list ::=", + /* 68 */ "property_name_and_value ::= property_name COLON assignment_expression", + /* 69 */ "member_expression_part ::= BRACKETL expression BRACKETR", + /* 70 */ "arguments ::= PARENL argument_list PARENR", + /* 71 */ "argument_list ::=", + /* 72 */ "argument_list ::= assignment_expression", + /* 73 */ "argument_list ::= argument_list COMMA assignment_expression", + /* 74 */ "output_columns ::=", + /* 75 */ "output_columns ::= output_column", + /* 76 */ "output_columns ::= output_columns COMMA", + /* 77 */ "output_columns ::= output_columns COMMA output_column", + /* 78 */ "output_column ::= STAR", + /* 79 */ "output_column ::= NONEXISTENT_COLUMN", + /* 80 */ "output_column ::= assignment_expression", + /* 81 */ "adjuster ::= adjuster PLUS adjust_expression", + /* 82 */ "adjust_expression ::= adjust_match_expression STAR DECIMAL", + /* 83 */ "adjust_match_expression ::= IDENTIFIER MATCH STRING", + /* 84 */ "input ::= query", + /* 85 */ "input ::= expression", + /* 86 */ "input ::= START_OUTPUT_COLUMNS output_columns", + /* 87 */ "input ::= START_ADJUSTER adjuster", + /* 88 */ "query ::= query_element", + /* 89 */ "query_element ::= QSTRING", + /* 90 */ "query_element ::= PARENL query PARENR", + /* 91 */ "expression ::= assignment_expression", + /* 92 */ "assignment_expression ::= conditional_expression", + /* 93 */ "conditional_expression ::= logical_or_expression", + /* 94 */ "logical_or_expression ::= logical_and_expression", + /* 95 */ "logical_and_expression ::= bitwise_or_expression", + /* 96 */ "bitwise_or_expression ::= bitwise_xor_expression", + /* 97 */ "bitwise_xor_expression ::= bitwise_and_expression", + /* 98 */ "bitwise_and_expression ::= equality_expression", + /* 99 */ "equality_expression ::= relational_expression", + /* 100 */ "relational_expression ::= shift_expression", + /* 101 */ "shift_expression ::= additive_expression", + /* 102 */ "additive_expression ::= multiplicative_expression", + /* 103 */ "multiplicative_expression ::= unary_expression", + /* 104 */ "unary_expression ::= postfix_expression", + /* 105 */ "postfix_expression ::= lefthand_side_expression", + /* 106 */ "lefthand_side_expression ::= call_expression", + /* 107 */ "lefthand_side_expression ::= member_expression", + /* 108 */ "member_expression ::= primary_expression", + /* 109 */ "member_expression ::= member_expression member_expression_part", + /* 110 */ "primary_expression ::= object_literal", + /* 111 */ "primary_expression ::= PARENL expression PARENR", + /* 112 */ "primary_expression ::= IDENTIFIER", + /* 113 */ "primary_expression ::= array_literal", + /* 114 */ "primary_expression ::= DECIMAL", + /* 115 */ "primary_expression ::= HEX_INTEGER", + /* 116 */ "primary_expression ::= STRING", + /* 117 */ "primary_expression ::= BOOLEAN", + /* 118 */ "primary_expression ::= NULL", + /* 119 */ "array_literal ::= BRACKETL elision BRACKETR", + /* 120 */ "array_literal ::= BRACKETL element_list elision BRACKETR", + /* 121 */ "array_literal ::= BRACKETL element_list BRACKETR", + /* 122 */ "elision ::= COMMA", + /* 123 */ "elision ::= elision COMMA", + /* 124 */ "element_list ::= assignment_expression", + /* 125 */ "element_list ::= elision assignment_expression", + /* 126 */ "element_list ::= element_list elision assignment_expression", + /* 127 */ "property_name_and_value_list ::= property_name_and_value", + /* 128 */ "property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value", + /* 129 */ "property_name ::= STRING", + /* 130 */ "member_expression_part ::= DOT IDENTIFIER", + /* 131 */ "adjuster ::=", + /* 132 */ "adjuster ::= adjust_expression", + /* 133 */ "adjust_expression ::= adjust_match_expression", }; #endif /* NDEBUG */ @@ -958,7 +957,7 @@ static void yy_destructor( (void)efsi; -#line 962 "grn_ecmascript.c" +#line 961 "grn_ecmascript.c" } break; /********* End destructor definitions *****************************************/ @@ -1023,7 +1022,7 @@ int grn_expr_parserStackPeak(void *p){ ** Find the appropriate action for a parser given the terminal ** look-ahead token iLookAhead. */ -static int yy_find_shift_action( +static unsigned int yy_find_shift_action( yyParser *pParser, /* The parser */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ @@ -1119,7 +1118,7 @@ static int yy_find_reduce_action( /* ** The following routine is called if the stack overflows. */ -static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){ +static void yyStackOverflow(yyParser *yypParser){ grn_expr_parserARG_FETCH; yypParser->yyidx--; #ifndef NDEBUG @@ -1162,7 +1161,7 @@ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ int yyNewState, /* The new state to shift in */ int yyMajor, /* The major token to shift in */ - YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */ + grn_expr_parserTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; yypParser->yyidx++; @@ -1173,14 +1172,14 @@ static void yy_shift( #endif #if YYSTACKDEPTH>0 if( yypParser->yyidx>=YYSTACKDEPTH ){ - yyStackOverflow(yypParser, yypMinor); + yyStackOverflow(yypParser); return; } #else if( yypParser->yyidx>=yypParser->yystksz ){ yyGrowStack(yypParser); if( yypParser->yyidx>=yypParser->yystksz ){ - yyStackOverflow(yypParser, yypMinor); + yyStackOverflow(yypParser); return; } } @@ -1188,7 +1187,7 @@ static void yy_shift( yytos = &yypParser->yystack[yypParser->yyidx]; yytos->stateno = (YYACTIONTYPE)yyNewState; yytos->major = (YYCODETYPE)yyMajor; - yytos->minor = *yypMinor; + yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState); } @@ -1199,24 +1198,15 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { - { 76, 1 }, - { 76, 1 }, - { 76, 2 }, - { 76, 2 }, - { 77, 1 }, { 77, 2 }, { 77, 3 }, { 77, 3 }, { 77, 3 }, - { 81, 1 }, - { 81, 3 }, { 81, 2 }, { 81, 3 }, { 81, 3 }, { 81, 2 }, - { 78, 1 }, { 78, 3 }, - { 83, 1 }, { 83, 3 }, { 83, 3 }, { 83, 3 }, @@ -1229,23 +1219,15 @@ static const struct { { 83, 3 }, { 83, 3 }, { 83, 3 }, - { 84, 1 }, { 84, 5 }, - { 86, 1 }, { 86, 3 }, - { 87, 1 }, { 87, 3 }, { 87, 3 }, - { 88, 1 }, { 88, 3 }, - { 89, 1 }, { 89, 3 }, - { 90, 1 }, { 90, 3 }, - { 91, 1 }, { 91, 3 }, { 91, 3 }, - { 92, 1 }, { 92, 3 }, { 92, 3 }, { 92, 3 }, @@ -1260,18 +1242,14 @@ static const struct { { 92, 3 }, { 92, 3 }, { 92, 3 }, - { 93, 1 }, { 93, 3 }, { 93, 3 }, { 93, 3 }, - { 94, 1 }, { 94, 3 }, { 94, 3 }, - { 95, 1 }, { 95, 3 }, { 95, 3 }, { 95, 3 }, - { 96, 1 }, { 96, 2 }, { 96, 2 }, { 96, 2 }, @@ -1283,12 +1261,51 @@ static const struct { { 96, 2 }, { 96, 2 }, { 96, 2 }, - { 97, 1 }, { 97, 2 }, { 97, 2 }, + { 98, 2 }, + { 102, 3 }, + { 106, 0 }, + { 107, 3 }, + { 101, 3 }, + { 100, 3 }, + { 109, 0 }, + { 109, 1 }, + { 109, 3 }, + { 79, 0 }, + { 79, 1 }, + { 79, 2 }, + { 79, 3 }, + { 110, 1 }, + { 110, 1 }, + { 110, 1 }, + { 80, 3 }, + { 111, 3 }, + { 112, 3 }, + { 76, 1 }, + { 76, 1 }, + { 76, 2 }, + { 76, 2 }, + { 77, 1 }, + { 81, 1 }, + { 81, 3 }, + { 78, 1 }, + { 83, 1 }, + { 84, 1 }, + { 86, 1 }, + { 87, 1 }, + { 88, 1 }, + { 89, 1 }, + { 90, 1 }, + { 91, 1 }, + { 92, 1 }, + { 93, 1 }, + { 94, 1 }, + { 95, 1 }, + { 96, 1 }, + { 97, 1 }, { 85, 1 }, { 85, 1 }, - { 98, 2 }, { 99, 1 }, { 99, 2 }, { 82, 1 }, @@ -1308,30 +1325,13 @@ static const struct { { 105, 1 }, { 105, 2 }, { 105, 3 }, - { 102, 3 }, - { 106, 0 }, { 106, 1 }, { 106, 3 }, - { 107, 3 }, { 108, 1 }, - { 101, 3 }, { 101, 2 }, - { 100, 3 }, - { 109, 0 }, - { 109, 1 }, - { 109, 3 }, - { 79, 0 }, - { 79, 1 }, - { 79, 3 }, - { 110, 1 }, - { 110, 1 }, - { 110, 1 }, { 80, 0 }, { 80, 1 }, - { 80, 3 }, { 111, 1 }, - { 111, 3 }, - { 112, 3 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1342,24 +1342,46 @@ static void yy_accept(yyParser*); /* Forward Declaration */ */ static void yy_reduce( yyParser *yypParser, /* The parser */ - int yyruleno /* Number of the rule by which to reduce */ + unsigned int yyruleno /* Number of the rule by which to reduce */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ - YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ grn_expr_parserARG_FETCH; yymsp = &yypParser->yystack[yypParser->yyidx]; #ifndef NDEBUG - if( yyTraceFILE && yyruleno>=0 - && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ + if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt, yyRuleName[yyruleno], yymsp[-yysize].stateno); } #endif /* NDEBUG */ - yygotominor = yyzerominor; + + /* Check that the stack is large enough to grow by a single entry + ** if the RHS of the rule is empty. This ensures that there is room + ** enough on the stack to push the LHS value */ + if( yyRuleInfo[yyruleno].nrhs==0 ){ +#ifdef YYTRACKMAXSTACKDEPTH + if( yypParser->yyidx>yypParser->yyidxMax ){ + yypParser->yyidxMax = yypParser->yyidx; + } +#endif +#if YYSTACKDEPTH>0 + if( yypParser->yyidx>=YYSTACKDEPTH-1 ){ + yyStackOverflow(yypParser); + return; + } +#else + if( yypParser->yyidx>=yypParser->yystksz-1 ){ + yyGrowStack(yypParser); + if( yypParser->yyidx>=yypParser->yystksz-1 ){ + yyStackOverflow(yypParser); + return; + } + } +#endif + } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example @@ -1371,46 +1393,47 @@ static void yy_reduce( ** break; */ /********** Begin reduce actions **********************************************/ - case 5: /* query ::= query query_element */ + YYMINORTYPE yylhsminor; + case 0: /* query ::= query query_element */ #line 46 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2); } -#line 1380 "grn_ecmascript.c" +#line 1403 "grn_ecmascript.c" break; - case 6: /* query ::= query LOGICAL_AND query_element */ - case 35: /* logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */ yytestcase(yyruleno==35); + case 1: /* query ::= query LOGICAL_AND query_element */ + case 23: /* logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */ yytestcase(yyruleno==23); #line 49 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2); } -#line 1388 "grn_ecmascript.c" +#line 1411 "grn_ecmascript.c" break; - case 7: /* query ::= query LOGICAL_AND_NOT query_element */ - case 36: /* logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */ yytestcase(yyruleno==36); + case 2: /* query ::= query LOGICAL_AND_NOT query_element */ + case 24: /* logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */ yytestcase(yyruleno==24); #line 52 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2); } -#line 1396 "grn_ecmascript.c" +#line 1419 "grn_ecmascript.c" break; - case 8: /* query ::= query LOGICAL_OR query_element */ - case 33: /* logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */ yytestcase(yyruleno==33); + case 3: /* query ::= query LOGICAL_OR query_element */ + case 22: /* logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */ yytestcase(yyruleno==22); #line 55 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2); } -#line 1404 "grn_ecmascript.c" +#line 1427 "grn_ecmascript.c" break; - case 11: /* query_element ::= RELATIVE_OP query_element */ + case 4: /* query_element ::= RELATIVE_OP query_element */ #line 62 "grn_ecmascript.lemon" { int mode; GRN_INT32_POP(&efsi->mode_stack, mode); } -#line 1412 "grn_ecmascript.c" +#line 1435 "grn_ecmascript.c" break; - case 12: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */ + case 5: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */ #line 66 "grn_ecmascript.lemon" { int mode; @@ -1435,316 +1458,316 @@ static void yy_reduce( break; } } -#line 1439 "grn_ecmascript.c" +#line 1462 "grn_ecmascript.c" break; - case 13: /* query_element ::= BRACEL expression BRACER */ - case 14: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==14); + case 6: /* query_element ::= BRACEL expression BRACER */ + case 7: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==7); #line 89 "grn_ecmascript.lemon" { efsi->flags = efsi->default_flags; } -#line 1447 "grn_ecmascript.c" +#line 1470 "grn_ecmascript.c" break; - case 16: /* expression ::= expression COMMA assignment_expression */ + case 8: /* expression ::= expression COMMA assignment_expression */ #line 97 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2); } -#line 1454 "grn_ecmascript.c" +#line 1477 "grn_ecmascript.c" break; - case 18: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */ + case 9: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */ #line 102 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2); } -#line 1461 "grn_ecmascript.c" +#line 1484 "grn_ecmascript.c" break; - case 19: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */ + case 10: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */ #line 105 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2); } -#line 1468 "grn_ecmascript.c" +#line 1491 "grn_ecmascript.c" break; - case 20: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */ + case 11: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */ #line 108 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2); } -#line 1475 "grn_ecmascript.c" +#line 1498 "grn_ecmascript.c" break; - case 21: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */ + case 12: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */ #line 111 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2); } -#line 1482 "grn_ecmascript.c" +#line 1505 "grn_ecmascript.c" break; - case 22: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */ + case 13: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */ #line 114 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2); } -#line 1489 "grn_ecmascript.c" +#line 1512 "grn_ecmascript.c" break; - case 23: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */ + case 14: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */ #line 117 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2); } -#line 1496 "grn_ecmascript.c" +#line 1519 "grn_ecmascript.c" break; - case 24: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */ + case 15: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */ #line 120 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2); } -#line 1503 "grn_ecmascript.c" +#line 1526 "grn_ecmascript.c" break; - case 25: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */ + case 16: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */ #line 123 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2); } -#line 1510 "grn_ecmascript.c" +#line 1533 "grn_ecmascript.c" break; - case 26: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */ + case 17: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */ #line 126 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2); } -#line 1517 "grn_ecmascript.c" +#line 1540 "grn_ecmascript.c" break; - case 27: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */ + case 18: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */ #line 129 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2); } -#line 1524 "grn_ecmascript.c" +#line 1547 "grn_ecmascript.c" break; - case 28: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */ + case 19: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */ #line 132 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2); } -#line 1531 "grn_ecmascript.c" +#line 1554 "grn_ecmascript.c" break; - case 29: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */ + case 20: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */ #line 135 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2); } -#line 1538 "grn_ecmascript.c" +#line 1561 "grn_ecmascript.c" break; - case 31: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */ + case 21: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */ #line 140 "grn_ecmascript.lemon" { grn_expr *e = (grn_expr *)efsi->e; e->codes[yymsp[-3].minor.yy0].nargs = yymsp[-1].minor.yy0 - yymsp[-3].minor.yy0; e->codes[yymsp[-1].minor.yy0].nargs = e->codes_curr - yymsp[-1].minor.yy0 - 1; } -#line 1547 "grn_ecmascript.c" +#line 1570 "grn_ecmascript.c" break; - case 38: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */ + case 25: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */ #line 160 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2); } -#line 1554 "grn_ecmascript.c" +#line 1577 "grn_ecmascript.c" break; - case 40: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */ + case 26: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */ #line 165 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2); } -#line 1561 "grn_ecmascript.c" +#line 1584 "grn_ecmascript.c" break; - case 42: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */ + case 27: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */ #line 170 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2); } -#line 1568 "grn_ecmascript.c" +#line 1591 "grn_ecmascript.c" break; - case 44: /* equality_expression ::= equality_expression EQUAL relational_expression */ + case 28: /* equality_expression ::= equality_expression EQUAL relational_expression */ #line 175 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2); } -#line 1575 "grn_ecmascript.c" +#line 1598 "grn_ecmascript.c" break; - case 45: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */ + case 29: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */ #line 178 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2); } -#line 1582 "grn_ecmascript.c" +#line 1605 "grn_ecmascript.c" break; - case 47: /* relational_expression ::= relational_expression LESS shift_expression */ + case 30: /* relational_expression ::= relational_expression LESS shift_expression */ #line 183 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2); } -#line 1589 "grn_ecmascript.c" +#line 1612 "grn_ecmascript.c" break; - case 48: /* relational_expression ::= relational_expression GREATER shift_expression */ + case 31: /* relational_expression ::= relational_expression GREATER shift_expression */ #line 186 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2); } -#line 1596 "grn_ecmascript.c" +#line 1619 "grn_ecmascript.c" break; - case 49: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */ + case 32: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */ #line 189 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2); } -#line 1603 "grn_ecmascript.c" +#line 1626 "grn_ecmascript.c" break; - case 50: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */ + case 33: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */ #line 192 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2); } -#line 1610 "grn_ecmascript.c" +#line 1633 "grn_ecmascript.c" break; - case 51: /* relational_expression ::= relational_expression IN shift_expression */ + case 34: /* relational_expression ::= relational_expression IN shift_expression */ #line 195 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2); } -#line 1617 "grn_ecmascript.c" +#line 1640 "grn_ecmascript.c" break; - case 52: /* relational_expression ::= relational_expression MATCH shift_expression */ - case 132: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==132); + case 35: /* relational_expression ::= relational_expression MATCH shift_expression */ + case 83: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==83); #line 198 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2); } -#line 1625 "grn_ecmascript.c" +#line 1648 "grn_ecmascript.c" break; - case 53: /* relational_expression ::= relational_expression NEAR shift_expression */ + case 36: /* relational_expression ::= relational_expression NEAR shift_expression */ #line 201 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR, 2); } -#line 1632 "grn_ecmascript.c" +#line 1655 "grn_ecmascript.c" break; - case 54: /* relational_expression ::= relational_expression NEAR2 shift_expression */ + case 37: /* relational_expression ::= relational_expression NEAR2 shift_expression */ #line 204 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2); } -#line 1639 "grn_ecmascript.c" +#line 1662 "grn_ecmascript.c" break; - case 55: /* relational_expression ::= relational_expression SIMILAR shift_expression */ + case 38: /* relational_expression ::= relational_expression SIMILAR shift_expression */ #line 207 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 2); } -#line 1646 "grn_ecmascript.c" +#line 1669 "grn_ecmascript.c" break; - case 56: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */ + case 39: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */ #line 210 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2); } -#line 1653 "grn_ecmascript.c" +#line 1676 "grn_ecmascript.c" break; - case 57: /* relational_expression ::= relational_expression LCP shift_expression */ + case 40: /* relational_expression ::= relational_expression LCP shift_expression */ #line 213 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2); } -#line 1660 "grn_ecmascript.c" +#line 1683 "grn_ecmascript.c" break; - case 58: /* relational_expression ::= relational_expression PREFIX shift_expression */ + case 41: /* relational_expression ::= relational_expression PREFIX shift_expression */ #line 216 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2); } -#line 1667 "grn_ecmascript.c" +#line 1690 "grn_ecmascript.c" break; - case 59: /* relational_expression ::= relational_expression SUFFIX shift_expression */ + case 42: /* relational_expression ::= relational_expression SUFFIX shift_expression */ #line 219 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2); } -#line 1674 "grn_ecmascript.c" +#line 1697 "grn_ecmascript.c" break; - case 60: /* relational_expression ::= relational_expression REGEXP shift_expression */ + case 43: /* relational_expression ::= relational_expression REGEXP shift_expression */ #line 222 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_REGEXP, 2); } -#line 1681 "grn_ecmascript.c" +#line 1704 "grn_ecmascript.c" break; - case 62: /* shift_expression ::= shift_expression SHIFTL additive_expression */ + case 44: /* shift_expression ::= shift_expression SHIFTL additive_expression */ #line 227 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2); } -#line 1688 "grn_ecmascript.c" +#line 1711 "grn_ecmascript.c" break; - case 63: /* shift_expression ::= shift_expression SHIFTR additive_expression */ + case 45: /* shift_expression ::= shift_expression SHIFTR additive_expression */ #line 230 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2); } -#line 1695 "grn_ecmascript.c" +#line 1718 "grn_ecmascript.c" break; - case 64: /* shift_expression ::= shift_expression SHIFTRR additive_expression */ + case 46: /* shift_expression ::= shift_expression SHIFTRR additive_expression */ #line 233 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2); } -#line 1702 "grn_ecmascript.c" +#line 1725 "grn_ecmascript.c" break; - case 66: /* additive_expression ::= additive_expression PLUS multiplicative_expression */ - case 129: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==129); + case 47: /* additive_expression ::= additive_expression PLUS multiplicative_expression */ + case 81: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==81); #line 238 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2); } -#line 1710 "grn_ecmascript.c" +#line 1733 "grn_ecmascript.c" break; - case 67: /* additive_expression ::= additive_expression MINUS multiplicative_expression */ + case 48: /* additive_expression ::= additive_expression MINUS multiplicative_expression */ #line 241 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2); } -#line 1717 "grn_ecmascript.c" +#line 1740 "grn_ecmascript.c" break; - case 69: /* multiplicative_expression ::= multiplicative_expression STAR unary_expression */ - case 131: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==131); + case 49: /* multiplicative_expression ::= multiplicative_expression STAR unary_expression */ + case 82: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==82); #line 246 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2); } -#line 1725 "grn_ecmascript.c" +#line 1748 "grn_ecmascript.c" break; - case 70: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */ + case 50: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */ #line 249 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2); } -#line 1732 "grn_ecmascript.c" +#line 1755 "grn_ecmascript.c" break; - case 71: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */ + case 51: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */ #line 252 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2); } -#line 1739 "grn_ecmascript.c" +#line 1762 "grn_ecmascript.c" break; - case 73: /* unary_expression ::= DELETE unary_expression */ + case 52: /* unary_expression ::= DELETE unary_expression */ #line 257 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1); } -#line 1746 "grn_ecmascript.c" +#line 1769 "grn_ecmascript.c" break; - case 74: /* unary_expression ::= INCR unary_expression */ + case 53: /* unary_expression ::= INCR unary_expression */ #line 260 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1763,9 +1786,9 @@ static void yy_reduce( grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR, 1); } } -#line 1767 "grn_ecmascript.c" +#line 1790 "grn_ecmascript.c" break; - case 75: /* unary_expression ::= DECR unary_expression */ + case 54: /* unary_expression ::= DECR unary_expression */ #line 277 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1784,65 +1807,65 @@ static void yy_reduce( grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR, 1); } } -#line 1788 "grn_ecmascript.c" +#line 1811 "grn_ecmascript.c" break; - case 76: /* unary_expression ::= PLUS unary_expression */ + case 55: /* unary_expression ::= PLUS unary_expression */ #line 294 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1); } -#line 1795 "grn_ecmascript.c" +#line 1818 "grn_ecmascript.c" break; - case 77: /* unary_expression ::= MINUS unary_expression */ + case 56: /* unary_expression ::= MINUS unary_expression */ #line 297 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1); } -#line 1802 "grn_ecmascript.c" +#line 1825 "grn_ecmascript.c" break; - case 78: /* unary_expression ::= NOT unary_expression */ + case 57: /* unary_expression ::= NOT unary_expression */ #line 300 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1); } -#line 1809 "grn_ecmascript.c" +#line 1832 "grn_ecmascript.c" break; - case 79: /* unary_expression ::= BITWISE_NOT unary_expression */ + case 58: /* unary_expression ::= BITWISE_NOT unary_expression */ #line 303 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1); } -#line 1816 "grn_ecmascript.c" +#line 1839 "grn_ecmascript.c" break; - case 80: /* unary_expression ::= ADJUST unary_expression */ + case 59: /* unary_expression ::= ADJUST unary_expression */ #line 306 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1); } -#line 1823 "grn_ecmascript.c" +#line 1846 "grn_ecmascript.c" break; - case 81: /* unary_expression ::= EXACT unary_expression */ + case 60: /* unary_expression ::= EXACT unary_expression */ #line 309 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1); } -#line 1830 "grn_ecmascript.c" +#line 1853 "grn_ecmascript.c" break; - case 82: /* unary_expression ::= PARTIAL unary_expression */ + case 61: /* unary_expression ::= PARTIAL unary_expression */ #line 312 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1); } -#line 1837 "grn_ecmascript.c" +#line 1860 "grn_ecmascript.c" break; - case 83: /* unary_expression ::= UNSPLIT unary_expression */ + case 62: /* unary_expression ::= UNSPLIT unary_expression */ #line 315 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1); } -#line 1844 "grn_ecmascript.c" +#line 1867 "grn_ecmascript.c" break; - case 85: /* postfix_expression ::= lefthand_side_expression INCR */ + case 63: /* postfix_expression ::= lefthand_side_expression INCR */ #line 320 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1861,9 +1884,9 @@ static void yy_reduce( grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR_POST, 1); } } -#line 1865 "grn_ecmascript.c" +#line 1888 "grn_ecmascript.c" break; - case 86: /* postfix_expression ::= lefthand_side_expression DECR */ + case 64: /* postfix_expression ::= lefthand_side_expression DECR */ #line 337 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1882,16 +1905,16 @@ static void yy_reduce( grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR_POST, 1); } } -#line 1886 "grn_ecmascript.c" +#line 1909 "grn_ecmascript.c" break; - case 89: /* call_expression ::= member_expression arguments */ + case 65: /* call_expression ::= member_expression arguments */ #line 358 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0); } -#line 1893 "grn_ecmascript.c" +#line 1916 "grn_ecmascript.c" break; - case 109: /* object_literal ::= BRACEL property_name_and_value_list BRACER */ + case 66: /* object_literal ::= BRACEL property_name_and_value_list BRACER */ #line 386 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1900,9 +1923,9 @@ static void yy_reduce( GRN_OP_PUSH, 1); efsi->object_literal = NULL; } -#line 1904 "grn_ecmascript.c" +#line 1927 "grn_ecmascript.c" break; - case 110: /* property_name_and_value_list ::= */ + case 67: /* property_name_and_value_list ::= */ #line 394 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1916,9 +1939,9 @@ static void yy_reduce( (int)(efsi->str_end - efsi->str), efsi->str); } } -#line 1920 "grn_ecmascript.c" +#line 1943 "grn_ecmascript.c" break; - case 113: /* property_name_and_value ::= property_name COLON assignment_expression */ + case 68: /* property_name_and_value ::= property_name COLON assignment_expression */ #line 409 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; @@ -1960,69 +1983,76 @@ static void yy_reduce( } } } -#line 1964 "grn_ecmascript.c" +#line 1987 "grn_ecmascript.c" break; - case 115: /* member_expression_part ::= BRACKETL expression BRACKETR */ + case 69: /* member_expression_part ::= BRACKETL expression BRACKETR */ #line 452 "grn_ecmascript.lemon" { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2); } -#line 1971 "grn_ecmascript.c" +#line 1994 "grn_ecmascript.c" break; - case 117: /* arguments ::= PARENL argument_list PARENR */ + case 70: /* arguments ::= PARENL argument_list PARENR */ #line 457 "grn_ecmascript.lemon" -{ yygotominor.yy0 = yymsp[-1].minor.yy0; } -#line 1976 "grn_ecmascript.c" +{ yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; } +#line 1999 "grn_ecmascript.c" break; - case 118: /* argument_list ::= */ + case 71: /* argument_list ::= */ #line 458 "grn_ecmascript.lemon" -{ yygotominor.yy0 = 0; } -#line 1981 "grn_ecmascript.c" +{ yymsp[1].minor.yy0 = 0; } +#line 2004 "grn_ecmascript.c" break; - case 119: /* argument_list ::= assignment_expression */ + case 72: /* argument_list ::= assignment_expression */ #line 459 "grn_ecmascript.lemon" -{ yygotominor.yy0 = 1; } -#line 1986 "grn_ecmascript.c" +{ yymsp[0].minor.yy0 = 1; } +#line 2009 "grn_ecmascript.c" break; - case 120: /* argument_list ::= argument_list COMMA assignment_expression */ + case 73: /* argument_list ::= argument_list COMMA assignment_expression */ #line 460 "grn_ecmascript.lemon" -{ yygotominor.yy0 = yymsp[-2].minor.yy0 + 1; } -#line 1991 "grn_ecmascript.c" +{ yylhsminor.yy0 = yymsp[-2].minor.yy0 + 1; } +#line 2014 "grn_ecmascript.c" + yymsp[-2].minor.yy0 = yylhsminor.yy0; break; - case 121: /* output_columns ::= */ + case 74: /* output_columns ::= */ #line 462 "grn_ecmascript.lemon" { - yygotominor.yy0 = 0; + yymsp[1].minor.yy0 = 0; } -#line 1998 "grn_ecmascript.c" +#line 2022 "grn_ecmascript.c" break; - case 122: /* output_columns ::= output_column */ + case 75: /* output_columns ::= output_column */ #line 465 "grn_ecmascript.lemon" { - if (yymsp[0].minor.yy0) { - yygotominor.yy0 = 0; - } else { - yygotominor.yy0 = 1; - } + yylhsminor.yy0 = yymsp[0].minor.yy0; } -#line 2009 "grn_ecmascript.c" +#line 2029 "grn_ecmascript.c" + yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 123: /* output_columns ::= output_columns COMMA output_column */ -#line 473 "grn_ecmascript.lemon" + case 76: /* output_columns ::= output_columns COMMA */ +#line 469 "grn_ecmascript.lemon" { - if (yymsp[0].minor.yy0) { - yygotominor.yy0 = yymsp[-2].minor.yy0; + yylhsminor.yy0 = yymsp[-1].minor.yy0; +} +#line 2037 "grn_ecmascript.c" + yymsp[-1].minor.yy0 = yylhsminor.yy0; + break; + case 77: /* output_columns ::= output_columns COMMA output_column */ +#line 474 "grn_ecmascript.lemon" +{ + if (yymsp[0].minor.yy0 == 0) { + yylhsminor.yy0 = yymsp[-2].minor.yy0; } else { - if (yymsp[-2].minor.yy0 == 1) { + if (yymsp[-2].minor.yy0 > 0 || yymsp[0].minor.yy0 > 1) { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2); } - yygotominor.yy0 = 1; + yylhsminor.yy0 = 1; } } -#line 2023 "grn_ecmascript.c" +#line 2052 "grn_ecmascript.c" + yymsp[-2].minor.yy0 = yylhsminor.yy0; break; - case 124: /* output_column ::= STAR */ -#line 484 "grn_ecmascript.lemon" + case 78: /* output_column ::= STAR */ +#line 485 "grn_ecmascript.lemon" { grn_ctx *ctx = efsi->ctx; grn_obj *expr = efsi->e; @@ -2034,125 +2064,129 @@ static void yy_reduce( grn_obj columns_buffer; grn_obj **columns; int i, n_columns; + int n_output_columns; GRN_PTR_INIT(&columns_buffer, GRN_OBJ_VECTOR, GRN_ID_NIL); grn_obj_columns(ctx, table, "*", strlen("*"), &columns_buffer); n_columns = GRN_BULK_VSIZE(&columns_buffer) / sizeof(grn_obj *); columns = (grn_obj **)GRN_BULK_HEAD(&columns_buffer); + if (e->codes_curr == 0) { + n_output_columns = 0; + } else { + grn_expr_code *codes; + grn_expr_code *codes_end; + + n_output_columns = 1; + codes_end = e->codes + e->codes_curr; + for (codes = e->codes; codes < codes_end; codes++) { + if (codes[0].op == GRN_OP_COMMA) { + n_output_columns++; + } + } + } + for (i = 0; i < n_columns; i++) { - if (i > 0) { + if (n_output_columns > 1 && i > 0) { grn_expr_append_op(ctx, expr, GRN_OP_COMMA, 2); } grn_expr_append_const(ctx, expr, columns[i], GRN_OP_GET_VALUE, 1); + n_output_columns++; GRN_PTR_PUT(ctx, &e->objs, columns[i]); } GRN_OBJ_FIN(ctx, &columns_buffer); - if (n_columns > 0) { - yygotominor.yy0 = GRN_FALSE; - } else { - yygotominor.yy0 = GRN_TRUE; - } + yymsp[0].minor.yy0 = n_columns; } else { /* TODO: report error */ - yygotominor.yy0 = GRN_TRUE; + yymsp[0].minor.yy0 = 0; } } -#line 2064 "grn_ecmascript.c" +#line 2107 "grn_ecmascript.c" break; - case 125: /* output_column ::= NONEXISTENT_COLUMN */ -#line 521 "grn_ecmascript.lemon" + case 79: /* output_column ::= NONEXISTENT_COLUMN */ +#line 535 "grn_ecmascript.lemon" { - yygotominor.yy0 = GRN_TRUE; + yymsp[0].minor.yy0 = 0; } -#line 2071 "grn_ecmascript.c" +#line 2114 "grn_ecmascript.c" break; - case 126: /* output_column ::= assignment_expression */ -#line 524 "grn_ecmascript.lemon" + case 80: /* output_column ::= assignment_expression */ +#line 538 "grn_ecmascript.lemon" { - yygotominor.yy0 = GRN_FALSE; + yymsp[0].minor.yy0 = 1; } -#line 2078 "grn_ecmascript.c" +#line 2121 "grn_ecmascript.c" break; default: - /* (0) input ::= query */ yytestcase(yyruleno==0); - /* (1) input ::= expression */ yytestcase(yyruleno==1); - /* (2) input ::= START_OUTPUT_COLUMNS output_columns */ yytestcase(yyruleno==2); - /* (3) input ::= START_ADJUSTER adjuster */ yytestcase(yyruleno==3); - /* (4) query ::= query_element */ yytestcase(yyruleno==4); - /* (9) query_element ::= QSTRING */ yytestcase(yyruleno==9); - /* (10) query_element ::= PARENL query PARENR */ yytestcase(yyruleno==10); - /* (15) expression ::= assignment_expression */ yytestcase(yyruleno==15); - /* (17) assignment_expression ::= conditional_expression */ yytestcase(yyruleno==17); - /* (30) conditional_expression ::= logical_or_expression */ yytestcase(yyruleno==30); - /* (32) logical_or_expression ::= logical_and_expression */ yytestcase(yyruleno==32); - /* (34) logical_and_expression ::= bitwise_or_expression */ yytestcase(yyruleno==34); - /* (37) bitwise_or_expression ::= bitwise_xor_expression */ yytestcase(yyruleno==37); - /* (39) bitwise_xor_expression ::= bitwise_and_expression */ yytestcase(yyruleno==39); - /* (41) bitwise_and_expression ::= equality_expression */ yytestcase(yyruleno==41); - /* (43) equality_expression ::= relational_expression */ yytestcase(yyruleno==43); - /* (46) relational_expression ::= shift_expression */ yytestcase(yyruleno==46); - /* (61) shift_expression ::= additive_expression */ yytestcase(yyruleno==61); - /* (65) additive_expression ::= multiplicative_expression */ yytestcase(yyruleno==65); - /* (68) multiplicative_expression ::= unary_expression */ yytestcase(yyruleno==68); - /* (72) unary_expression ::= postfix_expression */ yytestcase(yyruleno==72); - /* (84) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==84); - /* (87) lefthand_side_expression ::= call_expression */ yytestcase(yyruleno==87); - /* (88) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==88); - /* (90) member_expression ::= primary_expression */ yytestcase(yyruleno==90); - /* (91) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==91); - /* (92) primary_expression ::= object_literal */ yytestcase(yyruleno==92); - /* (93) primary_expression ::= PARENL expression PARENR */ yytestcase(yyruleno==93); - /* (94) primary_expression ::= IDENTIFIER */ yytestcase(yyruleno==94); - /* (95) primary_expression ::= array_literal */ yytestcase(yyruleno==95); - /* (96) primary_expression ::= DECIMAL */ yytestcase(yyruleno==96); - /* (97) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==97); - /* (98) primary_expression ::= STRING */ yytestcase(yyruleno==98); - /* (99) primary_expression ::= BOOLEAN */ yytestcase(yyruleno==99); - /* (100) primary_expression ::= NULL */ yytestcase(yyruleno==100); - /* (101) array_literal ::= BRACKETL elision BRACKETR */ yytestcase(yyruleno==101); - /* (102) array_literal ::= BRACKETL element_list elision BRACKETR */ yytestcase(yyruleno==102); - /* (103) array_literal ::= BRACKETL element_list BRACKETR */ yytestcase(yyruleno==103); - /* (104) elision ::= COMMA */ yytestcase(yyruleno==104); - /* (105) elision ::= elision COMMA */ yytestcase(yyruleno==105); - /* (106) element_list ::= assignment_expression */ yytestcase(yyruleno==106); - /* (107) element_list ::= elision assignment_expression */ yytestcase(yyruleno==107); - /* (108) element_list ::= element_list elision assignment_expression */ yytestcase(yyruleno==108); - /* (111) property_name_and_value_list ::= property_name_and_value */ yytestcase(yyruleno==111); - /* (112) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==112); - /* (114) property_name ::= STRING */ yytestcase(yyruleno==114); - /* (116) member_expression_part ::= DOT IDENTIFIER */ yytestcase(yyruleno==116); - /* (127) adjuster ::= */ yytestcase(yyruleno==127); - /* (128) adjuster ::= adjust_expression */ yytestcase(yyruleno==128); - /* (130) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==130); + /* (84) input ::= query */ yytestcase(yyruleno==84); + /* (85) input ::= expression */ yytestcase(yyruleno==85); + /* (86) input ::= START_OUTPUT_COLUMNS output_columns */ yytestcase(yyruleno==86); + /* (87) input ::= START_ADJUSTER adjuster */ yytestcase(yyruleno==87); + /* (88) query ::= query_element */ yytestcase(yyruleno==88); + /* (89) query_element ::= QSTRING */ yytestcase(yyruleno==89); + /* (90) query_element ::= PARENL query PARENR */ yytestcase(yyruleno==90); + /* (91) expression ::= assignment_expression */ yytestcase(yyruleno==91); + /* (92) assignment_expression ::= conditional_expression */ yytestcase(yyruleno==92); + /* (93) conditional_expression ::= logical_or_expression */ yytestcase(yyruleno==93); + /* (94) logical_or_expression ::= logical_and_expression */ yytestcase(yyruleno==94); + /* (95) logical_and_expression ::= bitwise_or_expression */ yytestcase(yyruleno==95); + /* (96) bitwise_or_expression ::= bitwise_xor_expression */ yytestcase(yyruleno==96); + /* (97) bitwise_xor_expression ::= bitwise_and_expression */ yytestcase(yyruleno==97); + /* (98) bitwise_and_expression ::= equality_expression */ yytestcase(yyruleno==98); + /* (99) equality_expression ::= relational_expression */ yytestcase(yyruleno==99); + /* (100) relational_expression ::= shift_expression */ yytestcase(yyruleno==100); + /* (101) shift_expression ::= additive_expression */ yytestcase(yyruleno==101); + /* (102) additive_expression ::= multiplicative_expression */ yytestcase(yyruleno==102); + /* (103) multiplicative_expression ::= unary_expression */ yytestcase(yyruleno==103); + /* (104) unary_expression ::= postfix_expression */ yytestcase(yyruleno==104); + /* (105) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==105); + /* (106) lefthand_side_expression ::= call_expression */ yytestcase(yyruleno==106); + /* (107) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==107); + /* (108) member_expression ::= primary_expression */ yytestcase(yyruleno==108); + /* (109) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==109); + /* (110) primary_expression ::= object_literal */ yytestcase(yyruleno==110); + /* (111) primary_expression ::= PARENL expression PARENR */ yytestcase(yyruleno==111); + /* (112) primary_expression ::= IDENTIFIER */ yytestcase(yyruleno==112); + /* (113) primary_expression ::= array_literal */ yytestcase(yyruleno==113); + /* (114) primary_expression ::= DECIMAL */ yytestcase(yyruleno==114); + /* (115) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==115); + /* (116) primary_expression ::= STRING */ yytestcase(yyruleno==116); + /* (117) primary_expression ::= BOOLEAN */ yytestcase(yyruleno==117); + /* (118) primary_expression ::= NULL */ yytestcase(yyruleno==118); + /* (119) array_literal ::= BRACKETL elision BRACKETR */ yytestcase(yyruleno==119); + /* (120) array_literal ::= BRACKETL element_list elision BRACKETR */ yytestcase(yyruleno==120); + /* (121) array_literal ::= BRACKETL element_list BRACKETR */ yytestcase(yyruleno==121); + /* (122) elision ::= COMMA */ yytestcase(yyruleno==122); + /* (123) elision ::= elision COMMA */ yytestcase(yyruleno==123); + /* (124) element_list ::= assignment_expression */ yytestcase(yyruleno==124); + /* (125) element_list ::= elision assignment_expression */ yytestcase(yyruleno==125); + /* (126) element_list ::= element_list elision assignment_expression */ yytestcase(yyruleno==126); + /* (127) property_name_and_value_list ::= property_name_and_value */ yytestcase(yyruleno==127); + /* (128) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==128); + /* (129) property_name ::= STRING */ yytestcase(yyruleno==129); + /* (130) member_expression_part ::= DOT IDENTIFIER */ yytestcase(yyruleno==130); + /* (131) adjuster ::= */ yytestcase(yyruleno==131); + /* (132) adjuster ::= adjust_expression */ yytestcase(yyruleno==132); + /* (133) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==133); break; /********** End reduce actions ************************************************/ }; - assert( yyruleno>=0 && yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) ); + assert( yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) ); yygoto = yyRuleInfo[yyruleno].lhs; yysize = yyRuleInfo[yyruleno].nrhs; - yypParser->yyidx -= yysize; yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); if( yyact <= YY_MAX_SHIFTREDUCE ){ if( yyact>YY_MAX_SHIFT ) yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; - /* If the reduce action popped at least - ** one element off the stack, then we can push the new element back - ** onto the stack here, and skip the stack overflow test in yy_shift(). - ** That gives a significant speed improvement. */ - if( yysize ){ - yypParser->yyidx++; - yymsp -= yysize-1; - yymsp->stateno = (YYACTIONTYPE)yyact; - yymsp->major = (YYCODETYPE)yygoto; - yymsp->minor = yygotominor; - yyTraceShift(yypParser, yyact); - }else{ - yy_shift(yypParser,yyact,yygoto,&yygotominor); - } + yypParser->yyidx -= yysize - 1; + yymsp -= yysize-1; + yymsp->stateno = (YYACTIONTYPE)yyact; + yymsp->major = (YYCODETYPE)yygoto; + yyTraceShift(yypParser, yyact); }else{ assert( yyact == YY_ACCEPT_ACTION ); + yypParser->yyidx -= yysize; yy_accept(yypParser); } } @@ -2185,10 +2219,10 @@ static void yy_parse_failed( static void yy_syntax_error( yyParser *yypParser, /* The parser */ int yymajor, /* The major type of the error token */ - YYMINORTYPE yyminor /* The minor type of the error token */ + grn_expr_parserTOKENTYPE yyminor /* The minor type of the error token */ ){ grn_expr_parserARG_FETCH; -#define TOKEN (yyminor.yy0) +#define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ #line 17 "grn_ecmascript.lemon" @@ -2212,7 +2246,7 @@ static void yy_syntax_error( GRN_OBJ_FIN(ctx, &message); } } -#line 2216 "grn_ecmascript.c" +#line 2250 "grn_ecmascript.c" /************ End %syntax_error code ******************************************/ grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */ } @@ -2263,7 +2297,7 @@ void grn_expr_parser( grn_expr_parserARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; - int yyact; /* The parser action. */ + unsigned int yyact; /* The parser action. */ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ #endif @@ -2277,14 +2311,14 @@ void grn_expr_parser( if( yypParser->yyidx<0 ){ #if YYSTACKDEPTH<=0 if( yypParser->yystksz <=0 ){ - /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/ - yyminorunion = yyzerominor; - yyStackOverflow(yypParser, &yyminorunion); + yyStackOverflow(yypParser); return; } #endif yypParser->yyidx = 0; +#ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; +#endif yypParser->yystack[0].stateno = 0; yypParser->yystack[0].major = 0; #ifndef NDEBUG @@ -2294,7 +2328,6 @@ void grn_expr_parser( } #endif } - yyminorunion.yy0 = yyminor; #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); #endif @@ -2310,13 +2343,16 @@ void grn_expr_parser( yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); if( yyact <= YY_MAX_SHIFTREDUCE ){ if( yyact > YY_MAX_SHIFT ) yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; - yy_shift(yypParser,yyact,yymajor,&yyminorunion); + yy_shift(yypParser,yyact,yymajor,yyminor); +#ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; +#endif yymajor = YYNOCODE; }else if( yyact <= YY_MAX_REDUCE ){ yy_reduce(yypParser,yyact-YY_MIN_REDUCE); }else{ assert( yyact == YY_ERROR_ACTION ); + yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif @@ -2346,7 +2382,7 @@ void grn_expr_parser( ** */ if( yypParser->yyerrcnt<0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor,yyminor); } yymx = yypParser->yystack[yypParser->yyidx].major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ @@ -2356,10 +2392,10 @@ void grn_expr_parser( yyTracePrompt,yyTokenName[yymajor]); } #endif - yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion); + yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ - while( + while( yypParser->yyidx >= 0 && yymx != YYERRORSYMBOL && (yyact = yy_find_reduce_action( @@ -2373,9 +2409,7 @@ void grn_expr_parser( yy_parse_failed(yypParser); yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ - YYMINORTYPE u2; - u2.YYERRSYMDT = 0; - yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); + yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; @@ -2388,7 +2422,7 @@ void grn_expr_parser( ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yymajor = YYNOCODE; @@ -2403,7 +2437,7 @@ void grn_expr_parser( ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); Modified: lib/grn_ecmascript.lemon (+36 -21) =================================================================== --- lib/grn_ecmascript.lemon 2016-05-04 20:39:09 +0900 (b902f42) +++ lib/grn_ecmascript.lemon 2016-05-04 21:50:40 +0900 (36b516a) @@ -462,26 +462,28 @@ argument_list(A) ::= argument_list(B) COMMA assignment_expression. { A = B + 1; output_columns(N_STACKED_COLUMNS) ::= . { N_STACKED_COLUMNS = 0; } -output_columns(N_STACKED_COLUMNS) ::= output_column(IGNORED). { - if (IGNORED) { - N_STACKED_COLUMNS = 0; - } else { - N_STACKED_COLUMNS = 1; - } +output_columns(N_STACKED_COLUMNS) ::= output_column(SUB_N_STACKED_COLUMNS). { + N_STACKED_COLUMNS = SUB_N_STACKED_COLUMNS; } +/* Accept "column1,,,,,,column2" */ output_columns(N_STACKED_COLUMNS) ::= - output_columns(SUB_N_STACKED_COLUMNS) COMMA output_column(IGNORED). { - if (IGNORED) { + output_columns(SUB_N_STACKED_COLUMNS) COMMA. { + N_STACKED_COLUMNS = SUB_N_STACKED_COLUMNS; +} +output_columns(N_STACKED_COLUMNS) ::= + output_columns(SUB_N_STACKED_COLUMNS) COMMA + output_column(NEW_N_STACKED_COLUMNS). { + if (NEW_N_STACKED_COLUMNS == 0) { N_STACKED_COLUMNS = SUB_N_STACKED_COLUMNS; } else { - if (SUB_N_STACKED_COLUMNS == 1) { + if (SUB_N_STACKED_COLUMNS > 0 || NEW_N_STACKED_COLUMNS > 1) { grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2); } N_STACKED_COLUMNS = 1; } } -output_column(IGNORED) ::= STAR. { +output_column(N_STACKED_COLUMNS) ::= STAR. { grn_ctx *ctx = efsi->ctx; grn_obj *expr = efsi->e; grn_expr *e = (grn_expr *)expr; @@ -492,37 +494,50 @@ output_column(IGNORED) ::= STAR. { grn_obj columns_buffer; grn_obj **columns; int i, n_columns; + int n_output_columns; GRN_PTR_INIT(&columns_buffer, GRN_OBJ_VECTOR, GRN_ID_NIL); grn_obj_columns(ctx, table, "*", strlen("*"), &columns_buffer); n_columns = GRN_BULK_VSIZE(&columns_buffer) / sizeof(grn_obj *); columns = (grn_obj **)GRN_BULK_HEAD(&columns_buffer); + if (e->codes_curr == 0) { + n_output_columns = 0; + } else { + grn_expr_code *codes; + grn_expr_code *codes_end; + + n_output_columns = 1; + codes_end = e->codes + e->codes_curr; + for (codes = e->codes; codes < codes_end; codes++) { + if (codes[0].op == GRN_OP_COMMA) { + n_output_columns++; + } + } + } + for (i = 0; i < n_columns; i++) { - if (i > 0) { + if (n_output_columns > 1 && i > 0) { grn_expr_append_op(ctx, expr, GRN_OP_COMMA, 2); } grn_expr_append_const(ctx, expr, columns[i], GRN_OP_GET_VALUE, 1); + n_output_columns++; GRN_PTR_PUT(ctx, &e->objs, columns[i]); } GRN_OBJ_FIN(ctx, &columns_buffer); - if (n_columns > 0) { - IGNORED = GRN_FALSE; - } else { - IGNORED = GRN_TRUE; - } + N_STACKED_COLUMNS = n_columns; } else { /* TODO: report error */ - IGNORED = GRN_TRUE; + N_STACKED_COLUMNS = 0; } } -output_column(IGNORED) ::= NONEXISTENT_COLUMN. { - IGNORED = GRN_TRUE; +output_column(N_STACKED_COLUMNS) ::= NONEXISTENT_COLUMN. { + N_STACKED_COLUMNS = 0; } -output_column(IGNORED) ::= assignment_expression. { - IGNORED = GRN_FALSE; +output_column(N_STACKED_COLUMNS) ::= assignment_expression. { + N_STACKED_COLUMNS = 1; } adjuster ::= .