[Groonga-commit] groonga/groonga at ce561dd [master] Update by the latest lemon (3.14.1)

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Sep 14 18:54:08 JST 2016


Kouhei Sutou	2016-09-14 18:54:08 +0900 (Wed, 14 Sep 2016)

  New Revision: ce561dd8e2157db5e82bc865ec516eb9ed06c025
  https://github.com/groonga/groonga/commit/ce561dd8e2157db5e82bc865ec516eb9ed06c025

  Message:
    Update by the latest lemon (3.14.1)

  Modified files:
    lib/expr.c
    lib/grn_ecmascript.c

  Modified: lib/expr.c (+5 -16)
===================================================================
--- lib/expr.c    2016-09-14 18:52:59 +0900 (fd5d389)
+++ lib/expr.c    2016-09-14 18:54:08 +0900 (5f9bff1)
@@ -7081,14 +7081,7 @@ static grn_rc
 grn_expr_parser_open(grn_ctx *ctx)
 {
   if (!ctx->impl->parser) {
-    yyParser *pParser = GRN_MALLOCN(yyParser, 1);
-    if (pParser) {
-      pParser->yyidx = -1;
-#if YYSTACKDEPTH<=0
-      yyGrowStack(pParser);
-#endif
-      ctx->impl->parser = pParser;
-    }
+    ctx->impl->parser = grn_expr_parserAlloc(malloc);
   }
   return ctx->rc;
 }
@@ -7575,8 +7568,8 @@ exit :
 static void
 set_tos_minor_to_curr(grn_ctx *ctx, efs_info *q)
 {
-  yyParser *pParser = ctx->impl->parser;
-  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+  yyParser *parser = ctx->impl->parser;
+  yyStackEntry *yytos = parser->yytos;
   yytos->minor.yy0 = ((grn_expr *)(q->e))->codes_curr;
 }
 
@@ -8160,13 +8153,9 @@ grn_rc
 grn_expr_parser_close(grn_ctx *ctx)
 {
   if (ctx->impl->parser) {
-    yyParser *pParser = (yyParser*)ctx->impl->parser;
-    while (pParser->yyidx >= 0) yy_pop_parser_stack(pParser);
-#if YYSTACKDEPTH<=0
-    free(pParser->yystack);
-#endif
-    GRN_FREE(pParser);
+    yyParser *parser = (yyParser *)ctx->impl->parser;
     ctx->impl->parser = NULL;
+    grn_expr_parserFree(parser, free);
   }
   return ctx->rc;
 }

  Modified: lib/grn_ecmascript.c (+406 -387)
===================================================================
--- lib/grn_ecmascript.c    2016-09-14 18:52:59 +0900 (648973d)
+++ lib/grn_ecmascript.c    2016-09-14 18:54:08 +0900 (84bb7e3)
@@ -26,8 +26,11 @@
 /************ Begin %include sections from the grammar ************************/
 #line 4 "grn_ecmascript.lemon"
 
+#ifdef assert
+#  undef assert
+#endif
 #define assert GRN_ASSERT
-#line 31 "grn_ecmascript.c"
+#line 34 "grn_ecmascript.c"
 /**************** End of %include directives **********************************/
 /* These constants specify the various numeric values for terminal symbols
 ** in a format understandable to "makeheaders".  This section is blank unless
@@ -181,32 +184,32 @@ typedef union {
 *********** Begin parsing tables **********************************************/
 #define YY_ACTTAB_COUNT (1759)
 static const YYACTIONTYPE yy_action[] = {
- /*     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,
+ /*     0 */     3,   71,  112,  112,  133,  316,    2,   77,   81,  126,
+ /*    10 */     1,   77,   70,  496,   78,  109,  128,  234,   78,   74,
+ /*    20 */   109,  109,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*    30 */   100,  113,  101,  101,  101,   88,   74,  234,  234,   74,
+ /*    40 */    74,  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,  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,
+ /*    70 */   124,   69,   57,   56,   74,  124,  124,   88,  123,  122,
+ /*    80 */   136,  135,  134,  117,   85,  100,  113,  101,  101,  101,
+ /*    90 */    88,   74,  308,  130,   74,   74,  292,  336,  112,  112,
  /*   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,
+ /*   110 */   115,   31,   30,   77,   74,  115,  115,   88,  123,  122,
+ /*   120 */   136,  135,  134,  117,   85,  100,  113,  101,  101,  101,
+ /*   130 */    88,   74,  231,    7,   74,   74,  339,   72,  107,  130,
  /*   140 */   355,  133,  297,  293,  229,   76,   65,   64,   23,   55,
  /*   150 */    54,   68,   67,   66,   63,   62,   61,   60,   59,   58,
  /*   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,
+ /*   200 */    74,  307,  307,   88,  123,  122,  136,  135,  134,  117,
+ /*   210 */    85,  100,  113,  101,  101,  101,   88,   74,   10,    7,
+ /*   220 */    74,   74,  339,   72,   36,   35,  350,    6,  302,   74,
+ /*   230 */    84,   84,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*   240 */   100,  113,  101,  101,  101,   88,   74,  447,  446,   74,
+ /*   250 */    74,   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,
@@ -216,147 +219,147 @@ static const YYACTIONTYPE yy_action[] = {
  /*   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,
+ /*   350 */    75,   74,  307,  307,   88,  123,  122,  136,  135,  134,
+ /*   360 */   117,   85,  100,  113,  101,  101,  101,   88,   74,  363,
+ /*   370 */   363,   74,   74,  363,  363,  363,  363,  363,  363,  304,
+ /*   380 */    74,  299,  299,   88,  123,  122,  136,  135,  134,  117,
+ /*   390 */    85,  100,  113,  101,  101,  101,   88,   74,  363,  363,
+ /*   400 */    74,   74,  363,  363,  363,  363,  363,  111,  115,  363,
+ /*   410 */   363,  363,   74,  115,  115,   88,  123,  122,  136,  135,
+ /*   420 */   134,  117,   85,  100,  113,  101,  101,  101,   88,   74,
+ /*   430 */   118,  363,   74,   74,   74,  118,  118,   88,  123,  122,
+ /*   440 */   136,  135,  134,  117,   85,  100,  113,  101,  101,  101,
+ /*   450 */    88,   74,  363,    7,   74,   74,  339,   72,  124,  363,
+ /*   460 */   363,  363,   74,  124,  124,   88,  123,  122,  136,  135,
+ /*   470 */   134,  117,   85,  100,  113,  101,  101,  101,   88,   74,
+ /*   480 */   363,    7,   74,   74,  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,
+ /*   540 */   342,  343,  344,  345,    4,   74,  353,  353,   88,  123,
+ /*   550 */   122,  136,  135,  134,  117,   85,  100,  113,  101,  101,
+ /*   560 */   101,   88,   74,  363,  363,   74,   74,   74,  352,  352,
  /*   570 */    88,  123,  122,  136,  135,  134,  117,   85,  100,  113,
- /*   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,
+ /*   580 */   101,  101,  101,   88,   74,  363,  363,   74,   74,   74,
+ /*   590 */   247,  247,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*   600 */   100,  113,  101,  101,  101,   88,   74,  363,  363,   74,
+ /*   610 */    74,  363,  363,   74,  246,  246,   88,  123,  122,  136,
+ /*   620 */   135,  134,  117,   85,  100,  113,  101,  101,  101,   88,
+ /*   630 */    74,  363,  363,   74,   74,   74,  245,  245,   88,  123,
+ /*   640 */   122,  136,  135,  134,  117,   85,  100,  113,  101,  101,
+ /*   650 */   101,   88,   74,  363,  363,   74,   74,   74,  244,  244,
  /*   660 */    88,  123,  122,  136,  135,  134,  117,   85,  100,  113,
- /*   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,
+ /*   670 */   101,  101,  101,   88,   74,  363,  363,   74,   74,   74,
+ /*   680 */   243,  243,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*   690 */   100,  113,  101,  101,  101,   88,   74,  363,  363,   74,
+ /*   700 */    74,   74,  242,  242,   88,  123,  122,  136,  135,  134,
+ /*   710 */   117,   85,  100,  113,  101,  101,  101,   88,   74,  363,
+ /*   720 */   363,   74,   74,   74,  241,  241,   88,  123,  122,  136,
+ /*   730 */   135,  134,  117,   85,  100,  113,  101,  101,  101,   88,
+ /*   740 */    74,  363,  363,   74,   74,   74,  240,  240,   88,  123,
+ /*   750 */   122,  136,  135,  134,  117,   85,  100,  113,  101,  101,
+ /*   760 */   101,   88,   74,  363,  363,   74,   74,   74,  239,  239,
  /*   770 */    88,  123,  122,  136,  135,  134,  117,   85,  100,  113,
- /*   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,
+ /*   780 */   101,  101,  101,   88,   74,  363,  363,   74,   74,   74,
+ /*   790 */   238,  238,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*   800 */   100,  113,  101,  101,  101,   88,   74,  363,  363,   74,
+ /*   810 */    74,   74,  237,  237,   88,  123,  122,  136,  135,  134,
+ /*   820 */   117,   85,  100,  113,  101,  101,  101,   88,   74,  363,
+ /*   830 */   363,   74,   74,   74,  300,  300,   88,  123,  122,  136,
+ /*   840 */   135,  134,  117,   85,  100,  113,  101,  101,  101,   88,
+ /*   850 */    74,  363,  363,   74,   74,   74,  295,  295,   88,  123,
+ /*   860 */   122,  136,  135,  134,  117,   85,  100,  113,  101,  101,
+ /*   870 */   101,   88,   74,  363,  363,   74,   74,   74,  248,  248,
  /*   880 */    88,  123,  122,  136,  135,  134,  117,   85,  100,  113,
- /*   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,
+ /*   890 */   101,  101,  101,   88,   74,  363,  363,   74,   74,   74,
+ /*   900 */   140,  140,   88,  123,  122,  136,  135,  134,  117,   85,
+ /*   910 */   100,  113,  101,  101,  101,   88,   74,  363,  363,   74,
+ /*   920 */    74,   74,  236,  236,   88,  123,  122,  136,  135,  134,
+ /*   930 */   117,   85,  100,  113,  101,  101,  101,   88,   74,  363,
+ /*   940 */   363,   74,   74,   74,  235,  235,   88,  123,  122,  136,
+ /*   950 */   135,  134,  117,   85,  100,  113,  101,  101,  101,   88,
+ /*   960 */    74,  363,   74,   74,   74,  119,  363,  110,  136,  135,
+ /*   970 */   134,  117,   85,  100,  113,  101,  101,  101,  119,   74,
+ /*   980 */   363,   74,   74,   74,  119,  363,  363,  131,  135,  134,
+ /*   990 */   117,   85,  100,  113,  101,  101,  101,  119,   74,  363,
+ /*  1000 */   363,   74,   74,   74,  363,  363,  119,  363,  363,  139,
+ /*  1010 */   135,  134,  117,   85,  100,  113,  101,  101,  101,  119,
+ /*  1020 */    74,  363,  363,   74,   74,   74,  363,  363,  119,  363,
+ /*  1030 */   363,  363,  138,  134,  117,   85,  100,  113,  101,  101,
+ /*  1040 */   101,  119,   74,  363,  363,   74,   74,   74,  363,  363,
  /*  1050 */   119,  363,  363,  363,  363,  137,  117,   85,  100,  113,
- /*  1060 */   101,  330,  331,  333,   74,  363,  363,  337,  340,   50,
+ /*  1060 */   101,  101,  101,  119,   74,  363,  363,   74,   74,   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,  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,
+ /*  1090 */    16,   15,   14,   13,   12,   74,  363,  363,  119,  363,
+ /*  1100 */   363,  363,  363,  363,  121,   85,  100,  113,  101,  101,
+ /*  1110 */   101,  119,   74,  363,  363,   74,   74,  363,   74,  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,
+ /*  1130 */   113,  101,  101,  101,  119,   74,  363,  363,   74,   74,
+ /*  1140 */    74,  363,  363,  119,  363,  363,  363,  363,  363,  363,
+ /*  1150 */    87,  100,  113,  101,  101,  101,  119,   74,  363,   74,
+ /*  1160 */    74,   74,  119,  363,  363,  363,  363,  363,  363,  363,
+ /*  1170 */    89,  113,  101,  101,  101,  119,   74,  363,   74,   74,
+ /*  1180 */    74,  119,  363,  363,  363,  363,  363,  363,  363,   90,
+ /*  1190 */   113,  101,  101,  101,  119,   74,  363,  363,   74,   74,
+ /*  1200 */   363,   74,  363,  363,  119,  363,  363,    7,  363,  363,
+ /*  1210 */   339,   72,   91,  113,  101,  101,  101,  119,   74,  363,
+ /*  1220 */   363,   74,   74,   74,  363,  363,  119,  363,  363,  363,
+ /*  1230 */   363,  363,  363,  363,   92,  113,  101,  101,  101,  119,
+ /*  1240 */    74,  363,   74,   74,   74,  119,  363,  363,  363,  363,
+ /*  1250 */   363,  363,  363,   93,  113,  101,  101,  101,  119,   74,
+ /*  1260 */   363,   74,   74,   74,  119,  341,  342,  343,  344,  345,
+ /*  1270 */     4,  363,   94,  113,  101,  101,  101,  119,   74,  363,
+ /*  1280 */   363,   74,   74,  363,   74,  363,  363,  119,  363,  363,
+ /*  1290 */   363,  363,  363,  363,  363,   95,  113,  101,  101,  101,
+ /*  1300 */   119,   74,  363,  363,   74,   74,   74,  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,
+ /*  1320 */   101,  101,  119,   74,  363,   74,   74,   74,  119,  363,
+ /*  1330 */   363,  363,  363,  363,  363,  363,   97,  113,  101,  101,
+ /*  1340 */   101,  119,   74,  363,   74,   74,   74,  119,  363,  363,
+ /*  1350 */   363,  363,  363,  363,  363,   98,  113,  101,  101,  101,
+ /*  1360 */   119,   74,  363,  363,   74,   74,  363,   74,  363,  363,
  /*  1370 */   119,  363,  363,  363,  363,  363,  363,  363,   99,  113,
- /*  1380 */   101,  330,  331,  333,   74,  363,  363,  337,  340,  335,
+ /*  1380 */   101,  101,  101,  119,   74,  363,  363,   74,   74,   74,
  /*  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,
+ /*  1400 */   102,  113,  101,  101,  101,  119,   74,  363,   74,   74,
+ /*  1410 */    74,  119,  363,  363,  363,  363,  363,  363,  363,  104,
+ /*  1420 */   113,  101,  101,  101,  119,   74,  363,   74,   74,   74,
  /*  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,
+ /*  1440 */   101,  101,  101,  119,   74,  363,  363,   74,   74,  363,
+ /*  1450 */    74,  363,  363,  119,  363,  363,  363,  363,  363,  363,
+ /*  1460 */   363,  363,  114,  101,  101,  101,  119,   74,  363,  363,
+ /*  1470 */    74,   74,   74,  363,  363,  119,  363,  363,  363,  363,
+ /*  1480 */   363,  363,  363,  363,  116,  101,  101,  101,  119,   74,
+ /*  1490 */   363,   74,   74,   74,  119,  363,  363,  363,  363,  363,
+ /*  1500 */   363,  363,  363,  120,  101,  101,  101,  119,   74,  363,
+ /*  1510 */   363,   74,   74,  445,  363,  363,   83,   82,   79,  316,
+ /*  1520 */    73,  363,   81,  141,    9,   74,   70,  363,  119,  363,
+ /*  1530 */   363,  363,  363,  363,  363,  363,  363,  363,  103,  103,
+ /*  1540 */   103,  119,   74,  363,  363,   74,   74,   74,  363,  363,
+ /*  1550 */   119,  363,  363,  363,  363,   74,  363,  363,  119,  363,
+ /*  1560 */   105,  105,  105,  119,   74,  363,  363,   74,   74,  278,
+ /*  1570 */   278,  119,   74,  363,   74,   74,   74,  119,  363,  363,
+ /*  1580 */   363,  363,  363,  363,  363,  363,  363,  363,  277,  277,
+ /*  1590 */   119,   74,  363,  363,   74,   74,   74,  363,  363,  119,
+ /*  1600 */   363,  363,  363,  363,  363,   74,  363,  363,  119,  363,
+ /*  1610 */   289,  289,  119,   74,  363,  363,   74,   74,  363,  288,
+ /*  1620 */   288,  119,   74,  363,   74,   74,   74,  119,  363,  363,
+ /*  1630 */   363,  363,  363,   74,  363,  363,  119,  363,  287,  287,
+ /*  1640 */   119,   74,  363,   74,   74,   74,  119,  286,  286,  119,
+ /*  1650 */    74,  363,   74,   74,   74,  119,  363,  285,  285,  119,
+ /*  1660 */    74,  363,  363,   74,   74,  363,  284,  284,  119,   74,
+ /*  1670 */   363,   74,   74,   74,  119,  363,  363,  363,  363,   74,
+ /*  1680 */   363,  363,  119,  363,  363,  283,  283,  119,   74,  363,
+ /*  1690 */   363,   74,   74,  282,  282,  119,   74,  363,  363,   74,
+ /*  1700 */    74,  363,   74,  363,  363,  119,  363,  363,  363,  363,
+ /*  1710 */    74,  363,  363,  119,  363,  363,  281,  281,  119,   74,
+ /*  1720 */   363,  363,   74,   74,  280,  280,  119,   74,  363,   74,
+ /*  1730 */    74,   74,  119,  363,  363,  363,  363,   74,  363,  363,
+ /*  1740 */   119,  363,  363,  279,  279,  119,   74,  363,  363,   74,
+ /*  1750 */    74,  276,  276,  119,   74,  363,  363,   74,   74,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */     1,    2,  106,  107,  108,    6,    7,   77,    9,   10,
@@ -638,9 +641,9 @@ typedef struct yyStackEntry yyStackEntry;
 /* The state of the parser is completely contained in an instance of
 ** the following structure */
 struct yyParser {
-  int yyidx;                    /* Index of top element in stack */
+  yyStackEntry *yytos;          /* Pointer to top element of the stack */
 #ifdef YYTRACKMAXSTACKDEPTH
-  int yyidxMax;                 /* Maximum value of yyidx */
+  int yyhwm;                    /* High-water mark of the stack */
 #endif
 #ifndef YYNOERRORRECOVERY
   int yyerrcnt;                 /* Shifts left before out of the error */
@@ -649,6 +652,7 @@ struct yyParser {
 #if YYSTACKDEPTH<=0
   int yystksz;                  /* Current side of the stack */
   yyStackEntry *yystack;        /* The parser's stack */
+  yyStackEntry yystk0;          /* First stack entry */
 #else
   yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
 #endif
@@ -867,24 +871,34 @@ static const char *const yyRuleName[] = {
 
 #if YYSTACKDEPTH<=0
 /*
-** Try to increase the size of the parser stack.
+** Try to increase the size of the parser stack.  Return the number
+** of errors.  Return 0 on success.
 */
-static void yyGrowStack(yyParser *p){
+static int yyGrowStack(yyParser *p){
   int newSize;
+  int idx;
   yyStackEntry *pNew;
 
   newSize = p->yystksz*2 + 100;
-  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  idx = p->yytos ? (int)(p->yytos - p->yystack) : 0;
+  if( p->yystack==&p->yystk0 ){
+    pNew = malloc(newSize*sizeof(pNew[0]));
+    if( pNew ) pNew[0] = p->yystk0;
+  }else{
+    pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  }
   if( pNew ){
     p->yystack = pNew;
-    p->yystksz = newSize;
+    p->yytos = &p->yystack[idx];
 #ifndef NDEBUG
     if( yyTraceFILE ){
-      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
-              yyTracePrompt, p->yystksz);
+      fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
+              yyTracePrompt, p->yystksz, newSize);
     }
 #endif
+    p->yystksz = newSize;
   }
+  return pNew==0; 
 }
 #endif
 
@@ -913,15 +927,24 @@ void *grn_expr_parserAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){
   yyParser *pParser;
   pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) );
   if( pParser ){
-    pParser->yyidx = -1;
 #ifdef YYTRACKMAXSTACKDEPTH
-    pParser->yyidxMax = 0;
+    pParser->yyhwm = 0;
 #endif
 #if YYSTACKDEPTH<=0
+    pParser->yytos = NULL;
     pParser->yystack = NULL;
     pParser->yystksz = 0;
-    yyGrowStack(pParser);
+    if( yyGrowStack(pParser) ){
+      pParser->yystack = &pParser->yystk0;
+      pParser->yystksz = 1;
+    }
 #endif
+#ifndef YYNOERRORRECOVERY
+    pParser->yyerrcnt = -1;
+#endif
+    pParser->yytos = pParser->yystack;
+    pParser->yystack[0].stateno = 0;
+    pParser->yystack[0].major = 0;
   }
   return pParser;
 }
@@ -953,11 +976,11 @@ static void yy_destructor(
 /********* Begin destructor definitions ***************************************/
     case 75: /* suppress_unused_variable_warning */
 {
-#line 11 "grn_ecmascript.lemon"
+#line 14 "grn_ecmascript.lemon"
 
   (void)efsi;
 
-#line 961 "grn_ecmascript.c"
+#line 984 "grn_ecmascript.c"
 }
       break;
 /********* End destructor definitions *****************************************/
@@ -973,8 +996,9 @@ static void yy_destructor(
 */
 static void yy_pop_parser_stack(yyParser *pParser){
   yyStackEntry *yytos;
-  assert( pParser->yyidx>=0 );
-  yytos = &pParser->yystack[pParser->yyidx--];
+  assert( pParser->yytos!=0 );
+  assert( pParser->yytos > pParser->yystack );
+  yytos = pParser->yytos--;
 #ifndef NDEBUG
   if( yyTraceFILE ){
     fprintf(yyTraceFILE,"%sPopping %s\n",
@@ -1001,9 +1025,9 @@ void grn_expr_parserFree(
 #ifndef YYPARSEFREENEVERNULL
   if( pParser==0 ) return;
 #endif
-  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+  while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
 #if YYSTACKDEPTH<=0
-  free(pParser->yystack);
+  if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack);
 #endif
   (*freeProc)((void*)pParser);
 }
@@ -1014,7 +1038,7 @@ void grn_expr_parserFree(
 #ifdef YYTRACKMAXSTACKDEPTH
 int grn_expr_parserStackPeak(void *p){
   yyParser *pParser = (yyParser*)p;
-  return pParser->yyidxMax;
+  return pParser->yyhwm;
 }
 #endif
 
@@ -1027,7 +1051,7 @@ static unsigned int yy_find_shift_action(
   YYCODETYPE iLookAhead     /* The look-ahead token */
 ){
   int i;
-  int stateno = pParser->yystack[pParser->yyidx].stateno;
+  int stateno = pParser->yytos->stateno;
  
   if( stateno>=YY_MIN_REDUCE ) return stateno;
   assert( stateno <= YY_SHIFT_COUNT );
@@ -1120,13 +1144,13 @@ static int yy_find_reduce_action(
 */
 static void yyStackOverflow(yyParser *yypParser){
    grn_expr_parserARG_FETCH;
-   yypParser->yyidx--;
+   yypParser->yytos--;
 #ifndef NDEBUG
    if( yyTraceFILE ){
      fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
    }
 #endif
-   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+   while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
    /* Here code is inserted which will execute if the parser
    ** stack every overflows */
 /******** Begin %stack_overflow code ******************************************/
@@ -1142,11 +1166,11 @@ static void yyTraceShift(yyParser *yypParser, int yyNewState){
   if( yyTraceFILE ){
     if( yyNewState<YYNSTATE ){
       fprintf(yyTraceFILE,"%sShift '%s', go to state %d\n",
-         yyTracePrompt,yyTokenName[yypParser->yystack[yypParser->yyidx].major],
+         yyTracePrompt,yyTokenName[yypParser->yytos->major],
          yyNewState);
     }else{
       fprintf(yyTraceFILE,"%sShift '%s'\n",
-         yyTracePrompt,yyTokenName[yypParser->yystack[yypParser->yyidx].major]);
+         yyTracePrompt,yyTokenName[yypParser->yytos->major]);
     }
   }
 }
@@ -1164,27 +1188,30 @@ static void yy_shift(
   grn_expr_parserTOKENTYPE yyMinor        /* The minor token to shift in */
 ){
   yyStackEntry *yytos;
-  yypParser->yyidx++;
+  yypParser->yytos++;
 #ifdef YYTRACKMAXSTACKDEPTH
-  if( yypParser->yyidx>yypParser->yyidxMax ){
-    yypParser->yyidxMax = yypParser->yyidx;
+  if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
+    yypParser->yyhwm++;
+    assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
   }
 #endif
 #if YYSTACKDEPTH>0 
-  if( yypParser->yyidx>=YYSTACKDEPTH ){
+  if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH] ){
     yyStackOverflow(yypParser);
     return;
   }
 #else
-  if( yypParser->yyidx>=yypParser->yystksz ){
-    yyGrowStack(yypParser);
-    if( yypParser->yyidx>=yypParser->yystksz ){
+  if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){
+    if( yyGrowStack(yypParser) ){
       yyStackOverflow(yypParser);
       return;
     }
   }
 #endif
-  yytos = &yypParser->yystack[yypParser->yyidx];
+  if( yyNewState > YY_MAX_SHIFT ){
+    yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
+  }
+  yytos = yypParser->yytos;
   yytos->stateno = (YYACTIONTYPE)yyNewState;
   yytos->major = (YYCODETYPE)yyMajor;
   yytos->minor.yy0 = yyMinor;
@@ -1349,7 +1376,7 @@ static void yy_reduce(
   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];
+  yymsp = yypParser->yytos;
 #ifndef NDEBUG
   if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
     yysize = yyRuleInfo[yyruleno].nrhs;
@@ -1363,22 +1390,23 @@ static void yy_reduce(
   ** 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;
+    if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
+      yypParser->yyhwm++;
+      assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack));
     }
 #endif
 #if YYSTACKDEPTH>0 
-    if( yypParser->yyidx>=YYSTACKDEPTH-1 ){
+    if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH-1] ){
       yyStackOverflow(yypParser);
       return;
     }
 #else
-    if( yypParser->yyidx>=yypParser->yystksz-1 ){
-      yyGrowStack(yypParser);
-      if( yypParser->yyidx>=yypParser->yystksz-1 ){
+    if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
+      if( yyGrowStack(yypParser) ){
         yyStackOverflow(yypParser);
         return;
       }
+      yymsp = yypParser->yytos;
     }
 #endif
   }
@@ -1395,46 +1423,46 @@ static void yy_reduce(
 /********** Begin reduce actions **********************************************/
         YYMINORTYPE yylhsminor;
       case 0: /* query ::= query query_element */
-#line 46 "grn_ecmascript.lemon"
+#line 49 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2);
 }
-#line 1403 "grn_ecmascript.c"
+#line 1431 "grn_ecmascript.c"
         break;
       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"
+#line 52 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
 }
-#line 1411 "grn_ecmascript.c"
+#line 1439 "grn_ecmascript.c"
         break;
       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"
+#line 55 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
 }
-#line 1419 "grn_ecmascript.c"
+#line 1447 "grn_ecmascript.c"
         break;
       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"
+#line 58 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
 }
-#line 1427 "grn_ecmascript.c"
+#line 1455 "grn_ecmascript.c"
         break;
       case 4: /* query_element ::= RELATIVE_OP query_element */
-#line 62 "grn_ecmascript.lemon"
+#line 65 "grn_ecmascript.lemon"
 {
   int mode;
   GRN_INT32_POP(&efsi->mode_stack, mode);
 }
-#line 1435 "grn_ecmascript.c"
+#line 1463 "grn_ecmascript.c"
         break;
       case 5: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */
-#line 66 "grn_ecmascript.lemon"
+#line 69 "grn_ecmascript.lemon"
 {
   int mode;
   grn_obj *c;
@@ -1458,317 +1486,317 @@ static void yy_reduce(
     break;
   }
 }
-#line 1462 "grn_ecmascript.c"
+#line 1490 "grn_ecmascript.c"
         break;
       case 6: /* query_element ::= BRACEL expression BRACER */
       case 7: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==7);
-#line 89 "grn_ecmascript.lemon"
+#line 92 "grn_ecmascript.lemon"
 {
   efsi->flags = efsi->default_flags;
 }
-#line 1470 "grn_ecmascript.c"
+#line 1498 "grn_ecmascript.c"
         break;
       case 8: /* expression ::= expression COMMA assignment_expression */
-#line 97 "grn_ecmascript.lemon"
+#line 100 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
 }
-#line 1477 "grn_ecmascript.c"
+#line 1505 "grn_ecmascript.c"
         break;
       case 9: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
-#line 102 "grn_ecmascript.lemon"
+#line 105 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2);
 }
-#line 1484 "grn_ecmascript.c"
+#line 1512 "grn_ecmascript.c"
         break;
       case 10: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
-#line 105 "grn_ecmascript.lemon"
+#line 108 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2);
 }
-#line 1491 "grn_ecmascript.c"
+#line 1519 "grn_ecmascript.c"
         break;
       case 11: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
-#line 108 "grn_ecmascript.lemon"
+#line 111 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2);
 }
-#line 1498 "grn_ecmascript.c"
+#line 1526 "grn_ecmascript.c"
         break;
       case 12: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
-#line 111 "grn_ecmascript.lemon"
+#line 114 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2);
 }
-#line 1505 "grn_ecmascript.c"
+#line 1533 "grn_ecmascript.c"
         break;
       case 13: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
-#line 114 "grn_ecmascript.lemon"
+#line 117 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2);
 }
-#line 1512 "grn_ecmascript.c"
+#line 1540 "grn_ecmascript.c"
         break;
       case 14: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
-#line 117 "grn_ecmascript.lemon"
+#line 120 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2);
 }
-#line 1519 "grn_ecmascript.c"
+#line 1547 "grn_ecmascript.c"
         break;
       case 15: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
-#line 120 "grn_ecmascript.lemon"
+#line 123 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2);
 }
-#line 1526 "grn_ecmascript.c"
+#line 1554 "grn_ecmascript.c"
         break;
       case 16: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
-#line 123 "grn_ecmascript.lemon"
+#line 126 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2);
 }
-#line 1533 "grn_ecmascript.c"
+#line 1561 "grn_ecmascript.c"
         break;
       case 17: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
-#line 126 "grn_ecmascript.lemon"
+#line 129 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2);
 }
-#line 1540 "grn_ecmascript.c"
+#line 1568 "grn_ecmascript.c"
         break;
       case 18: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
-#line 129 "grn_ecmascript.lemon"
+#line 132 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2);
 }
-#line 1547 "grn_ecmascript.c"
+#line 1575 "grn_ecmascript.c"
         break;
       case 19: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
-#line 132 "grn_ecmascript.lemon"
+#line 135 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2);
 }
-#line 1554 "grn_ecmascript.c"
+#line 1582 "grn_ecmascript.c"
         break;
       case 20: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
-#line 135 "grn_ecmascript.lemon"
+#line 138 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2);
 }
-#line 1561 "grn_ecmascript.c"
+#line 1589 "grn_ecmascript.c"
         break;
       case 21: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
-#line 140 "grn_ecmascript.lemon"
+#line 143 "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 1570 "grn_ecmascript.c"
+#line 1598 "grn_ecmascript.c"
         break;
       case 25: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
-#line 160 "grn_ecmascript.lemon"
+#line 163 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2);
 }
-#line 1577 "grn_ecmascript.c"
+#line 1605 "grn_ecmascript.c"
         break;
       case 26: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
-#line 165 "grn_ecmascript.lemon"
+#line 168 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2);
 }
-#line 1584 "grn_ecmascript.c"
+#line 1612 "grn_ecmascript.c"
         break;
       case 27: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
-#line 170 "grn_ecmascript.lemon"
+#line 173 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2);
 }
-#line 1591 "grn_ecmascript.c"
+#line 1619 "grn_ecmascript.c"
         break;
       case 28: /* equality_expression ::= equality_expression EQUAL relational_expression */
-#line 175 "grn_ecmascript.lemon"
+#line 178 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2);
 }
-#line 1598 "grn_ecmascript.c"
+#line 1626 "grn_ecmascript.c"
         break;
       case 29: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */
-#line 178 "grn_ecmascript.lemon"
+#line 181 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2);
 }
-#line 1605 "grn_ecmascript.c"
+#line 1633 "grn_ecmascript.c"
         break;
       case 30: /* relational_expression ::= relational_expression LESS shift_expression */
-#line 183 "grn_ecmascript.lemon"
+#line 186 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2);
 }
-#line 1612 "grn_ecmascript.c"
+#line 1640 "grn_ecmascript.c"
         break;
       case 31: /* relational_expression ::= relational_expression GREATER shift_expression */
-#line 186 "grn_ecmascript.lemon"
+#line 189 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2);
 }
-#line 1619 "grn_ecmascript.c"
+#line 1647 "grn_ecmascript.c"
         break;
       case 32: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */
-#line 189 "grn_ecmascript.lemon"
+#line 192 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2);
 }
-#line 1626 "grn_ecmascript.c"
+#line 1654 "grn_ecmascript.c"
         break;
       case 33: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
-#line 192 "grn_ecmascript.lemon"
+#line 195 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2);
 }
-#line 1633 "grn_ecmascript.c"
+#line 1661 "grn_ecmascript.c"
         break;
       case 34: /* relational_expression ::= relational_expression IN shift_expression */
-#line 195 "grn_ecmascript.lemon"
+#line 198 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2);
 }
-#line 1640 "grn_ecmascript.c"
+#line 1668 "grn_ecmascript.c"
         break;
       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"
+#line 201 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
 }
-#line 1648 "grn_ecmascript.c"
+#line 1676 "grn_ecmascript.c"
         break;
       case 36: /* relational_expression ::= relational_expression NEAR shift_expression */
-#line 201 "grn_ecmascript.lemon"
+#line 204 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR, 2);
 }
-#line 1655 "grn_ecmascript.c"
+#line 1683 "grn_ecmascript.c"
         break;
       case 37: /* relational_expression ::= relational_expression NEAR2 shift_expression */
-#line 204 "grn_ecmascript.lemon"
+#line 207 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2);
 }
-#line 1662 "grn_ecmascript.c"
+#line 1690 "grn_ecmascript.c"
         break;
       case 38: /* relational_expression ::= relational_expression SIMILAR shift_expression */
-#line 207 "grn_ecmascript.lemon"
+#line 210 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 2);
 }
-#line 1669 "grn_ecmascript.c"
+#line 1697 "grn_ecmascript.c"
         break;
       case 39: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
-#line 210 "grn_ecmascript.lemon"
+#line 213 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2);
 }
-#line 1676 "grn_ecmascript.c"
+#line 1704 "grn_ecmascript.c"
         break;
       case 40: /* relational_expression ::= relational_expression LCP shift_expression */
-#line 213 "grn_ecmascript.lemon"
+#line 216 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2);
 }
-#line 1683 "grn_ecmascript.c"
+#line 1711 "grn_ecmascript.c"
         break;
       case 41: /* relational_expression ::= relational_expression PREFIX shift_expression */
-#line 216 "grn_ecmascript.lemon"
+#line 219 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2);
 }
-#line 1690 "grn_ecmascript.c"
+#line 1718 "grn_ecmascript.c"
         break;
       case 42: /* relational_expression ::= relational_expression SUFFIX shift_expression */
-#line 219 "grn_ecmascript.lemon"
+#line 222 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2);
 }
-#line 1697 "grn_ecmascript.c"
+#line 1725 "grn_ecmascript.c"
         break;
       case 43: /* relational_expression ::= relational_expression REGEXP shift_expression */
-#line 222 "grn_ecmascript.lemon"
+#line 225 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_REGEXP, 2);
 }
-#line 1704 "grn_ecmascript.c"
+#line 1732 "grn_ecmascript.c"
         break;
       case 44: /* shift_expression ::= shift_expression SHIFTL additive_expression */
-#line 227 "grn_ecmascript.lemon"
+#line 230 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2);
 }
-#line 1711 "grn_ecmascript.c"
+#line 1739 "grn_ecmascript.c"
         break;
       case 45: /* shift_expression ::= shift_expression SHIFTR additive_expression */
-#line 230 "grn_ecmascript.lemon"
+#line 233 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2);
 }
-#line 1718 "grn_ecmascript.c"
+#line 1746 "grn_ecmascript.c"
         break;
       case 46: /* shift_expression ::= shift_expression SHIFTRR additive_expression */
-#line 233 "grn_ecmascript.lemon"
+#line 236 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2);
 }
-#line 1725 "grn_ecmascript.c"
+#line 1753 "grn_ecmascript.c"
         break;
       case 47: /* additive_expression ::= additive_expression PLUS multiplicative_expression */
       case 81: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==81);
-#line 238 "grn_ecmascript.lemon"
+#line 241 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
 }
-#line 1733 "grn_ecmascript.c"
+#line 1761 "grn_ecmascript.c"
         break;
       case 48: /* additive_expression ::= additive_expression MINUS multiplicative_expression */
-#line 241 "grn_ecmascript.lemon"
+#line 244 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2);
 }
-#line 1740 "grn_ecmascript.c"
+#line 1768 "grn_ecmascript.c"
         break;
       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"
+#line 249 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
 }
-#line 1748 "grn_ecmascript.c"
+#line 1776 "grn_ecmascript.c"
         break;
       case 50: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
-#line 249 "grn_ecmascript.lemon"
+#line 252 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2);
 }
-#line 1755 "grn_ecmascript.c"
+#line 1783 "grn_ecmascript.c"
         break;
       case 51: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */
-#line 252 "grn_ecmascript.lemon"
+#line 255 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2);
 }
-#line 1762 "grn_ecmascript.c"
+#line 1790 "grn_ecmascript.c"
         break;
       case 52: /* unary_expression ::= DELETE unary_expression */
-#line 257 "grn_ecmascript.lemon"
+#line 260 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1);
 }
-#line 1769 "grn_ecmascript.c"
+#line 1797 "grn_ecmascript.c"
         break;
       case 53: /* unary_expression ::= INCR unary_expression */
-#line 260 "grn_ecmascript.lemon"
+#line 263 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1786,10 +1814,10 @@ static void yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR, 1);
   }
 }
-#line 1790 "grn_ecmascript.c"
+#line 1818 "grn_ecmascript.c"
         break;
       case 54: /* unary_expression ::= DECR unary_expression */
-#line 277 "grn_ecmascript.lemon"
+#line 280 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1807,66 +1835,66 @@ static void yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR, 1);
   }
 }
-#line 1811 "grn_ecmascript.c"
+#line 1839 "grn_ecmascript.c"
         break;
       case 55: /* unary_expression ::= PLUS unary_expression */
-#line 294 "grn_ecmascript.lemon"
+#line 297 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1);
 }
-#line 1818 "grn_ecmascript.c"
+#line 1846 "grn_ecmascript.c"
         break;
       case 56: /* unary_expression ::= MINUS unary_expression */
-#line 297 "grn_ecmascript.lemon"
+#line 300 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1);
 }
-#line 1825 "grn_ecmascript.c"
+#line 1853 "grn_ecmascript.c"
         break;
       case 57: /* unary_expression ::= NOT unary_expression */
-#line 300 "grn_ecmascript.lemon"
+#line 303 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1);
 }
-#line 1832 "grn_ecmascript.c"
+#line 1860 "grn_ecmascript.c"
         break;
       case 58: /* unary_expression ::= BITWISE_NOT unary_expression */
-#line 303 "grn_ecmascript.lemon"
+#line 306 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1);
 }
-#line 1839 "grn_ecmascript.c"
+#line 1867 "grn_ecmascript.c"
         break;
       case 59: /* unary_expression ::= ADJUST unary_expression */
-#line 306 "grn_ecmascript.lemon"
+#line 309 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1);
 }
-#line 1846 "grn_ecmascript.c"
+#line 1874 "grn_ecmascript.c"
         break;
       case 60: /* unary_expression ::= EXACT unary_expression */
-#line 309 "grn_ecmascript.lemon"
+#line 312 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1);
 }
-#line 1853 "grn_ecmascript.c"
+#line 1881 "grn_ecmascript.c"
         break;
       case 61: /* unary_expression ::= PARTIAL unary_expression */
-#line 312 "grn_ecmascript.lemon"
+#line 315 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1);
 }
-#line 1860 "grn_ecmascript.c"
+#line 1888 "grn_ecmascript.c"
         break;
       case 62: /* unary_expression ::= UNSPLIT unary_expression */
-#line 315 "grn_ecmascript.lemon"
+#line 318 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1);
 }
-#line 1867 "grn_ecmascript.c"
+#line 1895 "grn_ecmascript.c"
         break;
       case 63: /* postfix_expression ::= lefthand_side_expression INCR */
-#line 320 "grn_ecmascript.lemon"
+#line 323 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1884,10 +1912,10 @@ static void yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR_POST, 1);
   }
 }
-#line 1888 "grn_ecmascript.c"
+#line 1916 "grn_ecmascript.c"
         break;
       case 64: /* postfix_expression ::= lefthand_side_expression DECR */
-#line 337 "grn_ecmascript.lemon"
+#line 340 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1905,17 +1933,17 @@ static void yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR_POST, 1);
   }
 }
-#line 1909 "grn_ecmascript.c"
+#line 1937 "grn_ecmascript.c"
         break;
       case 65: /* call_expression ::= member_expression arguments */
-#line 358 "grn_ecmascript.lemon"
+#line 361 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0);
 }
-#line 1916 "grn_ecmascript.c"
+#line 1944 "grn_ecmascript.c"
         break;
       case 66: /* object_literal ::= BRACEL property_name_and_value_list BRACER */
-#line 386 "grn_ecmascript.lemon"
+#line 389 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
@@ -1923,10 +1951,10 @@ static void yy_reduce(
                       GRN_OP_PUSH, 1);
   efsi->object_literal = NULL;
 }
-#line 1927 "grn_ecmascript.c"
+#line 1955 "grn_ecmascript.c"
         break;
       case 67: /* property_name_and_value_list ::= */
-#line 394 "grn_ecmascript.lemon"
+#line 397 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
 
@@ -1939,10 +1967,10 @@ static void yy_reduce(
         (int)(efsi->str_end - efsi->str), efsi->str);
   }
 }
-#line 1943 "grn_ecmascript.c"
+#line 1971 "grn_ecmascript.c"
         break;
       case 68: /* property_name_and_value ::= property_name COLON assignment_expression */
-#line 409 "grn_ecmascript.lemon"
+#line 412 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1984,61 +2012,61 @@ static void yy_reduce(
     }
   }
 }
-#line 1988 "grn_ecmascript.c"
+#line 2016 "grn_ecmascript.c"
         break;
       case 69: /* member_expression_part ::= BRACKETL expression BRACKETR */
-#line 453 "grn_ecmascript.lemon"
+#line 456 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
 }
-#line 1995 "grn_ecmascript.c"
+#line 2023 "grn_ecmascript.c"
         break;
       case 70: /* arguments ::= PARENL argument_list PARENR */
-#line 458 "grn_ecmascript.lemon"
+#line 461 "grn_ecmascript.lemon"
 { yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; }
-#line 2000 "grn_ecmascript.c"
+#line 2028 "grn_ecmascript.c"
         break;
       case 71: /* argument_list ::= */
-#line 459 "grn_ecmascript.lemon"
+#line 462 "grn_ecmascript.lemon"
 { yymsp[1].minor.yy0 = 0; }
-#line 2005 "grn_ecmascript.c"
+#line 2033 "grn_ecmascript.c"
         break;
       case 72: /* argument_list ::= assignment_expression */
-#line 460 "grn_ecmascript.lemon"
+#line 463 "grn_ecmascript.lemon"
 { yymsp[0].minor.yy0 = 1; }
-#line 2010 "grn_ecmascript.c"
+#line 2038 "grn_ecmascript.c"
         break;
       case 73: /* argument_list ::= argument_list COMMA assignment_expression */
-#line 461 "grn_ecmascript.lemon"
+#line 464 "grn_ecmascript.lemon"
 { yylhsminor.yy0 = yymsp[-2].minor.yy0 + 1; }
-#line 2015 "grn_ecmascript.c"
+#line 2043 "grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 74: /* output_columns ::= */
-#line 463 "grn_ecmascript.lemon"
+#line 466 "grn_ecmascript.lemon"
 {
   yymsp[1].minor.yy0 = 0;
 }
-#line 2023 "grn_ecmascript.c"
+#line 2051 "grn_ecmascript.c"
         break;
       case 75: /* output_columns ::= output_column */
-#line 466 "grn_ecmascript.lemon"
+#line 469 "grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[0].minor.yy0;
 }
-#line 2030 "grn_ecmascript.c"
+#line 2058 "grn_ecmascript.c"
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       case 76: /* output_columns ::= output_columns COMMA */
-#line 471 "grn_ecmascript.lemon"
+#line 474 "grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[-1].minor.yy0;
 }
-#line 2038 "grn_ecmascript.c"
+#line 2066 "grn_ecmascript.c"
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
       case 77: /* output_columns ::= output_columns COMMA output_column */
-#line 476 "grn_ecmascript.lemon"
+#line 479 "grn_ecmascript.lemon"
 {
   if (yymsp[0].minor.yy0 == 0) {
     yylhsminor.yy0 = yymsp[-2].minor.yy0;
@@ -2049,11 +2077,11 @@ static void yy_reduce(
     yylhsminor.yy0 = 1;
   }
 }
-#line 2053 "grn_ecmascript.c"
+#line 2081 "grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 78: /* output_column ::= STAR */
-#line 487 "grn_ecmascript.lemon"
+#line 490 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_obj *expr = efsi->e;
@@ -2107,32 +2135,32 @@ static void yy_reduce(
     yymsp[0].minor.yy0 = 0;
   }
 }
-#line 2111 "grn_ecmascript.c"
+#line 2139 "grn_ecmascript.c"
         break;
       case 79: /* output_column ::= NONEXISTENT_COLUMN */
-#line 540 "grn_ecmascript.lemon"
+#line 543 "grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 0;
 }
-#line 2118 "grn_ecmascript.c"
+#line 2146 "grn_ecmascript.c"
         break;
       case 80: /* output_column ::= assignment_expression */
-#line 543 "grn_ecmascript.lemon"
+#line 546 "grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 1;
 }
-#line 2125 "grn_ecmascript.c"
+#line 2153 "grn_ecmascript.c"
         break;
       default:
       /* (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);
+      /* (88) query ::= query_element (OPTIMIZED OUT) */ assert(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);
+      /* (91) expression ::= assignment_expression (OPTIMIZED OUT) */ assert(yyruleno!=91);
+      /* (92) assignment_expression ::= conditional_expression (OPTIMIZED OUT) */ assert(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);
@@ -2143,17 +2171,17 @@ static void yy_reduce(
       /* (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);
+      /* (103) multiplicative_expression ::= unary_expression (OPTIMIZED OUT) */ assert(yyruleno!=103);
+      /* (104) unary_expression ::= postfix_expression (OPTIMIZED OUT) */ assert(yyruleno!=104);
       /* (105) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==105);
-      /* (106) lefthand_side_expression ::= call_expression */ yytestcase(yyruleno==106);
+      /* (106) lefthand_side_expression ::= call_expression (OPTIMIZED OUT) */ assert(yyruleno!=106);
       /* (107) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==107);
-      /* (108) member_expression ::= primary_expression */ yytestcase(yyruleno==108);
+      /* (108) member_expression ::= primary_expression (OPTIMIZED OUT) */ assert(yyruleno!=108);
       /* (109) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==109);
-      /* (110) primary_expression ::= object_literal */ yytestcase(yyruleno==110);
+      /* (110) primary_expression ::= object_literal (OPTIMIZED OUT) */ assert(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);
+      /* (113) primary_expression ::= array_literal (OPTIMIZED OUT) */ assert(yyruleno!=113);
       /* (114) primary_expression ::= DECIMAL */ yytestcase(yyruleno==114);
       /* (115) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==115);
       /* (116) primary_expression ::= STRING */ yytestcase(yyruleno==116);
@@ -2164,15 +2192,15 @@ static void yy_reduce(
       /* (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);
+      /* (124) element_list ::= assignment_expression (OPTIMIZED OUT) */ assert(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);
+      /* (127) property_name_and_value_list ::= property_name_and_value (OPTIMIZED OUT) */ assert(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);
+      /* (132) adjuster ::= adjust_expression (OPTIMIZED OUT) */ assert(yyruleno!=132);
       /* (133) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==133);
         break;
 /********** End reduce actions ************************************************/
@@ -2182,15 +2210,17 @@ static void yy_reduce(
   yysize = yyRuleInfo[yyruleno].nrhs;
   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;
-    yypParser->yyidx -= yysize - 1;
+    if( yyact>YY_MAX_SHIFT ){
+      yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
+    }
     yymsp -= yysize-1;
+    yypParser->yytos = yymsp;
     yymsp->stateno = (YYACTIONTYPE)yyact;
     yymsp->major = (YYCODETYPE)yygoto;
     yyTraceShift(yypParser, yyact);
   }else{
     assert( yyact == YY_ACCEPT_ACTION );
-    yypParser->yyidx -= yysize;
+    yypParser->yytos -= yysize;
     yy_accept(yypParser);
   }
 }
@@ -2208,7 +2238,7 @@ static void yy_parse_failed(
     fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
   }
 #endif
-  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
   /* Here code is inserted which will be executed whenever the
   ** parser fails */
 /************ Begin %parse_failure code ***************************************/
@@ -2228,7 +2258,7 @@ static void yy_syntax_error(
   grn_expr_parserARG_FETCH;
 #define TOKEN yyminor
 /************ Begin %syntax_error code ****************************************/
-#line 17 "grn_ecmascript.lemon"
+#line 20 "grn_ecmascript.lemon"
 
   {
     grn_ctx *ctx = efsi->ctx;
@@ -2250,7 +2280,7 @@ static void yy_syntax_error(
       GRN_OBJ_FIN(ctx, &message);
     }
   }
-#line 2254 "grn_ecmascript.c"
+#line 2284 "grn_ecmascript.c"
 /************ End %syntax_error code ******************************************/
   grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
@@ -2267,7 +2297,10 @@ static void yy_accept(
     fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
   }
 #endif
-  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+#ifndef YYNOERRORRECOVERY
+  yypParser->yyerrcnt = -1;
+#endif
+  assert( yypParser->yytos==yypParser->yystack );
   /* Here code is inserted which will be executed whenever the
   ** parser accepts */
 /*********** Begin %parse_accept code *****************************************/
@@ -2310,28 +2343,8 @@ void grn_expr_parser(
 #endif
   yyParser *yypParser;  /* The parser */
 
-  /* (re)initialize the parser, if necessary */
   yypParser = (yyParser*)yyp;
-  if( yypParser->yyidx<0 ){
-#if YYSTACKDEPTH<=0
-    if( yypParser->yystksz <=0 ){
-      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
-    if( yyTraceFILE ){
-      fprintf(yyTraceFILE,"%sInitialize. Empty stack. State 0\n",
-              yyTracePrompt);
-    }
-#endif
-  }
+  assert( yypParser->yytos!=0 );
 #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
   yyendofinput = (yymajor==0);
 #endif
@@ -2346,7 +2359,6 @@ void grn_expr_parser(
   do{
     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,yyminor);
 #ifndef YYNOERRORRECOVERY
       yypParser->yyerrcnt--;
@@ -2388,7 +2400,7 @@ void grn_expr_parser(
       if( yypParser->yyerrcnt<0 ){
         yy_syntax_error(yypParser,yymajor,yyminor);
       }
-      yymx = yypParser->yystack[yypParser->yyidx].major;
+      yymx = yypParser->yytos->major;
       if( yymx==YYERRORSYMBOL || yyerrorhit ){
 #ifndef NDEBUG
         if( yyTraceFILE ){
@@ -2399,18 +2411,20 @@ void grn_expr_parser(
         yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion);
         yymajor = YYNOCODE;
       }else{
-        while(
-          yypParser->yyidx >= 0 &&
-          yymx != YYERRORSYMBOL &&
-          (yyact = yy_find_reduce_action(
-                        yypParser->yystack[yypParser->yyidx].stateno,
+        while( yypParser->yytos >= &yypParser->yystack
+            && yymx != YYERRORSYMBOL
+            && (yyact = yy_find_reduce_action(
+                        yypParser->yytos->stateno,
                         YYERRORSYMBOL)) >= YY_MIN_REDUCE
         ){
           yy_pop_parser_stack(yypParser);
         }
-        if( yypParser->yyidx < 0 || yymajor==0 ){
+        if( yypParser->yytos < yypParser->yystack || yymajor==0 ){
           yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
           yy_parse_failed(yypParser);
+#ifndef YYNOERRORRECOVERY
+          yypParser->yyerrcnt = -1;
+#endif
           yymajor = YYNOCODE;
         }else if( yymx!=YYERRORSYMBOL ){
           yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor);
@@ -2447,18 +2461,23 @@ void grn_expr_parser(
       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
       if( yyendofinput ){
         yy_parse_failed(yypParser);
+#ifndef YYNOERRORRECOVERY
+        yypParser->yyerrcnt = -1;
+#endif
       }
       yymajor = YYNOCODE;
 #endif
     }
-  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  }while( yymajor!=YYNOCODE && yypParser->yytos>yypParser->yystack );
 #ifndef NDEBUG
   if( yyTraceFILE ){
-    int i;
+    yyStackEntry *i;
+    char cDiv = '[';
     fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt);
-    for(i=1; i<=yypParser->yyidx; i++)
-      fprintf(yyTraceFILE,"%c%s", i==1 ? '[' : ' ', 
-              yyTokenName[yypParser->yystack[i].major]);
+    for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){
+      fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]);
+      cDiv = ' ';
+    }
     fprintf(yyTraceFILE,"]\n");
   }
 #endif




More information about the Groonga-commit mailing list
Back to archive index