@ 261102.1

261006.1 · a19efdd45dfe91329a7d266efb2ac0a64279a938

Parse `?//` as `?` and `//` outside destructuring patterns (#3593)

The lexer returned a single ALTERNATION token for `?//`, so any `?` followed by `//` was consumed by it, and `.name?//"unknown"` failed to parse even though they read as the optional operator followed by the alternative operator.

Drop the lexer rule and spell the destructuring alternative operator as `'?' "//"` instead. So `x ?// y` now parses as `x? // y`, while `. as [$a] ?// [$b] | ...` keeps its meaning. Note that `?` and `//` may now be separated by whitespaces inside a pattern.

reading declarations

src/lexer.c

@@ -1,6 +1,6 @@-#line 2 "src/lexer.c"+#line 1 "src/lexer.c" -#line 4 "src/lexer.c"+#line 3 "src/lexer.c"  #define  YY_INT_ALIGNED short int @@ -573,8 +573,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); 	yyg->yy_hold_char = *yy_cp; \ 	*yy_cp = '\0'; \ 	yyg->yy_c_buf_p = yy_cp;-#define YY_NUM_RULES 53-#define YY_END_OF_BUFFER 54+#define YY_NUM_RULES 52+#define YY_END_OF_BUFFER 53 /* This struct is not used in this scanner,    but its presence is necessary. */ struct yy_trans_info@@ -582,26 +582,26 @@ struct yy_trans_info 	flex_int32_t yy_verify; 	flex_int32_t yy_nxt; 	};-static const flex_int16_t yy_accept[171] =+static const flex_int16_t yy_accept[168] =     {   0,         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,-        0,    0,    0,    0,   54,   52,   51,   51,   52,   42,-        1,   37,   37,   38,   39,   37,   37,   37,   37,   37,-       37,   41,   37,   37,   37,   37,   52,   48,   48,   48,-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,-       37,   46,   46,   44,   47,    2,    3,    2,    2,   51,-        4,   50,   50,   31,   29,   27,   28,   35,   41,   49,-       20,   30,   41,   41,    0,   33,    5,   34,    0,   40,-       48,    0,   48,    6,   48,   48,   48,   48,   48,   48,-       11,   48,   48,   48,   48,   16,   48,   48,   48,   26,--       46,   45,   43,   45,    3,    2,    0,   50,    0,   50,-       49,   32,   41,    0,   41,   36,    0,   15,   48,   48,-       10,   48,   48,   17,   48,   48,   48,   48,   48,   48,-       48,   21,    0,   45,    0,   50,   48,   48,   48,   14,-       13,   48,   48,   48,   48,   48,   48,   12,   45,   50,-       24,   22,   48,   48,   48,   23,   48,   48,   45,   50,-       48,    7,   48,    9,   18,   50,   19,    8,   25,    0+        0,    0,    0,    0,   53,   51,   50,   50,   51,   41,+        1,   36,   36,   37,   38,   36,   36,   36,   36,   36,+       36,   40,   36,   36,   36,   51,   47,   47,   47,   47,+       47,   47,   47,   47,   47,   47,   47,   47,   47,   36,+       45,   45,   43,   46,    2,    3,    2,    2,   50,    4,+       49,   49,   31,   29,   27,   28,   35,   40,   48,   20,+       30,   40,   40,    0,   33,    5,   34,   39,   47,    0,+       47,    6,   47,   47,   47,   47,   47,   47,   11,   47,+       47,   47,   47,   16,   47,   47,   47,   26,   45,   44,++       42,   44,    3,    2,    0,   49,    0,   49,   48,   32,+       40,    0,   40,    0,   15,   47,   47,   10,   47,   47,+       17,   47,   47,   47,   47,   47,   47,   47,   21,    0,+       44,    0,   49,   47,   47,   47,   14,   13,   47,   47,+       47,   47,   47,   47,   12,   44,   49,   24,   22,   47,+       47,   47,   23,   47,   47,   44,   49,   47,    7,   47,+        9,   18,   49,   19,    8,   25,    0     } ;  static const YY_CHAR yy_ec[256] =@@ -646,147 +646,147 @@ static const YY_CHAR yy_meta[54] =         1,    1,    1     } ; -static const flex_int16_t yy_base[186] =+static const flex_int16_t yy_base[183] =     {   0,         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,-       51,   52,   56,   58,  340,  341,   61,   64,  317,  341,-      341,  307,  315,  341,  341,  314,  313,  341,  312,   53,-       53,   56,  311,  310,  309,  313,    0,  310,   54,   57,-       58,   59,   63,   65,   70,   67,   72,   69,   60,   79,-      306,    0,    0,  341,   83,  341,  341,  324,  107,  116,-      341,  307,   83,  341,  341,  341,  341,  341,  103,    0,-      303,  341,  104,  108,  128,  341,  341,  341,  307,    0,-      304,  301,  110,  297,  114,   75,  115,  108,  118,  119,-      293,  109,  123,  129,  132,  290,  137,  130,  139,  341,--        0,  276,  341,  273,  341,  341,  297,  278,  265,  140,-        0,  341,  142,  261,  258,  341,    0,  252,  142,  145,-      250,  149,  144,  247,  151,  152,  154,  156,  157,  158,-      165,  245,  172,  231,    0,  166,  222,  164,  171,  221,-      220,  169,  172,  174,  175,  178,  179,  218,  206,  180,-      215,  214,  181,  183,  192,  213,  184,  186,  201,  193,-      198,  210,  206,  209,   89,  207,   86,   81,   37,  341,-      242,  250,  253,  259,  264,  269,  277,  285,  290,  295,-      300,  302,  307,  311,  315+       51,   52,   56,   58,  338,  339,   61,   64,  315,  339,+      339,  305,  313,  339,  339,  312,  311,  339,  310,   53,+       53,   56,  309,  308,  307,    0,  309,   54,   57,   58,+       59,   63,   65,   70,   67,   72,   69,   60,   79,  305,+        0,    0,  339,   83,  339,  339,  323,  107,  116,  339,+      306,   83,  339,  339,  339,  339,  339,  103,    0,  302,+      339,  104,  108,  128,  339,  339,  339,    0,  304,  301,+      110,  297,  114,   75,  115,  108,  118,  119,  293,  109,+      123,  129,  132,  290,  137,  130,  139,  339,    0,  276,++      339,  273,  339,  339,  297,  278,  265,  140,    0,  339,+      142,  261,  258,    0,  252,  142,  145,  250,  149,  144,+      247,  151,  152,  154,  156,  157,  158,  165,  245,  172,+      231,    0,  166,  222,  164,  171,  221,  220,  169,  172,+      174,  175,  178,  179,  218,  206,  180,  215,  214,  181,+      183,  192,  213,  184,  186,  201,  193,  198,  210,  206,+      209,   89,  207,   86,   81,   37,  339,  242,  250,  253,+      259,  264,  269,  277,  285,  290,  295,  300,  302,  307,+      311,  315     } ; -static const flex_int16_t yy_def[186] =+static const flex_int16_t yy_def[183] =     {   0,-      170,    1,    1,    1,    1,    1,    1,    1,    1,    1,-      171,  171,  172,  172,  170,  170,  170,  170,  170,  170,-      170,  173,  170,  170,  170,  170,  170,  170,  170,  174,-      170,  170,  170,  170,  170,  170,  175,  176,  176,  176,-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,-      170,  177,  177,  170,  178,  170,  170,  170,  170,  170,-      170,  179,  179,  170,  170,  170,  170,  170,  170,  180,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  175,-      176,  170,  176,  176,  176,  176,  176,  176,  176,  176,-      176,  176,  176,  176,  176,  176,  176,  176,  176,  170,--      177,  170,  170,  181,  170,  170,  170,  179,  170,  179,-      180,  170,  170,  170,  170,  170,  182,  176,  176,  176,-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,-      176,  176,  178,  183,  173,  179,  176,  176,  176,  176,-      176,  176,  176,  176,  176,  176,  176,  176,  184,  179,-      176,  176,  176,  176,  176,  176,  176,  176,  185,  179,-      176,  176,  176,  176,  176,  179,  176,  176,  179,    0,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170+      167,    1,    1,    1,    1,    1,    1,    1,    1,    1,+      168,  168,  169,  169,  167,  167,  167,  167,  167,  167,+      167,  170,  167,  167,  167,  167,  167,  167,  167,  171,+      167,  167,  167,  167,  167,  172,  173,  173,  173,  173,+      173,  173,  173,  173,  173,  173,  173,  173,  173,  167,+      174,  174,  167,  175,  167,  167,  167,  167,  167,  167,+      176,  176,  167,  167,  167,  167,  167,  167,  177,  167,+      167,  167,  167,  167,  167,  167,  167,  172,  173,  167,+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,+      173,  173,  173,  173,  173,  173,  173,  167,  174,  167,++      167,  178,  167,  167,  167,  176,  167,  176,  177,  167,+      167,  167,  167,  179,  173,  173,  173,  173,  173,  173,+      173,  173,  173,  173,  173,  173,  173,  173,  173,  175,+      180,  170,  176,  173,  173,  173,  173,  173,  173,  173,+      173,  173,  173,  173,  173,  181,  176,  173,  173,  173,+      173,  173,  173,  173,  173,  182,  176,  173,  173,  173,+      173,  173,  176,  173,  173,  176,    0,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167     } ; -static const flex_int16_t yy_nxt[395] =+static const flex_int16_t yy_nxt[393] =     {   0,        16,   17,   18,   17,   19,   20,   21,   22,   23,   24,        25,   26,   27,   28,   29,   30,   31,   32,   28,   28,-       33,   34,   35,   36,   37,   38,   38,   24,   16,   25,-       38,   39,   40,   41,   42,   43,   44,   38,   45,   38,-       46,   47,   38,   48,   38,   49,   38,   50,   38,   38,-       24,   51,   25,   53,   53,  109,   54,   54,   57,   58,-       57,   58,   60,   60,   60,   60,   60,   60,   68,   71,-       69,   73,   82,   74,   72,   82,   82,   82,   82,   55,-       55,   82,   75,   82,   59,   82,   59,   82,   82,   86,-       82,   75,  103,   82,   87,   97,   83,   82,   94,   82,--       84,  109,   85,   88,   82,   89,   91,   82,   90,  106,-      107,   92,   93,  110,   96,   95,   98,   60,   60,   60,-       69,  113,  120,   73,   99,   74,   82,   82,   82,   75,-       75,  104,   82,   82,   75,  106,   82,   82,   75,   75,-      114,   82,  114,   75,  118,  115,  122,   82,   82,  119,-       82,  121,  124,  126,  123,   82,  127,   82,  109,  113,-       82,  128,   82,   82,  125,  131,  129,   82,   75,   82,-       82,  130,   82,  138,   82,   82,   82,   75,  139,  141,-      136,  170,   82,   82,  109,  140,  142,   82,  132,   82,-       82,  145,   82,   82,  144,  143,   82,   82,  109,   82,--      153,   82,   82,  151,   82,  146,  147,  148,  152,  150,-       82,  109,  158,  160,  161,  156,   82,  154,  157,  164,-      104,  165,  155,  166,   82,  109,  163,   82,   82,  133,-      162,   82,   82,   82,  133,  167,   82,  169,   82,   82,-       82,  168,   52,   52,   52,   52,   52,   52,   52,   52,-       56,   56,   56,   56,   56,   56,   56,   56,   62,  133,-       62,   70,   70,   82,   70,   82,   70,   80,   82,   80,-       82,   80,   81,   81,   81,  115,   81,  101,  115,  101,-      101,  101,  101,  135,  101,  102,  102,  102,  102,  102,-      102,  102,  102,  108,  108,  108,  109,  108,  111,  106,--      111,  133,  111,  134,  133,  134,  134,  137,   82,  137,-      149,   82,  149,  149,  159,   82,  159,  159,  102,  117,-      102,  102,   82,  116,  112,  109,  105,  100,   82,   79,-       78,   77,   76,   67,   66,   65,   64,   63,   61,  170,-       15,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170+       33,   34,   35,   28,   36,   37,   37,   24,   16,   25,+       37,   38,   39,   40,   41,   42,   43,   37,   44,   37,+       45,   46,   37,   47,   37,   48,   37,   49,   37,   37,+       24,   50,   25,   52,   52,  107,   53,   53,   56,   57,+       56,   57,   59,   59,   59,   59,   59,   59,   67,   70,+       68,   72,   80,   73,   71,   80,   80,   80,   80,   54,+       54,   80,   74,   80,   58,   80,   58,   80,   80,   84,+       80,   74,  101,   80,   85,   95,   81,   80,   92,   80,++       82,  107,   83,   86,   80,   87,   89,   80,   88,  104,+      105,   90,   91,  108,   94,   93,   96,   59,   59,   59,+       68,  111,  117,   72,   97,   73,   80,   80,   80,   74,+       74,  102,   80,   80,   74,  104,   80,   80,   74,   74,+      112,   80,  112,   74,  115,  113,  119,   80,   80,  116,+       80,  118,  121,  123,  120,   80,  124,   80,  107,  111,+       80,  125,   80,   80,  122,  128,  126,   80,   74,   80,+       80,  127,   80,  135,   80,   80,   80,   74,  136,  138,+      133,  167,   80,   80,  107,  137,  139,   80,  129,   80,+       80,  142,   80,   80,  141,  140,   80,   80,  107,   80,++      150,   80,   80,  148,   80,  143,  144,  145,  149,  147,+       80,  107,  155,  157,  158,  153,   80,  151,  154,  161,+      102,  162,  152,  163,   80,  107,  160,   80,   80,  130,+      159,   80,   80,   80,  130,  164,   80,  166,   80,   80,+       80,  165,   51,   51,   51,   51,   51,   51,   51,   51,+       55,   55,   55,   55,   55,   55,   55,   55,   61,  130,+       61,   69,   69,   80,   69,   80,   69,   78,   80,   78,+       80,   78,   79,   79,   79,  113,   79,   99,  113,   99,+       99,   99,   99,  132,   99,  100,  100,  100,  100,  100,+      100,  100,  100,  106,  106,  106,  107,  106,  109,  104,++      109,  130,  109,  131,  130,  131,  131,  134,   80,  134,+      146,   80,  146,  146,  156,   80,  156,  156,  100,  114,+      100,  100,   80,  110,  107,  103,   98,   80,   77,   76,+       75,   66,   65,   64,   63,   62,   60,  167,   15,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167      } ; -static const flex_int16_t yy_chk[395] =+static const flex_int16_t yy_chk[393] =     {   0,         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,-        1,    1,    1,   11,   12,  169,   11,   12,   13,   13,+        1,    1,    1,   11,   12,  166,   11,   12,   13,   13,        14,   14,   17,   17,   17,   18,   18,   18,   30,   31,-       30,   32,   39,   32,   31,   40,   41,   42,   49,   11,-       12,   43,   32,   44,   13,   46,   14,   48,   45,   41,-       47,   32,   55,   86,   42,   49,   39,   50,   46,  168,--       39,   63,   40,   43,  167,   43,   45,  165,   44,   59,-       59,   45,   45,   63,   48,   47,   50,   60,   60,   60,-       69,   73,   86,   74,   50,   74,   88,   92,   83,   69,-       73,   55,   85,   87,   74,   59,   89,   90,   69,   73,-       75,   93,   75,   74,   83,   75,   88,   94,   98,   85,-       95,   87,   89,   92,   88,   97,   93,   99,  110,  113,-      119,   94,  123,  120,   90,   98,   95,  122,  113,  125,-      126,   97,  127,  119,  128,  129,  130,  113,  120,  123,-      110,  133,  138,  131,  136,  122,  125,  142,   99,  139,-      143,  128,  144,  145,  127,  126,  146,  147,  150,  153,--      142,  154,  157,  138,  158,  129,  130,  131,  139,  136,-      155,  160,  147,  150,  153,  145,  161,  143,  146,  157,-      133,  158,  144,  160,  163,  166,  155,  164,  162,  159,-      154,  156,  152,  151,  149,  161,  148,  166,  141,  140,-      137,  163,  171,  171,  171,  171,  171,  171,  171,  171,-      172,  172,  172,  172,  172,  172,  172,  172,  173,  134,-      173,  174,  174,  132,  174,  124,  174,  175,  121,  175,-      118,  175,  176,  176,  176,  115,  176,  177,  114,  177,-      177,  177,  177,  109,  177,  178,  178,  178,  178,  178,-      178,  178,  178,  179,  179,  179,  108,  179,  180,  107,--      180,  104,  180,  181,  102,  181,  181,  182,   96,  182,-      183,   91,  183,  183,  184,   84,  184,  184,  185,   82,-      185,  185,   81,   79,   71,   62,   58,   51,   38,   36,-       35,   34,   33,   29,   27,   26,   23,   22,   19,   15,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,-      170,  170,  170,  170+       30,   32,   38,   32,   31,   39,   40,   41,   48,   11,+       12,   42,   32,   43,   13,   45,   14,   47,   44,   40,+       46,   32,   54,   84,   41,   48,   38,   49,   45,  165,++       38,   62,   39,   42,  164,   42,   44,  162,   43,   58,+       58,   44,   44,   62,   47,   46,   49,   59,   59,   59,+       68,   72,   84,   73,   49,   73,   86,   90,   81,   68,+       72,   54,   83,   85,   73,   58,   87,   88,   68,   72,+       74,   91,   74,   73,   81,   74,   86,   92,   96,   83,+       93,   85,   87,   90,   86,   95,   91,   97,  108,  111,+      116,   92,  120,  117,   88,   96,   93,  119,  111,  122,+      123,   95,  124,  116,  125,  126,  127,  111,  117,  120,+      108,  130,  135,  128,  133,  119,  122,  139,   97,  136,+      140,  125,  141,  142,  124,  123,  143,  144,  147,  150,++      139,  151,  154,  135,  155,  126,  127,  128,  136,  133,+      152,  157,  144,  147,  150,  142,  158,  140,  143,  154,+      130,  155,  141,  157,  160,  163,  152,  161,  159,  156,+      151,  153,  149,  148,  146,  158,  145,  163,  138,  137,+      134,  160,  168,  168,  168,  168,  168,  168,  168,  168,+      169,  169,  169,  169,  169,  169,  169,  169,  170,  131,+      170,  171,  171,  129,  171,  121,  171,  172,  118,  172,+      115,  172,  173,  173,  173,  113,  173,  174,  112,  174,+      174,  174,  174,  107,  174,  175,  175,  175,  175,  175,+      175,  175,  175,  176,  176,  176,  106,  176,  177,  105,++      177,  102,  177,  178,  100,  178,  178,  179,   94,  179,+      180,   89,  180,  180,  181,   82,  181,  181,  182,   80,+      182,  182,   79,   70,   61,   57,   50,   37,   35,   34,+       33,   29,   27,   26,   23,   22,   19,   15,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,+      167,  167      } ; @@ -814,14 +814,14 @@ struct lexer_param;     yyset_extra(yylloc->end, yyscanner);         \   } while (0); -#line 818 "src/lexer.c"+#line 817 "src/lexer.c"  #line 26 "src/lexer.l"   static int enter(int opening, int state, yyscan_t yyscanner);   static int try_exit(int closing, int state, yyscan_t yyscanner);-#line 823 "src/lexer.c"+#line 822 "src/lexer.c" #define YY_NO_INPUT 1-#line 825 "src/lexer.c"+#line 824 "src/lexer.c"  #define INITIAL 0 #define IN_PAREN 1@@ -1116,7 +1116,7 @@ YY_DECL #line 39 "src/lexer.l"  -#line 1120 "src/lexer.c"+#line 1119 "src/lexer.c"  	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */ 		{@@ -1143,13 +1143,13 @@ yy_match: 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 				{ 				yy_current_state = (int) yy_def[yy_current_state];-				if ( yy_current_state >= 171 )+				if ( yy_current_state >= 168 ) 					yy_c = yy_meta[yy_c]; 				} 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; 			++yy_cp; 			}-		while ( yy_base[yy_current_state] != 341 );+		while ( yy_base[yy_current_state] != 339 );  yy_find_action: 		yy_act = yy_accept[yy_current_state];@@ -1359,69 +1359,64 @@ YY_RULE_SETUP case 36: YY_RULE_SETUP #line 80 "src/lexer.l"-{ return ALTERNATION; }-	YY_BREAK-case 37:-YY_RULE_SETUP-#line 81 "src/lexer.l" { return yytext[0];} 	YY_BREAK-case 38:+case 37: YY_RULE_SETUP-#line 83 "src/lexer.l"+#line 82 "src/lexer.l" {   return enter(yytext[0], YY_START, yyscanner); } 	YY_BREAK-case 39:+case 38: YY_RULE_SETUP-#line 87 "src/lexer.l"+#line 86 "src/lexer.l" {   return try_exit(yytext[0], YY_START, yyscanner); } 	YY_BREAK-case 40:+case 39: YY_RULE_SETUP-#line 91 "src/lexer.l"+#line 90 "src/lexer.l" {   yylval->literal = jv_string_sized(yytext + 1, yyleng - 1); return FORMAT; } 	YY_BREAK-case 41:+case 40: YY_RULE_SETUP-#line 95 "src/lexer.l"+#line 94 "src/lexer.l" {    yylval->literal = jv_parse_sized(yytext, yyleng); return LITERAL; } 	YY_BREAK-case 42:+case 41: YY_RULE_SETUP-#line 99 "src/lexer.l"+#line 98 "src/lexer.l" {   yy_push_state(IN_QQSTRING, yyscanner);   return QQSTRING_START; } 	YY_BREAK -case 43:+case 42: YY_RULE_SETUP-#line 105 "src/lexer.l"+#line 104 "src/lexer.l" {     return enter(QQSTRING_INTERP_START, YY_START, yyscanner);   } 	YY_BREAK-case 44:+case 43: YY_RULE_SETUP-#line 108 "src/lexer.l"+#line 107 "src/lexer.l" {     yy_pop_state(yyscanner);     return QQSTRING_END;   } 	YY_BREAK-case 45:-/* rule 45 can match eol */+case 44:+/* rule 44 can match eol */ YY_RULE_SETUP-#line 112 "src/lexer.l"+#line 111 "src/lexer.l" {     /* pass escapes to the json parser */     jv escapes = jv_string_fmt("\"%.*s\"", (int)yyleng, yytext);@@ -1430,55 +1425,55 @@ YY_RULE_SETUP     return QQSTRING_TEXT;   } 	YY_BREAK-case 46:-/* rule 46 can match eol */+case 45:+/* rule 45 can match eol */ YY_RULE_SETUP-#line 119 "src/lexer.l"+#line 118 "src/lexer.l" {     yylval->literal = jv_string_sized(yytext, yyleng);     return QQSTRING_TEXT;   } 	YY_BREAK-case 47:+case 46: YY_RULE_SETUP-#line 123 "src/lexer.l"+#line 122 "src/lexer.l" {     return INVALID_CHARACTER;   } 	YY_BREAK -case 48:+case 47: YY_RULE_SETUP-#line 129 "src/lexer.l"+#line 128 "src/lexer.l" { yylval->literal = jv_string(yytext); return IDENT;} 	YY_BREAK-case 49:+case 48: YY_RULE_SETUP-#line 130 "src/lexer.l"+#line 129 "src/lexer.l" { yylval->literal = jv_string(yytext+1); return FIELD;} 	YY_BREAK-case 50:+case 49: YY_RULE_SETUP-#line 131 "src/lexer.l"+#line 130 "src/lexer.l" { yylval->literal = jv_string(yytext+1); return BINDING;} 	YY_BREAK-case 51:-/* rule 51 can match eol */+case 50:+/* rule 50 can match eol */ YY_RULE_SETUP-#line 133 "src/lexer.l"+#line 132 "src/lexer.l" {} 	YY_BREAK-case 52:+case 51: YY_RULE_SETUP-#line 135 "src/lexer.l"+#line 134 "src/lexer.l" { return INVALID_CHARACTER; } 	YY_BREAK-case 53:+case 52: YY_RULE_SETUP-#line 137 "src/lexer.l"+#line 136 "src/lexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); 	YY_BREAK-#line 1482 "src/lexer.c"+#line 1476 "src/lexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(IN_PAREN): case YY_STATE_EOF(IN_BRACKET):@@ -1782,7 +1777,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 			{ 			yy_current_state = (int) yy_def[yy_current_state];-			if ( yy_current_state >= 171 )+			if ( yy_current_state >= 168 ) 				yy_c = yy_meta[yy_c]; 			} 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];@@ -1811,11 +1806,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 		{ 		yy_current_state = (int) yy_def[yy_current_state];-		if ( yy_current_state >= 171 )+		if ( yy_current_state >= 168 ) 			yy_c = yy_meta[yy_c]; 		} 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];-	yy_is_jam = (yy_current_state == 170);+	yy_is_jam = (yy_current_state == 167);  	(void)yyg; 	return yy_is_jam ? 0 : yy_current_state;@@ -2650,7 +2645,7 @@ static int yy_flex_strlen (const char * s , yyscan_t yyscanner)  #define YYTABLES_NAME "yytables" -#line 137 "src/lexer.l"+#line 136 "src/lexer.l"  /* perhaps these should be calls... */ /*

src/lexer.h

@@ -2,9 +2,9 @@ #define jq_yyHEADER_H 1 #define jq_yyIN_HEADER 1 -#line 6 "src/lexer.h"+#line 5 "src/lexer.h" -#line 8 "src/lexer.h"+#line 7 "src/lexer.h"  #define  YY_INT_ALIGNED short int @@ -732,9 +732,9 @@ extern int yylex \ #undef yyTABLES_NAME #endif -#line 137 "src/lexer.l"+#line 136 "src/lexer.l"  -#line 739 "src/lexer.h"+#line 738 "src/lexer.h" #undef jq_yyIN_HEADER #endif /* jq_yyHEADER_H */

src/lexer.l

@@ -77,7 +77,6 @@ struct lexer_param; "<=" { return LESSEQ; } ">=" { return GREATEREQ; } ".." { return REC; }-"?//" { return ALTERNATION; } "."|"?"|"="|";"|","|":"|"|"|"+"|"-"|"*"|"/"|"%"|"\$"|"<"|">" { return yytext[0];}  "["|"{"|"(" {

src/parser.c

@@ -180,14 +180,13 @@ struct lexer_param;     SETDEFINEDOR = 293,            /* "//="  */     LESSEQ = 294,                  /* "<="  */     GREATEREQ = 295,               /* ">="  */-    ALTERNATION = 296,             /* "?//"  */-    QQSTRING_START = 297,          /* QQSTRING_START  */-    QQSTRING_TEXT = 298,           /* QQSTRING_TEXT  */-    QQSTRING_INTERP_START = 299,   /* QQSTRING_INTERP_START  */-    QQSTRING_INTERP_END = 300,     /* QQSTRING_INTERP_END  */-    QQSTRING_END = 301,            /* QQSTRING_END  */-    FUNCDEF = 302,                 /* FUNCDEF  */-    NONOPT = 303                   /* NONOPT  */+    QQSTRING_START = 296,          /* QQSTRING_START  */+    QQSTRING_TEXT = 297,           /* QQSTRING_TEXT  */+    QQSTRING_INTERP_START = 298,   /* QQSTRING_INTERP_START  */+    QQSTRING_INTERP_END = 299,     /* QQSTRING_INTERP_END  */+    QQSTRING_END = 300,            /* QQSTRING_END  */+    FUNCDEF = 301,                 /* FUNCDEF  */+    NONOPT = 302                   /* NONOPT  */   };   typedef enum yytokentype yytoken_kind_t; #endif@@ -234,14 +233,13 @@ struct lexer_param; #define SETDEFINEDOR 293 #define LESSEQ 294 #define GREATEREQ 295-#define ALTERNATION 296-#define QQSTRING_START 297-#define QQSTRING_TEXT 298-#define QQSTRING_INTERP_START 299-#define QQSTRING_INTERP_END 300-#define QQSTRING_END 301-#define FUNCDEF 302-#define NONOPT 303+#define QQSTRING_START 296+#define QQSTRING_TEXT 297+#define QQSTRING_INTERP_START 298+#define QQSTRING_INTERP_END 299+#define QQSTRING_END 300+#define FUNCDEF 301+#define NONOPT 302  /* Value type.  */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED@@ -252,7 +250,7 @@ union YYSTYPE   jv literal;   block blk; -#line 256 "src/parser.c"+#line 254 "src/parser.c"  }; typedef union YYSTYPE YYSTYPE;@@ -326,71 +324,70 @@ enum yysymbol_kind_t   YYSYMBOL_SETDEFINEDOR = 38,              /* "//="  */   YYSYMBOL_LESSEQ = 39,                    /* "<="  */   YYSYMBOL_GREATEREQ = 40,                 /* ">="  */-  YYSYMBOL_ALTERNATION = 41,               /* "?//"  */-  YYSYMBOL_QQSTRING_START = 42,            /* QQSTRING_START  */-  YYSYMBOL_QQSTRING_TEXT = 43,             /* QQSTRING_TEXT  */-  YYSYMBOL_QQSTRING_INTERP_START = 44,     /* QQSTRING_INTERP_START  */-  YYSYMBOL_QQSTRING_INTERP_END = 45,       /* QQSTRING_INTERP_END  */-  YYSYMBOL_QQSTRING_END = 46,              /* QQSTRING_END  */-  YYSYMBOL_FUNCDEF = 47,                   /* FUNCDEF  */-  YYSYMBOL_48_ = 48,                       /* '|'  */-  YYSYMBOL_49_ = 49,                       /* ','  */-  YYSYMBOL_50_ = 50,                       /* '='  */-  YYSYMBOL_51_ = 51,                       /* '<'  */-  YYSYMBOL_52_ = 52,                       /* '>'  */-  YYSYMBOL_53_ = 53,                       /* '+'  */-  YYSYMBOL_54_ = 54,                       /* '-'  */-  YYSYMBOL_55_ = 55,                       /* '*'  */-  YYSYMBOL_56_ = 56,                       /* '/'  */-  YYSYMBOL_57_ = 57,                       /* '%'  */-  YYSYMBOL_NONOPT = 58,                    /* NONOPT  */-  YYSYMBOL_59_ = 59,                       /* '?'  */-  YYSYMBOL_60_ = 60,                       /* '.'  */-  YYSYMBOL_61_ = 61,                       /* '['  */-  YYSYMBOL_62_ = 62,                       /* ';'  */-  YYSYMBOL_63_ = 63,                       /* ':'  */-  YYSYMBOL_64_ = 64,                       /* '('  */-  YYSYMBOL_65_ = 65,                       /* ')'  */-  YYSYMBOL_66_ = 66,                       /* ']'  */-  YYSYMBOL_67_ = 67,                       /* '{'  */-  YYSYMBOL_68_ = 68,                       /* '}'  */-  YYSYMBOL_69_ = 69,                       /* '$'  */-  YYSYMBOL_YYACCEPT = 70,                  /* $accept  */-  YYSYMBOL_TopLevel = 71,                  /* TopLevel  */-  YYSYMBOL_Module = 72,                    /* Module  */-  YYSYMBOL_Imports = 73,                   /* Imports  */-  YYSYMBOL_FuncDefs = 74,                  /* FuncDefs  */-  YYSYMBOL_Query = 75,                     /* Query  */-  YYSYMBOL_Expr = 76,                      /* Expr  */-  YYSYMBOL_Import = 77,                    /* Import  */-  YYSYMBOL_ImportWhat = 78,                /* ImportWhat  */-  YYSYMBOL_ImportFrom = 79,                /* ImportFrom  */-  YYSYMBOL_FuncDef = 80,                   /* FuncDef  */-  YYSYMBOL_Params = 81,                    /* Params  */-  YYSYMBOL_Param = 82,                     /* Param  */-  YYSYMBOL_StringStart = 83,               /* StringStart  */-  YYSYMBOL_String = 84,                    /* String  */-  YYSYMBOL_QQString = 85,                  /* QQString  */-  YYSYMBOL_ElseBody = 86,                  /* ElseBody  */-  YYSYMBOL_Term = 87,                      /* Term  */-  YYSYMBOL_Args = 88,                      /* Args  */-  YYSYMBOL_Arg = 89,                       /* Arg  */-  YYSYMBOL_RepPatterns = 90,               /* RepPatterns  */-  YYSYMBOL_Patterns = 91,                  /* Patterns  */-  YYSYMBOL_Pattern = 92,                   /* Pattern  */-  YYSYMBOL_ArrayPats = 93,                 /* ArrayPats  */-  YYSYMBOL_ObjPats = 94,                   /* ObjPats  */-  YYSYMBOL_ObjPat = 95,                    /* ObjPat  */-  YYSYMBOL_Keyword = 96,                   /* Keyword  */-  YYSYMBOL_DictPairs = 97,                 /* DictPairs  */-  YYSYMBOL_DictPair = 98,                  /* DictPair  */-  YYSYMBOL_DictExpr = 99                   /* DictExpr  */+  YYSYMBOL_QQSTRING_START = 41,            /* QQSTRING_START  */+  YYSYMBOL_QQSTRING_TEXT = 42,             /* QQSTRING_TEXT  */+  YYSYMBOL_QQSTRING_INTERP_START = 43,     /* QQSTRING_INTERP_START  */+  YYSYMBOL_QQSTRING_INTERP_END = 44,       /* QQSTRING_INTERP_END  */+  YYSYMBOL_QQSTRING_END = 45,              /* QQSTRING_END  */+  YYSYMBOL_FUNCDEF = 46,                   /* FUNCDEF  */+  YYSYMBOL_47_ = 47,                       /* '|'  */+  YYSYMBOL_48_ = 48,                       /* ','  */+  YYSYMBOL_49_ = 49,                       /* '='  */+  YYSYMBOL_50_ = 50,                       /* '<'  */+  YYSYMBOL_51_ = 51,                       /* '>'  */+  YYSYMBOL_52_ = 52,                       /* '+'  */+  YYSYMBOL_53_ = 53,                       /* '-'  */+  YYSYMBOL_54_ = 54,                       /* '*'  */+  YYSYMBOL_55_ = 55,                       /* '/'  */+  YYSYMBOL_56_ = 56,                       /* '%'  */+  YYSYMBOL_NONOPT = 57,                    /* NONOPT  */+  YYSYMBOL_58_ = 58,                       /* '?'  */+  YYSYMBOL_59_ = 59,                       /* '.'  */+  YYSYMBOL_60_ = 60,                       /* '['  */+  YYSYMBOL_61_ = 61,                       /* ';'  */+  YYSYMBOL_62_ = 62,                       /* ':'  */+  YYSYMBOL_63_ = 63,                       /* '('  */+  YYSYMBOL_64_ = 64,                       /* ')'  */+  YYSYMBOL_65_ = 65,                       /* ']'  */+  YYSYMBOL_66_ = 66,                       /* '{'  */+  YYSYMBOL_67_ = 67,                       /* '}'  */+  YYSYMBOL_68_ = 68,                       /* '$'  */+  YYSYMBOL_YYACCEPT = 69,                  /* $accept  */+  YYSYMBOL_TopLevel = 70,                  /* TopLevel  */+  YYSYMBOL_Module = 71,                    /* Module  */+  YYSYMBOL_Imports = 72,                   /* Imports  */+  YYSYMBOL_FuncDefs = 73,                  /* FuncDefs  */+  YYSYMBOL_Query = 74,                     /* Query  */+  YYSYMBOL_Expr = 75,                      /* Expr  */+  YYSYMBOL_Import = 76,                    /* Import  */+  YYSYMBOL_ImportWhat = 77,                /* ImportWhat  */+  YYSYMBOL_ImportFrom = 78,                /* ImportFrom  */+  YYSYMBOL_FuncDef = 79,                   /* FuncDef  */+  YYSYMBOL_Params = 80,                    /* Params  */+  YYSYMBOL_Param = 81,                     /* Param  */+  YYSYMBOL_StringStart = 82,               /* StringStart  */+  YYSYMBOL_String = 83,                    /* String  */+  YYSYMBOL_QQString = 84,                  /* QQString  */+  YYSYMBOL_ElseBody = 85,                  /* ElseBody  */+  YYSYMBOL_Term = 86,                      /* Term  */+  YYSYMBOL_Args = 87,                      /* Args  */+  YYSYMBOL_Arg = 88,                       /* Arg  */+  YYSYMBOL_RepPatterns = 89,               /* RepPatterns  */+  YYSYMBOL_Patterns = 90,                  /* Patterns  */+  YYSYMBOL_Pattern = 91,                   /* Pattern  */+  YYSYMBOL_ArrayPats = 92,                 /* ArrayPats  */+  YYSYMBOL_ObjPats = 93,                   /* ObjPats  */+  YYSYMBOL_ObjPat = 94,                    /* ObjPat  */+  YYSYMBOL_Keyword = 95,                   /* Keyword  */+  YYSYMBOL_DictPairs = 96,                 /* DictPairs  */+  YYSYMBOL_DictPair = 97,                  /* DictPair  */+  YYSYMBOL_DictExpr = 98                   /* DictExpr  */ }; typedef enum yysymbol_kind_t yysymbol_kind_t;   /* Second part of user prologue.  */-#line 127 "src/parser.y"+#line 126 "src/parser.y"  #include "lexer.h" struct lexer_param {@@ -543,7 +540,7 @@ static block gen_loc_object(location *loc, struct locfile *locations) { }  -#line 547 "src/parser.c"+#line 544 "src/parser.c"   #ifdef short@@ -870,19 +867,19 @@ union yyalloc /* YYFINAL -- State number of the termination state.  */ #define YYFINAL  31 /* YYLAST -- Last index in YYTABLE.  */-#define YYLAST   1226+#define YYLAST   1165  /* YYNTOKENS -- Number of terminals.  */-#define YYNTOKENS  70+#define YYNTOKENS  69 /* YYNNTS -- Number of nonterminals.  */ #define YYNNTS  30 /* YYNRULES -- Number of rules.  */ #define YYNRULES  168 /* YYNSTATES -- Number of states.  */-#define YYNSTATES  312+#define YYNSTATES  313  /* YYMAXUTOK -- Last valid token kind.  */-#define YYMAXUTOK   303+#define YYMAXUTOK   302   /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM@@ -899,16 +896,16 @@ static const yytype_int8 yytranslate[] =        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,-       2,     2,     2,     2,     2,     2,    69,    57,     2,     2,-      64,    65,    55,    53,    49,    54,    60,    56,     2,     2,-       2,     2,     2,     2,     2,     2,     2,     2,    63,    62,-      51,    50,    52,    59,     2,     2,     2,     2,     2,     2,+       2,     2,     2,     2,     2,     2,    68,    56,     2,     2,+      63,    64,    54,    52,    48,    53,    59,    55,     2,     2,+       2,     2,     2,     2,     2,     2,     2,     2,    62,    61,+      50,    49,    51,    58,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,-       2,    61,     2,    66,     2,     2,     2,     2,     2,     2,+       2,    60,     2,    65,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,-       2,     2,     2,    67,    48,    68,     2,     2,     2,     2,+       2,     2,     2,    66,    47,    67,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,@@ -926,30 +923,30 @@ static const yytype_int8 yytranslate[] =       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,-      45,    46,    47,    58+      45,    46,    57 };  #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */ static const yytype_int16 yyrline[] = {-       0,   282,   282,   285,   290,   293,   308,   311,   316,   319,-     325,   328,   331,   337,   340,   343,   349,   352,   355,   358,-     361,   364,   367,   370,   373,   376,   379,   382,   385,   388,-     391,   394,   397,   400,   403,   406,   409,   412,   415,   421,-     424,   441,   445,   449,   455,   466,   471,   477,   480,   485,-     489,   496,   499,   505,   512,   515,   518,   524,   527,   530,-     536,   539,   542,   550,   554,   557,   560,   563,   566,   569,-     572,   575,   578,   582,   588,   591,   594,   597,   600,   603,-     606,   609,   612,   615,   618,   621,   624,   627,   630,   633,-     636,   639,   642,   645,   648,   651,   654,   661,   664,   667,-     670,   673,   677,   680,   684,   702,   706,   710,   713,   725,-     730,   731,   732,   733,   736,   739,   744,   749,   752,   757,-     760,   765,   769,   772,   777,   780,   785,   788,   793,   796,-     799,   802,   805,   808,   816,   822,   825,   828,   831,   834,-     837,   840,   843,   846,   849,   852,   855,   858,   861,   864,-     867,   870,   873,   879,   882,   885,   890,   893,   896,   899,-     903,   908,   912,   916,   920,   924,   932,   938,   941+       0,   281,   281,   284,   289,   292,   307,   310,   315,   318,+     324,   327,   330,   336,   339,   342,   348,   351,   354,   357,+     360,   363,   366,   369,   372,   375,   378,   381,   384,   387,+     390,   393,   396,   399,   402,   405,   408,   411,   414,   420,+     423,   440,   444,   448,   454,   465,   470,   476,   479,   484,+     488,   495,   498,   504,   511,   514,   517,   523,   526,   529,+     535,   538,   541,   549,   553,   556,   559,   562,   565,   568,+     571,   574,   577,   581,   587,   590,   593,   596,   599,   602,+     605,   608,   611,   614,   617,   620,   623,   626,   629,   632,+     635,   638,   641,   644,   647,   650,   653,   660,   663,   666,+     669,   672,   676,   679,   683,   701,   705,   709,   712,   724,+     729,   730,   731,   732,   735,   738,   743,   748,   751,   756,+     759,   764,   768,   771,   776,   779,   784,   787,   792,   795,+     798,   801,   804,   807,   815,   821,   824,   827,   830,   833,+     836,   839,   842,   845,   848,   851,   854,   857,   860,   863,+     866,   869,   872,   878,   881,   884,   889,   892,   895,   898,+     902,   907,   911,   915,   919,   923,   931,   937,   940 }; #endif @@ -972,16 +969,15 @@ static const char *const yytname[] =   "\"elif\"", "\"reduce\"", "\"foreach\"", "\"end\"", "\"and\"", "\"or\"",   "\"try\"", "\"catch\"", "\"label\"", "\"break\"", "\"$__loc__\"",   "\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"//=\"", "\"<=\"",-  "\">=\"", "\"?//\"", "QQSTRING_START", "QQSTRING_TEXT",-  "QQSTRING_INTERP_START", "QQSTRING_INTERP_END", "QQSTRING_END",-  "FUNCDEF", "'|'", "','", "'='", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",-  "'%'", "NONOPT", "'?'", "'.'", "'['", "';'", "':'", "'('", "')'", "']'",-  "'{'", "'}'", "'$'", "$accept", "TopLevel", "Module", "Imports",-  "FuncDefs", "Query", "Expr", "Import", "ImportWhat", "ImportFrom",-  "FuncDef", "Params", "Param", "StringStart", "String", "QQString",-  "ElseBody", "Term", "Args", "Arg", "RepPatterns", "Patterns", "Pattern",-  "ArrayPats", "ObjPats", "ObjPat", "Keyword", "DictPairs", "DictPair",-  "DictExpr", YY_NULLPTR+  "\">=\"", "QQSTRING_START", "QQSTRING_TEXT", "QQSTRING_INTERP_START",+  "QQSTRING_INTERP_END", "QQSTRING_END", "FUNCDEF", "'|'", "','", "'='",+  "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "NONOPT", "'?'", "'.'",+  "'['", "';'", "':'", "'('", "')'", "']'", "'{'", "'}'", "'$'", "$accept",+  "TopLevel", "Module", "Imports", "FuncDefs", "Query", "Expr", "Import",+  "ImportWhat", "ImportFrom", "FuncDef", "Params", "Param", "StringStart",+  "String", "QQString", "ElseBody", "Term", "Args", "Arg", "RepPatterns",+  "Patterns", "Pattern", "ArrayPats", "ObjPats", "ObjPat", "Keyword",+  "DictPairs", "DictPair", "DictExpr", YY_NULLPTR };  static const char *@@ -1005,38 +1001,38 @@ yysymbol_name (yysymbol_kind_t yysymbol)    STATE-NUM.  */ static const yytype_int16 yypact[] = {-      31,   890,    44,    35,    11,     9,  -146,  -146,    38,  -146,-      85,   890,   956,   956,   956,   112,    26,  -146,  -146,   956,-     279,   345,   412,   608,    59,    25,  1040,   890,  -146,  -146,-      -2,  -146,     4,     4,   890,    35,   692,   890,  -146,  -146,-      20,   -18,  1073,  1105,   131,    86,  -146,  -146,    -2,  -146,-     164,    38,   108,   107,  -146,    22,   104,     0,   -34,   121,-     124,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,+      43,   882,    63,    -6,    82,    84,  -146,  -146,   120,  -146,+     147,   882,   947,   947,   947,   188,    72,  -146,  -146,   947,+     280,   345,   411,   604,   137,   -30,   985,   882,  -146,  -146,+       2,  -146,    31,    31,   882,    -6,   687,   882,  -146,  -146,+      12,   105,  1016,  1047,   177,   165,  -146,  -146,     2,  -146,+     212,   120,   175,   158,  -146,    23,   172,   132,    81,   180,+     190,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,     -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,  -146,-     890,   135,   137,   134,   126,   141,   890,   890,  -146,   956,-     956,   956,   956,    -5,   956,   956,   956,   956,   956,   956,-     956,   956,   956,   956,   956,   956,   956,   956,   956,   956,-     956,   956,    84,   177,   147,  -146,     3,   173,   199,  -146,-    -146,  -146,    84,   890,  -146,  -146,   114,    84,    77,  -146,-     890,    13,   479,    -5,    -5,   546,   890,  -146,  -146,  -146,-    -146,  -146,  -146,   956,  -146,   956,   956,    78,   956,   956,-    -146,   663,   220,    84,  -146,  1169,   505,   505,  1137,  -146,-      -5,  1018,   187,   166,   188,   606,   205,  1169,  1169,  1169,-    1169,  1169,  1169,   505,   505,  1169,   505,   505,   208,   208,-    -146,  -146,  -146,  -146,   890,  -146,  -146,   758,   176,   175,-     890,   184,     6,    57,  -146,  -146,   890,  -146,   123,  -146,-    -146,    83,  -146,  -146,    18,   185,   189,  -146,  -146,    84,-    1137,   200,   200,   200,   203,   200,   200,   206,  -146,  -146,-    -146,   -42,   207,   209,   210,   890,   212,   -45,  -146,   213,-      -5,   890,    33,   193,    28,  -146,  -146,    71,  -146,   824,-     218,  -146,  -146,  -146,  -146,    13,   215,   890,   890,  -146,-    -146,   890,   890,   956,   956,    -5,  -146,    -5,    -5,    -5,-     103,    -5,  1018,  -146,    -5,   227,    84,  -146,  -146,   222,-     223,   226,    74,  -146,  -146,   890,    -7,     2,   160,   163,-     200,   200,  -146,  -146,  -146,  -146,   225,  -146,  -146,  -146,-    -146,  -146,  -146,   235,   170,  -146,   890,   890,   890,    -5,-    -146,  -146,    18,   105,    76,  -146,  -146,  -146,   890,  -146,-     142,  -146+     882,   194,   195,   174,   218,   204,   882,   882,  -146,   947,+     947,   947,   947,    -2,   947,   947,   947,   947,   947,   947,+     947,   947,   947,   947,   947,   947,   947,   947,   947,   947,+     947,   947,    71,   228,   220,  -146,    79,   169,   262,  -146,+    -146,  -146,    71,   882,  -146,  -146,    21,    71,    20,  -146,+     882,   181,   477,    -2,    -2,   543,   882,  -146,  -146,  -146,+    -146,  -146,  -146,   947,  -146,   947,   947,   134,   947,   947,+    -146,   658,   273,    71,  -146,  1109,   209,   209,  1078,  -146,+      -2,    26,   225,   239,   229,   602,   907,  1109,  1109,  1109,+    1109,  1109,  1109,   209,   209,  1109,   209,   209,   162,   162,+    -146,  -146,  -146,  -146,   882,  -146,  -146,   752,   231,   230,+     882,   241,    18,   271,  -146,  -146,   882,  -146,   110,  -146,+    -146,   101,  -146,  -146,   116,   240,   247,  -146,  -146,    71,+    1078,   257,   257,   257,   249,   257,   257,   250,  -146,  -146,+    -146,   -46,   260,   261,   263,   882,   264,   -45,  -146,   275,+     330,   882,   167,   290,    29,  -146,  -146,    75,  -146,   817,+     297,  -146,  -146,  -146,  -146,   181,   294,   882,   882,  -146,+    -146,   882,   882,   947,   947,    -2,  -146,    -2,    -2,    -2,+     155,    -2,    26,  -146,    -2,    -2,    71,  -146,  -146,   299,+     300,   301,   107,  -146,  -146,   882,   -24,   112,   192,   197,+     257,   257,  -146,  -146,  -146,  -146,   303,  -146,  -146,  -146,+     304,  -146,  -146,  -146,   305,   221,  -146,   882,   882,   882,+      -2,  -146,  -146,   116,   161,   143,  -146,  -146,  -146,   882,+    -146,   179,  -146 };  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.@@ -1070,20 +1066,20 @@ static const yytype_uint8 yydefact[] =        0,     0,     0,    81,     0,    66,   112,     0,    78,     0,       75,    42,    41,   115,    45,     0,     0,     0,     0,    59,      100,     0,     0,     0,     0,     0,   122,     0,     0,     0,-       0,     0,     0,   123,     0,   119,    11,    56,    80,    77,+       0,     0,     0,   123,     0,     0,    11,    56,    80,    77,       87,    86,     0,    74,    48,     0,     0,     0,     0,     0,      167,   165,   125,   134,   130,   129,     0,   132,   127,   131,-      76,    84,    83,    85,     0,    58,     0,     0,     0,     0,-      82,    46,     0,     0,     0,   133,    57,    97,     0,    99,-       0,    98+     119,    76,    84,    83,    85,     0,    58,     0,     0,     0,+       0,    82,    46,     0,     0,     0,   133,    57,    97,     0,+      99,     0,    98 };  /* YYPGOTO[NTERM-NUM].  */ static const yytype_int16 yypgoto[] = {-    -146,  -146,  -146,   236,   179,    -1,     1,  -146,  -146,   253,-      -8,  -146,    53,  -146,     5,  -146,     7,   284,  -146,   115,-    -146,    60,  -100,  -146,  -146,    48,  -145,   169,  -146,  -140+    -146,  -146,  -146,   326,   243,    -1,     1,  -146,  -146,   334,+      -8,  -146,   125,  -146,     5,  -146,    68,   353,  -146,   178,+    -146,    34,  -131,  -146,  -146,   117,  -145,   227,  -146,  -140 };  /* YYDEFGOTO[NTERM-NUM].  */@@ -1099,316 +1095,304 @@ static const yytype_uint8 yydefgoto[] =    number is the opposite.  If YYTABLE_NINF, syntax error.  */ static const yytype_int16 yytable[] = {-      25,   159,   132,   114,   262,   212,   213,   255,   215,   216,-      41,    51,    51,    42,    43,    44,   229,   199,   295,   200,-      55,    57,   296,   263,   256,    52,   123,    46,    81,   143,-      86,    87,    47,   122,   144,   126,   127,   119,   119,   247,-     248,    86,    87,   249,    31,    18,    18,     1,    86,    87,-      86,    87,    32,    33,    86,    87,   160,   115,   116,   117,-     220,   241,   161,   242,   187,   142,    86,    87,    38,   239,-      86,    87,   240,    86,    87,    37,    86,    87,   267,   147,-      39,    86,    87,   130,   131,   153,   154,    88,   140,    40,+      25,   296,   255,   262,   159,   212,   213,   114,   215,   216,+      41,    32,    33,    42,    43,    44,   229,    86,    87,   256,+      55,    57,   263,    86,    87,    52,   123,   222,    81,   220,+     223,    88,   224,   122,    51,   126,   127,   119,   119,    51,+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,+      71,    72,    73,    74,    75,    76,    77,    78,   160,     1,+     115,   116,   117,    31,   161,    86,    87,    18,    86,    87,+      86,    87,    18,    46,   130,   131,    86,    87,    47,   147,+     239,   196,   195,   240,   197,   153,   154,    51,   140,   225,      155,   156,   157,   158,   269,   165,   166,   167,   168,   169,      170,   171,   172,   173,   174,   175,   176,   177,   178,   179,-     180,   181,   182,   280,   281,   123,   192,   229,    45,    86,-      87,   188,    86,    87,    86,    87,    86,    87,    85,   198,-     265,   204,    86,    87,   136,   209,   208,   270,   308,   196,-     293,   309,   197,   214,   210,   245,   210,   210,   246,   210,-     210,    86,    87,    86,    87,   282,    81,   283,   284,   285,-     135,   287,    86,    87,   289,   137,   226,   138,   286,   141,-     307,    86,    87,   139,   189,   151,   195,     4,     5,     6,-       7,     8,     9,   232,   145,   244,   234,   146,    10,   237,-      86,    87,    11,   205,   206,   127,    12,    13,   148,   305,-     149,    14,   150,    15,    16,    17,   186,   311,    86,    87,-     152,    86,    87,   193,   231,    18,    90,    91,    86,    87,-     183,   184,   297,   185,   260,   298,   219,    19,   230,  -118,-     266,    94,   301,    20,    21,   235,   190,    22,   272,   191,-      23,   236,    24,   238,   102,   103,   276,   277,   253,   251,-     278,   279,   268,   252,   210,   210,   105,   106,   107,   108,-     109,   110,   111,   109,   110,   111,   254,   226,  -117,   143,-     257,   124,   258,   259,   294,   261,   264,   273,   275,   -60,-      49,   290,   291,    50,   -60,   292,   120,    51,   299,   -60,-     -60,   -60,   -60,   -60,   300,   302,   303,   304,   274,   -60,-     -60,   -60,   194,    48,   -60,   -60,   -60,   310,   -60,   306,-     288,   243,   -60,   -60,   -60,   -60,   -60,   -60,   -60,   -60,-     218,    18,     0,     0,   -60,     0,     0,   -60,   -60,   -60,-     -60,   -60,   -60,   -60,   -60,   -60,   -60,     0,   -60,   -60,-     -60,   -60,   -60,     0,   -60,   -60,    53,   -60,     0,     4,-       5,     6,     7,     8,     9,     0,     0,     0,     0,     0,-      10,     0,     0,     0,    11,     0,     0,     0,    12,    13,-       0,     0,     0,    14,     0,    15,    16,    17,     0,     0,-       0,     0,     0,     0,     0,     0,     0,    18,     0,     0,-       0,     0,     0,     0,     0,     0,     0,     0,     0,    19,-       0,     0,     0,     0,     0,    20,    21,     0,     0,    22,-       0,    54,    23,    56,    24,     0,     4,     5,     6,     7,-       8,     9,     0,     0,     0,     0,     0,    10,     0,     0,-       0,    11,     0,     0,     0,    12,    13,     0,     0,     0,-      14,     0,    15,    16,    17,     0,     0,     0,     0,     0,-       0,     0,     0,     0,    18,     0,     0,     0,     0,     0,-       0,     0,     0,     0,     0,     0,    19,     0,     0,     0,-       0,     0,    20,    21,     0,     0,    22,     0,     0,    23,-     203,    24,     0,     4,     5,     6,     7,     8,     9,     0,-       0,     0,     0,     0,    10,     0,     0,     0,    11,     0,-       0,     0,    12,    13,     0,     0,     0,    14,     0,    15,-      16,    17,     0,     0,     0,     0,  -154,  -154,     0,     0,-       0,    18,     0,     0,     0,     0,     0,     0,     0,     0,-       0,     0,     0,    19,     0,     0,     0,     0,     0,    20,-      21,     0,     0,    22,  -154,  -154,    23,   207,    24,     0,-       4,     5,     6,     7,     8,     9,  -154,  -154,   107,   108,-     109,   110,   111,     0,     0,    11,     0,     0,     0,    12,-      13,     0,     0,     0,    14,     0,     0,    16,    17,     0,-       0,     0,     0,     0,     0,     0,     0,     0,    18,     0,-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,-      19,     0,     0,     0,     0,     0,    20,    21,     0,    58,-      22,     0,    59,    23,    60,    24,    51,    90,    91,     0,-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,-      79,     0,     0,     0,     0,   102,   103,     0,     0,     0,-      18,     0,     0,     0,     0,     0,     0,   105,   106,   107,-     108,   109,   110,   111,   217,     0,     0,    59,     0,    60,-       0,    51,    80,     0,     0,     0,  -153,    61,    62,    63,-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,-      74,    75,    76,    77,    78,    79,     4,     5,     6,     7,-       8,     9,     0,     0,     0,    18,     0,    10,     0,     0,-       0,    11,     0,     0,     0,    12,    13,     0,     0,     0,-      14,     0,    15,    16,    17,     0,     0,    80,     0,     0,-       0,  -153,     0,     0,    18,     0,     0,     0,     0,     0,-       0,     0,     0,     0,     0,     0,    19,     0,     0,     0,-       0,     0,    20,    21,   125,     0,    22,     0,     0,    23,-       0,    24,     4,     5,     6,     7,     8,     9,     0,     0,-       0,     0,     0,    10,     0,     0,     0,    11,     0,     0,-       0,    12,    13,     0,     0,     0,    14,     0,    15,    16,-      17,     0,     0,     0,     0,     0,     0,     0,     0,     0,-      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,-       0,     0,    19,     0,     0,     0,     0,     0,    20,    21,-       0,     0,    22,     0,   233,    23,     0,    24,     4,     5,-       6,     7,     8,     9,     0,     0,     0,     0,     0,    10,-       0,     0,     0,    11,     0,     0,     0,    12,    13,     0,-       0,     0,    14,     0,    15,    16,    17,     0,     0,     0,+     180,   181,   182,   280,   281,   123,   192,   229,    86,    87,+      18,   188,    86,    87,   282,   132,   283,   284,   285,   198,+     287,   204,   297,   289,   290,   209,   208,   247,   248,   187,+     270,   249,    38,   143,   210,    37,   210,   210,   144,   210,+     210,    40,    86,    87,    86,    87,    81,    86,    87,    86,+      87,    39,   245,    86,    87,   246,   226,   205,   206,   306,+     189,   244,   294,     4,     5,     6,     7,     8,     9,    86,+      87,    86,    87,   232,    10,   199,   234,   200,    11,   237,+      86,    87,    12,    13,    45,   127,   142,    14,   214,    15,+      16,    17,    86,    87,   309,    85,   135,   310,    86,    87,+      18,   267,   136,   137,    86,    87,   109,   110,   111,   286,+    -154,  -154,    19,   139,   260,   308,    86,    87,    20,    21,+     266,   190,    22,   138,   191,    23,   141,    24,   272,    86,+      87,   150,   145,   312,    86,    87,   276,   277,  -154,  -154,+     278,   279,   146,   298,   210,   210,   148,   149,   299,  -154,+    -154,   107,   108,   109,   110,   111,   151,   226,    86,    87,+     183,   184,   152,   185,   295,   241,   193,   242,   186,   219,+     -60,    49,   302,   230,    50,   -60,   231,  -118,    51,   235,+     -60,   -60,   -60,   -60,   -60,   236,   303,   304,   305,   238,+     -60,   -60,   -60,   251,   253,   -60,   -60,   -60,   311,   -60,+     252,   254,   143,   -60,   -60,   -60,   -60,   -60,   -60,   -60,+     -60,    18,   257,   258,   -60,   259,   261,   -60,   -60,   -60,+     -60,   -60,   -60,   -60,   -60,   -60,   -60,   264,   -60,   -60,+     -60,   -60,   -60,   265,   -60,   -60,    53,   -60,   268,     4,+       5,     6,     7,     8,     9,   273,   275,   291,   292,   293,+      10,   124,  -117,   301,    11,   300,   194,   120,    12,    13,+     274,   307,    48,    14,   243,    15,    16,    17,   218,   288,        0,     0,     0,     0,     0,     0,    18,     0,     0,     0,        0,     0,     0,     0,     0,     0,     0,     0,    19,     0,        0,     0,     0,     0,    20,    21,     0,     0,    22,     0,-     271,    23,     0,    24,     4,     5,     6,     7,     8,     9,-       0,     0,     0,     0,     0,    10,     0,     0,     0,    11,-       0,     0,     0,    12,    13,     0,     0,     0,    14,     0,-      15,    16,    17,     0,     0,     0,     0,     0,     0,     0,+      54,    23,    56,    24,     0,     4,     5,     6,     7,     8,+       9,     0,     0,     0,     0,     0,    10,     0,     0,     0,+      11,     0,     0,     0,    12,    13,     0,     0,     0,    14,+       0,    15,    16,    17,     0,     0,     0,     0,     0,     0,        0,     0,    18,     0,     0,     0,     0,     0,     0,     0,        0,     0,     0,     0,    19,     0,     0,     0,     0,     0,-      20,    21,     0,     0,    22,     0,     0,    23,     0,    24,-       4,     5,     6,     7,     8,     9,     0,     0,     0,     0,-       0,     0,     0,     0,     0,    11,     0,     0,     0,    12,-      13,     0,     0,     0,    14,     0,     0,    16,    17,     0,+      20,    21,     0,     0,    22,     0,     0,    23,   203,    24,+       0,     4,     5,     6,     7,     8,     9,     0,     0,     0,+       0,     0,    10,     0,     0,     0,    11,     0,     0,     0,+      12,    13,     0,     0,     0,    14,     0,    15,    16,    17,        0,     0,     0,     0,     0,     0,     0,     0,    18,     0,        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,-      19,     0,     0,     0,     0,     0,    20,    21,     0,   222,-      22,     0,   223,    23,   224,    24,    51,     0,     0,     0,-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,+      19,     0,     0,     0,     0,     0,    20,    21,     0,     0,+      22,     0,     0,    23,   207,    24,     0,     4,     5,     6,+       7,     8,     9,     0,     0,     0,     0,     0,     0,     0,+       0,     0,    11,     0,     0,     0,    12,    13,     0,     0,+       0,    14,     0,     0,    16,    17,     0,     0,     0,     0,+       0,     0,     0,     0,    18,     0,     0,     0,     0,     0,+       0,     0,     0,     0,     0,     0,    19,     0,     0,     0,+       0,     0,    20,    21,     0,    58,    22,     0,    59,    23,+      60,    24,    51,    90,    91,     0,     0,     0,    61,    62,+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,+      73,    74,    75,    76,    77,    78,    79,     0,     0,     0,+       0,   102,   103,     0,     0,    18,     0,     0,     0,     0,+       0,     0,   105,   106,   107,   108,   109,   110,   111,   217,+       0,     0,    59,     0,    60,     0,    51,    80,     0,     0,+       0,  -153,    61,    62,    63,    64,    65,    66,    67,    68,       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,-      89,    90,    91,    92,    93,     0,     0,     0,     0,     0,-      18,     0,     0,     0,     0,     0,    94,    95,     0,     0,-       0,     0,     0,    96,    97,    98,    99,   100,   101,   102,-     103,     0,   225,    89,    90,    91,    92,   133,     0,     0,-     104,   105,   106,   107,   108,   109,   110,   111,     0,    94,-      95,     0,     0,     0,     0,     0,    96,    97,    98,    99,-     100,   101,   102,   103,     0,    89,    90,    91,    92,   134,-       0,     0,     0,   104,   105,   106,   107,   108,   109,   110,-     111,    94,    95,     0,     0,     0,     0,     0,    96,    97,-      98,    99,   100,   101,   102,   103,     0,    89,    90,    91,-      92,     0,     0,     0,     0,   104,   105,   106,   107,   108,+      79,     4,     5,     6,     7,     8,     9,     0,     0,    18,+       0,     0,    10,     0,     0,     0,    11,     0,     0,     0,+      12,    13,     0,     0,     0,    14,     0,    15,    16,    17,+       0,    80,     0,     0,     0,  -153,     0,     0,    18,     0,+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,+      19,     0,     0,     0,     0,     0,    20,    21,   125,     0,+      22,     0,     0,    23,     0,    24,     4,     5,     6,     7,+       8,     9,     0,     0,     0,     0,     0,    10,     0,     0,+       0,    11,     0,     0,     0,    12,    13,     0,     0,     0,+      14,     0,    15,    16,    17,     0,     0,     0,     0,     0,+       0,     0,     0,    18,     0,     0,     0,     0,     0,     0,+       0,     0,     0,     0,     0,    19,     0,     0,     0,     0,+       0,    20,    21,     0,     0,    22,     0,   233,    23,     0,+      24,     4,     5,     6,     7,     8,     9,     0,     0,     0,+       0,     0,    10,     0,     0,     0,    11,     0,     0,     0,+      12,    13,     0,     0,     0,    14,     0,    15,    16,    17,+       0,     0,     0,     0,     0,     0,     0,     0,    18,     0,+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,+      19,     0,     0,     0,     0,     0,    20,    21,     0,     0,+      22,     0,   271,    23,     0,    24,     4,     5,     6,     7,+       8,     9,     0,     0,     0,     0,     0,    10,     0,     0,+       0,    11,     0,     0,     0,    12,    13,     0,     0,     0,+      14,     0,    15,    16,    17,     0,     0,     0,    90,    91,+       0,     0,     0,    18,     0,     0,     0,     0,     0,     0,+       0,     0,     0,    94,     0,    19,     0,     0,     0,     0,+       0,    20,    21,     0,     0,    22,   102,   103,    23,     0,+      24,     4,     5,     6,     7,     8,     9,   105,   106,   107,+     108,   109,   110,   111,     0,     0,    11,     0,     0,     0,+      12,    13,     0,     0,     0,    14,     0,     0,    16,    17,+       0,     0,     0,     0,     0,     0,     0,     0,    18,     0,+       0,     0,     0,     0,     0,    89,    90,    91,    92,    93,+      19,     0,     0,     0,     0,     0,    20,    21,     0,     0,+      22,    94,    95,    23,     0,    24,     0,     0,    96,    97,+      98,    99,   100,   101,   102,   103,    89,    90,    91,    92,+     133,     0,     0,     0,   104,   105,   106,   107,   108,   109,+     110,   111,    94,    95,     0,     0,     0,     0,     0,    96,+      97,    98,    99,   100,   101,   102,   103,    89,    90,    91,+      92,   134,     0,     0,     0,   104,   105,   106,   107,   108,      109,   110,   111,    94,    95,     0,     0,     0,     0,     0,-      96,    97,    98,    99,   100,   101,   102,   103,     0,  -154,+      96,    97,    98,    99,   100,   101,   102,   103,    89,    90,+      91,    92,     0,     0,     0,     0,   104,   105,   106,   107,+     108,   109,   110,   111,    94,    95,     0,     0,     0,     0,+       0,    96,    97,    98,    99,   100,   101,   102,   103,  -154,       90,    91,     0,     0,     0,     0,     0,   104,   105,   106,      107,   108,   109,   110,   111,    94,    95,     0,     0,     0,        0,     0,  -154,  -154,  -154,  -154,  -154,  -154,   102,   103,-       0,     0,     0,     0,     0,     0,     0,     0,     0,  -154,-     105,   106,   107,   108,   109,   110,   111+       0,     0,     0,     0,     0,     0,     0,     0,  -154,   105,+     106,   107,   108,   109,   110,   111 };  static const yytype_int16 yycheck[] = {-       1,     6,    20,     5,    49,   145,   146,    49,   148,   149,-      11,     8,     8,    12,    13,    14,   161,     4,    25,     6,-      21,    22,    20,    68,    66,    20,    34,     1,    23,    63,-      48,    49,     6,    34,    68,    36,    37,    32,    33,    21,-      22,    48,    49,    25,     0,    42,    42,    16,    48,    49,-      48,    49,    17,    18,    48,    49,    61,    59,    60,    61,-     160,     4,    67,     6,    61,    65,    48,    49,    59,    63,-      48,    49,    66,    48,    49,    64,    48,    49,    45,    80,-      42,    48,    49,    63,    64,    86,    87,    62,    66,     4,-      89,    90,    91,    92,    66,    94,    95,    96,    97,    98,+       1,    25,    48,    48,     6,   145,   146,     5,   148,   149,+      11,    17,    18,    12,    13,    14,   161,    47,    48,    65,+      21,    22,    67,    47,    48,    20,    34,     1,    23,   160,+       4,    61,     6,    34,     8,    36,    37,    32,    33,     8,+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,+      24,    25,    26,    27,    28,    29,    30,    31,    60,    16,+      58,    59,    60,     0,    66,    47,    48,    41,    47,    48,+      47,    48,    41,     1,    62,    63,    47,    48,     6,    80,+      62,    61,    61,    65,    64,    86,    87,     8,    65,    63,+      89,    90,    91,    92,    65,    94,    95,    96,    97,    98,       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,-     109,   110,   111,   253,   254,   123,   117,   262,     6,    48,-      49,   116,    48,    49,    48,    49,    48,    49,    69,   130,-     230,   132,    48,    49,    48,   136,   135,    66,    62,    62,-      66,    65,    65,    65,   143,    62,   145,   146,    65,   148,-     149,    48,    49,    48,    49,   255,   151,   257,   258,   259,-      29,   261,    48,    49,   264,     1,   161,    59,    65,    65,-      65,    48,    49,    66,     1,    49,    62,     4,     5,     6,-       7,     8,     9,   184,    63,    62,   187,    63,    15,   190,-      48,    49,    19,   133,   134,   196,    23,    24,    63,   299,-      63,    28,    68,    30,    31,    32,    59,    65,    48,    49,-      69,    48,    49,    14,    48,    42,    11,    12,    48,    49,-      43,    44,    62,    46,   225,    62,     6,    54,    41,    41,-     231,    26,    62,    60,    61,    59,    63,    64,   239,    66,-      67,    66,    69,    59,    39,    40,   247,   248,    48,    64,-     251,   252,    59,    64,   253,   254,    51,    52,    53,    54,-      55,    56,    57,    55,    56,    57,    63,   262,    41,    63,-      63,    35,    63,    63,   275,    63,    63,    59,    63,     0,-       1,    59,    59,     4,     5,    59,    33,     8,    63,    10,-      11,    12,    13,    14,    59,   296,   297,   298,   245,    20,-      21,    22,   123,    19,    25,    26,    27,   308,    29,   302,-     262,   196,    33,    34,    35,    36,    37,    38,    39,    40,-     151,    42,    -1,    -1,    45,    -1,    -1,    48,    49,    50,-      51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,-      61,    62,    63,    -1,    65,    66,     1,    68,    -1,     4,-       5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,-      15,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,-      -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,-      -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    -1,    64,-      -1,    66,    67,     1,    69,    -1,     4,     5,     6,     7,+     109,   110,   111,   253,   254,   123,   117,   262,    47,    48,+      41,   116,    47,    48,   255,    20,   257,   258,   259,   130,+     261,   132,    20,   264,   265,   136,   135,    21,    22,    60,+      65,    25,    58,    62,   143,    63,   145,   146,    67,   148,+     149,     4,    47,    48,    47,    48,   151,    47,    48,    47,+      48,    41,    61,    47,    48,    64,   161,   133,   134,   300,+       1,    61,    65,     4,     5,     6,     7,     8,     9,    47,+      48,    47,    48,   184,    15,     4,   187,     6,    19,   190,+      47,    48,    23,    24,     6,   196,    64,    28,    64,    30,+      31,    32,    47,    48,    61,    68,    29,    64,    47,    48,+      41,    44,    47,     1,    47,    48,    54,    55,    56,    64,+      11,    12,    53,    65,   225,    64,    47,    48,    59,    60,+     231,    62,    63,    58,    65,    66,    64,    68,   239,    47,+      48,    67,    62,    64,    47,    48,   247,   248,    39,    40,+     251,   252,    62,    61,   253,   254,    62,    62,    61,    50,+      51,    52,    53,    54,    55,    56,    48,   262,    47,    48,+      42,    43,    68,    45,   275,     4,    14,     6,    58,     6,+       0,     1,    61,    58,     4,     5,    47,    58,     8,    58,+      10,    11,    12,    13,    14,    65,   297,   298,   299,    58,+      20,    21,    22,    63,    47,    25,    26,    27,   309,    29,+      63,    62,    62,    33,    34,    35,    36,    37,    38,    39,+      40,    41,    62,    62,    44,    62,    62,    47,    48,    49,+      50,    51,    52,    53,    54,    55,    56,    62,    58,    59,+      60,    61,    62,    13,    64,    65,     1,    67,    58,     4,+       5,     6,     7,     8,     9,    58,    62,    58,    58,    58,+      15,    35,    58,    58,    19,    62,   123,    33,    23,    24,+     245,   303,    19,    28,   196,    30,    31,    32,   151,   262,+      -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,+      -1,    -1,    -1,    -1,    59,    60,    -1,    -1,    63,    -1,+      65,    66,     1,    68,    -1,     4,     5,     6,     7,     8,+       9,    -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,    -1,+      19,    -1,    -1,    -1,    23,    24,    -1,    -1,    -1,    28,+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,+      59,    60,    -1,    -1,    63,    -1,    -1,    66,     1,    68,+      -1,     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,+      -1,    -1,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,+      23,    24,    -1,    -1,    -1,    28,    -1,    30,    31,    32,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,+      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,+      63,    -1,    -1,    66,     1,    68,    -1,     4,     5,     6,+       7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,    -1,+      -1,    28,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,+      -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,+      -1,    -1,    59,    60,    -1,     1,    63,    -1,     4,    66,+       6,    68,     8,    11,    12,    -1,    -1,    -1,    14,    15,+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,+      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,+      -1,    39,    40,    -1,    -1,    41,    -1,    -1,    -1,    -1,+      -1,    -1,    50,    51,    52,    53,    54,    55,    56,     1,+      -1,    -1,     4,    -1,     6,    -1,     8,    63,    -1,    -1,+      -1,    67,    14,    15,    16,    17,    18,    19,    20,    21,+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,+      32,     4,     5,     6,     7,     8,     9,    -1,    -1,    41,+      -1,    -1,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,+      23,    24,    -1,    -1,    -1,    28,    -1,    30,    31,    32,+      -1,    63,    -1,    -1,    -1,    67,    -1,    -1,    41,    -1,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,+      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    61,    -1,+      63,    -1,    -1,    66,    -1,    68,     4,     5,     6,     7,        8,     9,    -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    -1,    -1,       28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,-      -1,    -1,    60,    61,    -1,    -1,    64,    -1,    -1,    67,-       1,    69,    -1,     4,     5,     6,     7,     8,     9,    -1,-      -1,    -1,    -1,    -1,    15,    -1,    -1,    -1,    19,    -1,-      -1,    -1,    23,    24,    -1,    -1,    -1,    28,    -1,    30,-      31,    32,    -1,    -1,    -1,    -1,    11,    12,    -1,    -1,-      -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    60,-      61,    -1,    -1,    64,    39,    40,    67,     1,    69,    -1,-       4,     5,     6,     7,     8,     9,    51,    52,    53,    54,-      55,    56,    57,    -1,    -1,    19,    -1,    -1,    -1,    23,-      24,    -1,    -1,    -1,    28,    -1,    -1,    31,    32,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,+      -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,+      -1,    59,    60,    -1,    -1,    63,    -1,    65,    66,    -1,+      68,     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,+      -1,    -1,    15,    -1,    -1,    -1,    19,    -1,    -1,    -1,+      23,    24,    -1,    -1,    -1,    28,    -1,    30,    31,    32,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,     1,-      64,    -1,     4,    67,     6,    69,     8,    11,    12,    -1,-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,-      32,    -1,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,-      42,    -1,    -1,    -1,    -1,    -1,    -1,    51,    52,    53,-      54,    55,    56,    57,     1,    -1,    -1,     4,    -1,     6,-      -1,     8,    64,    -1,    -1,    -1,    68,    14,    15,    16,-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,-      27,    28,    29,    30,    31,    32,     4,     5,     6,     7,-       8,     9,    -1,    -1,    -1,    42,    -1,    15,    -1,    -1,+      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,+      63,    -1,    65,    66,    -1,    68,     4,     5,     6,     7,+       8,     9,    -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,       -1,    19,    -1,    -1,    -1,    23,    24,    -1,    -1,    -1,-      28,    -1,    30,    31,    32,    -1,    -1,    64,    -1,    -1,-      -1,    68,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,-      -1,    -1,    60,    61,    62,    -1,    64,    -1,    -1,    67,-      -1,    69,     4,     5,     6,     7,     8,     9,    -1,    -1,-      -1,    -1,    -1,    15,    -1,    -1,    -1,    19,    -1,    -1,-      -1,    23,    24,    -1,    -1,    -1,    28,    -1,    30,    31,-      32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    60,    61,-      -1,    -1,    64,    -1,    66,    67,    -1,    69,     4,     5,-       6,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,    15,-      -1,    -1,    -1,    19,    -1,    -1,    -1,    23,    24,    -1,-      -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,-      -1,    -1,    -1,    -1,    60,    61,    -1,    -1,    64,    -1,-      66,    67,    -1,    69,     4,     5,     6,     7,     8,     9,-      -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,    -1,    19,-      -1,    -1,    -1,    23,    24,    -1,    -1,    -1,    28,    -1,-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,-      60,    61,    -1,    -1,    64,    -1,    -1,    67,    -1,    69,-       4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,-      -1,    -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,    23,-      24,    -1,    -1,    -1,    28,    -1,    -1,    31,    32,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,-      54,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,     1,-      64,    -1,     4,    67,     6,    69,     8,    -1,    -1,    -1,-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,-      42,    -1,    -1,    -1,    -1,    -1,    26,    27,    -1,    -1,-      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,-      40,    -1,    64,    10,    11,    12,    13,    14,    -1,    -1,-      50,    51,    52,    53,    54,    55,    56,    57,    -1,    26,-      27,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,-      37,    38,    39,    40,    -1,    10,    11,    12,    13,    14,-      -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    56,-      57,    26,    27,    -1,    -1,    -1,    -1,    -1,    33,    34,-      35,    36,    37,    38,    39,    40,    -1,    10,    11,    12,-      13,    -1,    -1,    -1,    -1,    50,    51,    52,    53,    54,-      55,    56,    57,    26,    27,    -1,    -1,    -1,    -1,    -1,-      33,    34,    35,    36,    37,    38,    39,    40,    -1,    10,-      11,    12,    -1,    -1,    -1,    -1,    -1,    50,    51,    52,-      53,    54,    55,    56,    57,    26,    27,    -1,    -1,    -1,+      28,    -1,    30,    31,    32,    -1,    -1,    -1,    11,    12,+      -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,+      -1,    -1,    -1,    26,    -1,    53,    -1,    -1,    -1,    -1,+      -1,    59,    60,    -1,    -1,    63,    39,    40,    66,    -1,+      68,     4,     5,     6,     7,     8,     9,    50,    51,    52,+      53,    54,    55,    56,    -1,    -1,    19,    -1,    -1,    -1,+      23,    24,    -1,    -1,    -1,    28,    -1,    -1,    31,    32,+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,+      53,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,+      63,    26,    27,    66,    -1,    68,    -1,    -1,    33,    34,+      35,    36,    37,    38,    39,    40,    10,    11,    12,    13,+      14,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,+      55,    56,    26,    27,    -1,    -1,    -1,    -1,    -1,    33,+      34,    35,    36,    37,    38,    39,    40,    10,    11,    12,+      13,    14,    -1,    -1,    -1,    49,    50,    51,    52,    53,+      54,    55,    56,    26,    27,    -1,    -1,    -1,    -1,    -1,+      33,    34,    35,    36,    37,    38,    39,    40,    10,    11,+      12,    13,    -1,    -1,    -1,    -1,    49,    50,    51,    52,+      53,    54,    55,    56,    26,    27,    -1,    -1,    -1,    -1,+      -1,    33,    34,    35,    36,    37,    38,    39,    40,    10,+      11,    12,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,+      52,    53,    54,    55,    56,    26,    27,    -1,    -1,    -1,       -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,-      51,    52,    53,    54,    55,    56,    57+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,+      51,    52,    53,    54,    55,    56 };  /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of    state STATE-NUM.  */ static const yytype_int8 yystos[] = {-       0,    16,    71,    72,     4,     5,     6,     7,     8,     9,-      15,    19,    23,    24,    28,    30,    31,    32,    42,    54,-      60,    61,    64,    67,    69,    75,    76,    80,    83,    84,-      87,     0,    17,    18,    73,    77,    78,    64,    59,    42,-       4,    75,    76,    76,    76,     6,     1,     6,    87,     1,-       4,     8,    84,     1,    66,    75,     1,    75,     1,     4,+       0,    16,    70,    71,     4,     5,     6,     7,     8,     9,+      15,    19,    23,    24,    28,    30,    31,    32,    41,    53,+      59,    60,    63,    66,    68,    74,    75,    79,    82,    83,+      86,     0,    17,    18,    72,    76,    77,    63,    58,    41,+       4,    74,    75,    75,    75,     6,     1,     6,    86,     1,+       4,     8,    83,     1,    65,    74,     1,    74,     1,     4,        6,    14,    15,    16,    17,    18,    19,    20,    21,    22,       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,-      64,    84,    96,    97,    98,    69,    48,    49,    62,    10,+      63,    83,    95,    96,    97,    68,    47,    48,    61,    10,       11,    12,    13,    14,    26,    27,    33,    34,    35,    36,-      37,    38,    39,    40,    50,    51,    52,    53,    54,    55,-      56,    57,    75,    85,     5,    59,    60,    61,    79,    84,-      79,    74,    75,    80,    73,    62,    75,    75,    88,    89,-      63,    64,    20,    14,    14,    29,    48,     1,    59,    66,-      66,    65,    65,    63,    68,    63,    63,    75,    63,    63,-      68,    49,    69,    75,    75,    76,    76,    76,    76,     6,-      61,    67,    90,    91,    92,    76,    76,    76,    76,    76,-      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,-      76,    76,    76,    43,    44,    46,    59,    61,    84,     1,-      63,    66,    75,    14,    74,    62,    62,    65,    75,     4,-       6,    81,    82,     1,    75,    91,    91,     1,    76,    75,-      76,    99,    99,    99,    65,    99,    99,     1,    97,     6,-      92,    93,     1,     4,     6,    64,    84,    94,    95,    96,-      41,    48,    75,    66,    75,    59,    66,    75,    59,    63,-      66,     4,     6,    89,    62,    62,    65,    21,    22,    25,-      86,    64,    64,    48,    63,    49,    66,    63,    63,    63,-      75,    63,    49,    68,    63,    92,    75,    45,    59,    66,-      66,    66,    75,    59,    82,    63,    75,    75,    75,    75,-      99,    99,    92,    92,    92,    92,    65,    92,    95,    92,-      59,    59,    59,    66,    75,    25,    20,    62,    62,    63,-      59,    62,    75,    75,    75,    92,    86,    65,    62,    65,-      75,    65+      37,    38,    39,    40,    49,    50,    51,    52,    53,    54,+      55,    56,    74,    84,     5,    58,    59,    60,    78,    83,+      78,    73,    74,    79,    72,    61,    74,    74,    87,    88,+      62,    63,    20,    14,    14,    29,    47,     1,    58,    65,+      65,    64,    64,    62,    67,    62,    62,    74,    62,    62,+      67,    48,    68,    74,    74,    75,    75,    75,    75,     6,+      60,    66,    89,    90,    91,    75,    75,    75,    75,    75,+      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,+      75,    75,    75,    42,    43,    45,    58,    60,    83,     1,+      62,    65,    74,    14,    73,    61,    61,    64,    74,     4,+       6,    80,    81,     1,    74,    90,    90,     1,    75,    74,+      75,    98,    98,    98,    64,    98,    98,     1,    96,     6,+      91,    92,     1,     4,     6,    63,    83,    93,    94,    95,+      58,    47,    74,    65,    74,    58,    65,    74,    58,    62,+      65,     4,     6,    88,    61,    61,    64,    21,    22,    25,+      85,    63,    63,    47,    62,    48,    65,    62,    62,    62,+      74,    62,    48,    67,    62,    13,    74,    44,    58,    65,+      65,    65,    74,    58,    81,    62,    74,    74,    74,    74,+      98,    98,    91,    91,    91,    91,    64,    91,    94,    91,+      91,    58,    58,    58,    65,    74,    25,    20,    61,    61,+      62,    58,    61,    74,    74,    74,    91,    85,    64,    61,+      64,    74,    64 };  /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */ static const yytype_int8 yyr1[] = {-       0,    70,    71,    71,    72,    72,    73,    73,    74,    74,-      75,    75,    75,    75,    75,    75,    76,    76,    76,    76,-      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,-      76,    76,    76,    76,    76,    76,    76,    76,    76,    77,-      77,    78,    78,    78,    79,    80,    80,    81,    81,    82,-      82,    83,    83,    84,    85,    85,    85,    86,    86,    86,-      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,-      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,-      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,-      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,-      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,-      87,    87,    87,    87,    88,    88,    89,    90,    90,    91,-      91,    92,    92,    92,    93,    93,    94,    94,    95,    95,-      95,    95,    95,    95,    95,    96,    96,    96,    96,    96,-      96,    96,    96,    96,    96,    96,    96,    96,    96,    96,-      96,    96,    96,    97,    97,    97,    98,    98,    98,    98,-      98,    98,    98,    98,    98,    98,    98,    99,    99+       0,    69,    70,    70,    71,    71,    72,    72,    73,    73,+      74,    74,    74,    74,    74,    74,    75,    75,    75,    75,+      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,+      75,    75,    75,    75,    75,    75,    75,    75,    75,    76,+      76,    77,    77,    77,    78,    79,    79,    80,    80,    81,+      81,    82,    82,    83,    84,    84,    84,    85,    85,    85,+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,+      86,    86,    86,    86,    87,    87,    88,    89,    89,    90,+      90,    91,    91,    91,    92,    92,    93,    93,    94,    94,+      94,    94,    94,    94,    94,    95,    95,    95,    95,    95,+      95,    95,    95,    95,    95,    95,    95,    95,    95,    95,+      95,    95,    95,    96,    96,    96,    97,    97,    97,    97,+      97,    97,    97,    97,    97,    97,    97,    98,    98 };  /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */@@ -1425,7 +1409,7 @@ static const yytype_int8 yyr2[] =        5,     4,     7,     6,     6,     6,     5,     5,     2,     1,        1,     1,     2,     3,     3,     2,     3,     9,    11,     9,        5,     4,     4,     4,     2,     4,     1,     1,     1,     4,-       3,     3,     4,     3,     1,     3,     1,     3,     1,     3,+       3,     3,     4,     3,     1,     3,     1,     4,     1,     4,        1,     1,     3,     3,     1,     3,     1,     3,     1,     3,        3,     3,     3,     5,     3,     1,     1,     1,     1,     1,        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,@@ -2000,205 +1984,205 @@ yydestruct (const char *yymsg,     case YYSYMBOL_IDENT: /* IDENT  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2004 "src/parser.c"+#line 1988 "src/parser.c"         break;      case YYSYMBOL_FIELD: /* FIELD  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2010 "src/parser.c"+#line 1994 "src/parser.c"         break;      case YYSYMBOL_BINDING: /* BINDING  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2016 "src/parser.c"+#line 2000 "src/parser.c"         break;      case YYSYMBOL_LITERAL: /* LITERAL  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2022 "src/parser.c"+#line 2006 "src/parser.c"         break;      case YYSYMBOL_FORMAT: /* FORMAT  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2028 "src/parser.c"+#line 2012 "src/parser.c"         break;      case YYSYMBOL_QQSTRING_TEXT: /* QQSTRING_TEXT  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2034 "src/parser.c"+#line 2018 "src/parser.c"         break;      case YYSYMBOL_Module: /* Module  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2040 "src/parser.c"+#line 2024 "src/parser.c"         break;      case YYSYMBOL_Imports: /* Imports  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2046 "src/parser.c"+#line 2030 "src/parser.c"         break;      case YYSYMBOL_FuncDefs: /* FuncDefs  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2052 "src/parser.c"+#line 2036 "src/parser.c"         break;      case YYSYMBOL_Query: /* Query  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2058 "src/parser.c"+#line 2042 "src/parser.c"         break;      case YYSYMBOL_Expr: /* Expr  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2064 "src/parser.c"+#line 2048 "src/parser.c"         break;      case YYSYMBOL_Import: /* Import  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2070 "src/parser.c"+#line 2054 "src/parser.c"         break;      case YYSYMBOL_ImportWhat: /* ImportWhat  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2076 "src/parser.c"+#line 2060 "src/parser.c"         break;      case YYSYMBOL_ImportFrom: /* ImportFrom  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2082 "src/parser.c"+#line 2066 "src/parser.c"         break;      case YYSYMBOL_FuncDef: /* FuncDef  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2088 "src/parser.c"+#line 2072 "src/parser.c"         break;      case YYSYMBOL_Params: /* Params  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2094 "src/parser.c"+#line 2078 "src/parser.c"         break;      case YYSYMBOL_Param: /* Param  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2100 "src/parser.c"+#line 2084 "src/parser.c"         break;      case YYSYMBOL_StringStart: /* StringStart  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2106 "src/parser.c"+#line 2090 "src/parser.c"         break;      case YYSYMBOL_String: /* String  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2112 "src/parser.c"+#line 2096 "src/parser.c"         break;      case YYSYMBOL_QQString: /* QQString  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2118 "src/parser.c"+#line 2102 "src/parser.c"         break;      case YYSYMBOL_ElseBody: /* ElseBody  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2124 "src/parser.c"+#line 2108 "src/parser.c"         break;      case YYSYMBOL_Term: /* Term  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2130 "src/parser.c"+#line 2114 "src/parser.c"         break;      case YYSYMBOL_Args: /* Args  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2136 "src/parser.c"+#line 2120 "src/parser.c"         break;      case YYSYMBOL_Arg: /* Arg  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2142 "src/parser.c"+#line 2126 "src/parser.c"         break;      case YYSYMBOL_RepPatterns: /* RepPatterns  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2148 "src/parser.c"+#line 2132 "src/parser.c"         break;      case YYSYMBOL_Patterns: /* Patterns  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2154 "src/parser.c"+#line 2138 "src/parser.c"         break;      case YYSYMBOL_Pattern: /* Pattern  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2160 "src/parser.c"+#line 2144 "src/parser.c"         break;      case YYSYMBOL_ArrayPats: /* ArrayPats  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2166 "src/parser.c"+#line 2150 "src/parser.c"         break;      case YYSYMBOL_ObjPats: /* ObjPats  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2172 "src/parser.c"+#line 2156 "src/parser.c"         break;      case YYSYMBOL_ObjPat: /* ObjPat  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2178 "src/parser.c"+#line 2162 "src/parser.c"         break;      case YYSYMBOL_Keyword: /* Keyword  */ #line 37 "src/parser.y"             { jv_free(((*yyvaluep).literal)); }-#line 2184 "src/parser.c"+#line 2168 "src/parser.c"         break;      case YYSYMBOL_DictPairs: /* DictPairs  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2190 "src/parser.c"+#line 2174 "src/parser.c"         break;      case YYSYMBOL_DictPair: /* DictPair  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2196 "src/parser.c"+#line 2180 "src/parser.c"         break;      case YYSYMBOL_DictExpr: /* DictExpr  */ #line 38 "src/parser.y"             { block_free(((*yyvaluep).blk)); }-#line 2202 "src/parser.c"+#line 2186 "src/parser.c"         break;        default:@@ -2502,31 +2486,31 @@ yyreduce:   switch (yyn)     {   case 2: /* TopLevel: Module Imports Query  */-#line 282 "src/parser.y"+#line 281 "src/parser.y"                      {   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk)); }-#line 2510 "src/parser.c"+#line 2494 "src/parser.c"     break;    case 3: /* TopLevel: Module Imports FuncDefs  */-#line 285 "src/parser.y"+#line 284 "src/parser.y"                         {   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); }-#line 2518 "src/parser.c"+#line 2502 "src/parser.c"     break;    case 4: /* Module: %empty  */-#line 290 "src/parser.y"+#line 289 "src/parser.y"        {   (yyval.blk) = gen_noop(); }-#line 2526 "src/parser.c"+#line 2510 "src/parser.c"     break;    case 5: /* Module: "module" Query ';'  */-#line 293 "src/parser.y"+#line 292 "src/parser.y"                    {   if (!block_is_const((yyvsp[-1].blk))) {     FAIL((yylsp[-1]), "Module metadata must be constant");@@ -2540,286 +2524,286 @@ yyreduce:     (yyval.blk) = gen_module((yyvsp[-1].blk));   } }-#line 2544 "src/parser.c"+#line 2528 "src/parser.c"     break;    case 6: /* Imports: %empty  */-#line 308 "src/parser.y"+#line 307 "src/parser.y"        {   (yyval.blk) = gen_noop(); }-#line 2552 "src/parser.c"+#line 2536 "src/parser.c"     break;    case 7: /* Imports: Import Imports  */-#line 311 "src/parser.y"+#line 310 "src/parser.y"                {   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); }-#line 2560 "src/parser.c"+#line 2544 "src/parser.c"     break;    case 8: /* FuncDefs: %empty  */-#line 316 "src/parser.y"+#line 315 "src/parser.y"        {   (yyval.blk) = gen_noop(); }-#line 2568 "src/parser.c"+#line 2552 "src/parser.c"     break;    case 9: /* FuncDefs: FuncDef FuncDefs  */-#line 319 "src/parser.y"+#line 318 "src/parser.y"                  {   (yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk)); }-#line 2576 "src/parser.c"+#line 2560 "src/parser.c"     break;    case 10: /* Query: FuncDef Query  */-#line 325 "src/parser.y"+#line 324 "src/parser.y"                             {   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); }-#line 2584 "src/parser.c"+#line 2568 "src/parser.c"     break;    case 11: /* Query: Expr "as" Patterns '|' Query  */-#line 328 "src/parser.y"+#line 327 "src/parser.y"                              {   (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2592 "src/parser.c"+#line 2576 "src/parser.c"     break;    case 12: /* Query: "label" BINDING '|' Query  */-#line 331 "src/parser.y"+#line 330 "src/parser.y"                           {   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal)));   (yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk)));   jv_free((yyvsp[-2].literal));   jv_free(v); }-#line 2603 "src/parser.c"+#line 2587 "src/parser.c"     break;    case 13: /* Query: Query '|' Query  */-#line 337 "src/parser.y"+#line 336 "src/parser.y"                 {   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2611 "src/parser.c"+#line 2595 "src/parser.c"     break;    case 14: /* Query: Query ',' Query  */-#line 340 "src/parser.y"+#line 339 "src/parser.y"                 {   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2619 "src/parser.c"+#line 2603 "src/parser.c"     break;    case 15: /* Query: Expr  */-#line 343 "src/parser.y"+#line 342 "src/parser.y"      {   (yyval.blk) = (yyvsp[0].blk); }-#line 2627 "src/parser.c"+#line 2611 "src/parser.c"     break;    case 16: /* Expr: Expr "//" Expr  */-#line 349 "src/parser.y"+#line 348 "src/parser.y"                {   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2635 "src/parser.c"+#line 2619 "src/parser.c"     break;    case 17: /* Expr: Expr '=' Expr  */-#line 352 "src/parser.y"+#line 351 "src/parser.y"               {   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); }-#line 2643 "src/parser.c"+#line 2627 "src/parser.c"     break;    case 18: /* Expr: Expr "or" Expr  */-#line 355 "src/parser.y"+#line 354 "src/parser.y"                {   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2651 "src/parser.c"+#line 2635 "src/parser.c"     break;    case 19: /* Expr: Expr "and" Expr  */-#line 358 "src/parser.y"+#line 357 "src/parser.y"                 {   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2659 "src/parser.c"+#line 2643 "src/parser.c"     break;    case 20: /* Expr: Expr "//=" Expr  */-#line 361 "src/parser.y"+#line 360 "src/parser.y"                 {   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2667 "src/parser.c"+#line 2651 "src/parser.c"     break;    case 21: /* Expr: Expr "|=" Expr  */-#line 364 "src/parser.y"+#line 363 "src/parser.y"                {   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); }-#line 2675 "src/parser.c"+#line 2659 "src/parser.c"     break;    case 22: /* Expr: Expr '+' Expr  */-#line 367 "src/parser.y"+#line 366 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); }-#line 2683 "src/parser.c"+#line 2667 "src/parser.c"     break;    case 23: /* Expr: Expr "+=" Expr  */-#line 370 "src/parser.y"+#line 369 "src/parser.y"                {   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); }-#line 2691 "src/parser.c"+#line 2675 "src/parser.c"     break;    case 24: /* Expr: Expr '-' Expr  */-#line 373 "src/parser.y"+#line 372 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); }-#line 2699 "src/parser.c"+#line 2683 "src/parser.c"     break;    case 25: /* Expr: Expr "-=" Expr  */-#line 376 "src/parser.y"+#line 375 "src/parser.y"                {   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); }-#line 2707 "src/parser.c"+#line 2691 "src/parser.c"     break;    case 26: /* Expr: Expr '*' Expr  */-#line 379 "src/parser.y"+#line 378 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); }-#line 2715 "src/parser.c"+#line 2699 "src/parser.c"     break;    case 27: /* Expr: Expr "*=" Expr  */-#line 382 "src/parser.y"+#line 381 "src/parser.y"                {   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); }-#line 2723 "src/parser.c"+#line 2707 "src/parser.c"     break;    case 28: /* Expr: Expr '/' Expr  */-#line 385 "src/parser.y"+#line 384 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/'); }-#line 2731 "src/parser.c"+#line 2715 "src/parser.c"     break;    case 29: /* Expr: Expr '%' Expr  */-#line 388 "src/parser.y"+#line 387 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%'); }-#line 2739 "src/parser.c"+#line 2723 "src/parser.c"     break;    case 30: /* Expr: Expr "/=" Expr  */-#line 391 "src/parser.y"+#line 390 "src/parser.y"                {   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); }-#line 2747 "src/parser.c"+#line 2731 "src/parser.c"     break;    case 31: /* Expr: Expr "%=" Expr  */-#line 394 "src/parser.y"+#line 393 "src/parser.y"                  {   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); }-#line 2755 "src/parser.c"+#line 2739 "src/parser.c"     break;    case 32: /* Expr: Expr "==" Expr  */-#line 397 "src/parser.y"+#line 396 "src/parser.y"                {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); }-#line 2763 "src/parser.c"+#line 2747 "src/parser.c"     break;    case 33: /* Expr: Expr "!=" Expr  */-#line 400 "src/parser.y"+#line 399 "src/parser.y"                {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); }-#line 2771 "src/parser.c"+#line 2755 "src/parser.c"     break;    case 34: /* Expr: Expr '<' Expr  */-#line 403 "src/parser.y"+#line 402 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); }-#line 2779 "src/parser.c"+#line 2763 "src/parser.c"     break;    case 35: /* Expr: Expr '>' Expr  */-#line 406 "src/parser.y"+#line 405 "src/parser.y"               {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); }-#line 2787 "src/parser.c"+#line 2771 "src/parser.c"     break;    case 36: /* Expr: Expr "<=" Expr  */-#line 409 "src/parser.y"+#line 408 "src/parser.y"                {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); }-#line 2795 "src/parser.c"+#line 2779 "src/parser.c"     break;    case 37: /* Expr: Expr ">=" Expr  */-#line 412 "src/parser.y"+#line 411 "src/parser.y"                {   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); }-#line 2803 "src/parser.c"+#line 2787 "src/parser.c"     break;    case 38: /* Expr: Term  */-#line 415 "src/parser.y"+#line 414 "src/parser.y"                   {   (yyval.blk) = (yyvsp[0].blk); }-#line 2811 "src/parser.c"+#line 2795 "src/parser.c"     break;    case 39: /* Import: ImportWhat ';'  */-#line 421 "src/parser.y"+#line 420 "src/parser.y"                {   (yyval.blk) = (yyvsp[-1].blk); }-#line 2819 "src/parser.c"+#line 2803 "src/parser.c"     break;    case 40: /* Import: ImportWhat Query ';'  */-#line 424 "src/parser.y"+#line 423 "src/parser.y"                      {   if (!block_is_const((yyvsp[-1].blk))) {     FAIL((yylsp[-1]), "Module metadata must be constant");@@ -2835,38 +2819,38 @@ yyreduce:     (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));   } }-#line 2839 "src/parser.c"+#line 2823 "src/parser.c"     break;    case 41: /* ImportWhat: "import" ImportFrom "as" BINDING  */-#line 441 "src/parser.y"+#line 440 "src/parser.y"                                  {   (yyval.blk) = gen_import(block_const((yyvsp[-2].blk)), (yyvsp[0].literal), 1);   block_free((yyvsp[-2].blk)); }-#line 2848 "src/parser.c"+#line 2832 "src/parser.c"     break;    case 42: /* ImportWhat: "import" ImportFrom "as" IDENT  */-#line 445 "src/parser.y"+#line 444 "src/parser.y"                                {   (yyval.blk) = gen_import(block_const((yyvsp[-2].blk)), (yyvsp[0].literal), 0);   block_free((yyvsp[-2].blk)); }-#line 2857 "src/parser.c"+#line 2841 "src/parser.c"     break;    case 43: /* ImportWhat: "include" ImportFrom  */-#line 449 "src/parser.y"+#line 448 "src/parser.y"                      {   (yyval.blk) = gen_import(block_const((yyvsp[0].blk)), jv_invalid(), 0);   block_free((yyvsp[0].blk)); }-#line 2866 "src/parser.c"+#line 2850 "src/parser.c"     break;    case 44: /* ImportFrom: String  */-#line 455 "src/parser.y"+#line 454 "src/parser.y"        {   if (!block_is_const((yyvsp[0].blk))) {     FAIL((yylsp[0]), "Import path must be constant");@@ -2876,152 +2860,152 @@ yyreduce:     (yyval.blk) = (yyvsp[0].blk);   } }-#line 2880 "src/parser.c"+#line 2864 "src/parser.c"     break;    case 45: /* FuncDef: "def" IDENT ':' Query ';'  */-#line 466 "src/parser.y"+#line 465 "src/parser.y"                           {   (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));   jv_free((yyvsp[-3].literal)); }-#line 2889 "src/parser.c"+#line 2873 "src/parser.c"     break;    case 46: /* FuncDef: "def" IDENT '(' Params ')' ':' Query ';'  */-#line 471 "src/parser.y"+#line 470 "src/parser.y"                                          {   (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));   jv_free((yyvsp[-6].literal)); }-#line 2898 "src/parser.c"+#line 2882 "src/parser.c"     break;    case 47: /* Params: Param  */-#line 477 "src/parser.y"+#line 476 "src/parser.y"       {   (yyval.blk) = (yyvsp[0].blk); }-#line 2906 "src/parser.c"+#line 2890 "src/parser.c"     break;    case 48: /* Params: Params ';' Param  */-#line 480 "src/parser.y"+#line 479 "src/parser.y"                  {   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 2914 "src/parser.c"+#line 2898 "src/parser.c"     break;    case 49: /* Param: BINDING  */-#line 485 "src/parser.y"+#line 484 "src/parser.y"         {   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));   jv_free((yyvsp[0].literal)); }-#line 2923 "src/parser.c"+#line 2907 "src/parser.c"     break;    case 50: /* Param: IDENT  */-#line 489 "src/parser.y"+#line 488 "src/parser.y"       {   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));   jv_free((yyvsp[0].literal)); }-#line 2932 "src/parser.c"+#line 2916 "src/parser.c"     break;    case 51: /* StringStart: FORMAT QQSTRING_START  */-#line 496 "src/parser.y"+#line 495 "src/parser.y"                       {   (yyval.literal) = (yyvsp[-1].literal); }-#line 2940 "src/parser.c"+#line 2924 "src/parser.c"     break;    case 52: /* StringStart: QQSTRING_START  */-#line 499 "src/parser.y"+#line 498 "src/parser.y"                {   (yyval.literal) = jv_string("text"); }-#line 2948 "src/parser.c"+#line 2932 "src/parser.c"     break;    case 53: /* String: StringStart QQString QQSTRING_END  */-#line 505 "src/parser.y"+#line 504 "src/parser.y"                                   {   (yyval.blk) = (yyvsp[-1].blk);   jv_free((yyvsp[-2].literal)); }-#line 2957 "src/parser.c"+#line 2941 "src/parser.c"     break;    case 54: /* QQString: %empty  */-#line 512 "src/parser.y"+#line 511 "src/parser.y"        {   (yyval.blk) = gen_const(jv_string("")); }-#line 2965 "src/parser.c"+#line 2949 "src/parser.c"     break;    case 55: /* QQString: QQString QQSTRING_TEXT  */-#line 515 "src/parser.y"+#line 514 "src/parser.y"                        {   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); }-#line 2973 "src/parser.c"+#line 2957 "src/parser.c"     break;    case 56: /* QQString: QQString QQSTRING_INTERP_START Query QQSTRING_INTERP_END  */-#line 518 "src/parser.y"+#line 517 "src/parser.y"                                                          {   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); }-#line 2981 "src/parser.c"+#line 2965 "src/parser.c"     break;    case 57: /* ElseBody: "elif" Query "then" Query ElseBody  */-#line 524 "src/parser.y"+#line 523 "src/parser.y"                                    {   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); }-#line 2989 "src/parser.c"+#line 2973 "src/parser.c"     break;    case 58: /* ElseBody: "else" Query "end"  */-#line 527 "src/parser.y"+#line 526 "src/parser.y"                    {   (yyval.blk) = (yyvsp[-1].blk); }-#line 2997 "src/parser.c"+#line 2981 "src/parser.c"     break;    case 59: /* ElseBody: "end"  */-#line 530 "src/parser.y"+#line 529 "src/parser.y"       {   (yyval.blk) = gen_noop(); }-#line 3005 "src/parser.c"+#line 2989 "src/parser.c"     break;    case 60: /* Term: '.'  */-#line 536 "src/parser.y"+#line 535 "src/parser.y"     {   (yyval.blk) = gen_noop(); }-#line 3013 "src/parser.c"+#line 2997 "src/parser.c"     break;    case 61: /* Term: ".."  */-#line 539 "src/parser.y"+#line 538 "src/parser.y"     {   (yyval.blk) = gen_call("recurse", gen_noop()); }-#line 3021 "src/parser.c"+#line 3005 "src/parser.c"     break;    case 62: /* Term: "break" BINDING  */-#line 542 "src/parser.y"+#line 541 "src/parser.y"               {   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal)));     // impossible symbol   (yyval.blk) = gen_location((yyloc), locations,@@ -3030,279 +3014,279 @@ yyreduce:   jv_free(v);   jv_free((yyvsp[0].literal)); }-#line 3034 "src/parser.c"+#line 3018 "src/parser.c"     break;    case 63: /* Term: "break" error  */-#line 550 "src/parser.y"+#line 549 "src/parser.y"             {   FAIL((yyloc), "break requires a label to break to");   (yyval.blk) = gen_noop(); }-#line 3043 "src/parser.c"+#line 3027 "src/parser.c"     break;    case 64: /* Term: Term FIELD '?'  */-#line 554 "src/parser.y"+#line 553 "src/parser.y"                {   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); }-#line 3051 "src/parser.c"+#line 3035 "src/parser.c"     break;    case 65: /* Term: FIELD '?'  */-#line 557 "src/parser.y"+#line 556 "src/parser.y"           {   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); }-#line 3059 "src/parser.c"+#line 3043 "src/parser.c"     break;    case 66: /* Term: Term '.' String '?'  */-#line 560 "src/parser.y"+#line 559 "src/parser.y"                     {   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); }-#line 3067 "src/parser.c"+#line 3051 "src/parser.c"     break;    case 67: /* Term: '.' String '?'  */-#line 563 "src/parser.y"+#line 562 "src/parser.y"                {   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); }-#line 3075 "src/parser.c"+#line 3059 "src/parser.c"     break;    case 68: /* Term: Term FIELD  */-#line 566 "src/parser.y"+#line 565 "src/parser.y"                         {   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); }-#line 3083 "src/parser.c"+#line 3067 "src/parser.c"     break;    case 69: /* Term: FIELD  */-#line 569 "src/parser.y"+#line 568 "src/parser.y"                    {   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); }-#line 3091 "src/parser.c"+#line 3075 "src/parser.c"     break;    case 70: /* Term: Term '.' String  */-#line 572 "src/parser.y"+#line 571 "src/parser.y"                              {   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3099 "src/parser.c"+#line 3083 "src/parser.c"     break;    case 71: /* Term: '.' String  */-#line 575 "src/parser.y"+#line 574 "src/parser.y"                         {   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); }-#line 3107 "src/parser.c"+#line 3091 "src/parser.c"     break;    case 72: /* Term: '.' error  */-#line 578 "src/parser.y"+#line 577 "src/parser.y"           {   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");   (yyval.blk) = gen_noop(); }-#line 3116 "src/parser.c"+#line 3100 "src/parser.c"     break;    case 73: /* Term: '.' IDENT error  */-#line 582 "src/parser.y"+#line 581 "src/parser.y"                 {   jv_free((yyvsp[-1].literal));   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");   (yyval.blk) = gen_noop(); }-#line 3126 "src/parser.c"+#line 3110 "src/parser.c"     break;    case 74: /* Term: Term '[' Query ']' '?'  */-#line 588 "src/parser.y"+#line 587 "src/parser.y"                        {   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); }-#line 3134 "src/parser.c"+#line 3118 "src/parser.c"     break;    case 75: /* Term: Term '[' Query ']'  */-#line 591 "src/parser.y"+#line 590 "src/parser.y"                                 {   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); }-#line 3142 "src/parser.c"+#line 3126 "src/parser.c"     break;    case 76: /* Term: Term '.' '[' Query ']' '?'  */-#line 594 "src/parser.y"+#line 593 "src/parser.y"                            {   (yyval.blk) = gen_index_opt((yyvsp[-5].blk), (yyvsp[-2].blk)); }-#line 3150 "src/parser.c"+#line 3134 "src/parser.c"     break;    case 77: /* Term: Term '.' '[' Query ']'  */-#line 597 "src/parser.y"+#line 596 "src/parser.y"                                     {   (yyval.blk) = gen_index((yyvsp[-4].blk), (yyvsp[-1].blk)); }-#line 3158 "src/parser.c"+#line 3142 "src/parser.c"     break;    case 78: /* Term: Term '[' ']' '?'  */-#line 600 "src/parser.y"+#line 599 "src/parser.y"                  {   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); }-#line 3166 "src/parser.c"+#line 3150 "src/parser.c"     break;    case 79: /* Term: Term '[' ']'  */-#line 603 "src/parser.y"+#line 602 "src/parser.y"                           {   (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); }-#line 3174 "src/parser.c"+#line 3158 "src/parser.c"     break;    case 80: /* Term: Term '.' '[' ']' '?'  */-#line 606 "src/parser.y"+#line 605 "src/parser.y"                      {   (yyval.blk) = block_join((yyvsp[-4].blk), gen_op_simple(EACH_OPT)); }-#line 3182 "src/parser.c"+#line 3166 "src/parser.c"     break;    case 81: /* Term: Term '.' '[' ']'  */-#line 609 "src/parser.y"+#line 608 "src/parser.y"                               {   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH)); }-#line 3190 "src/parser.c"+#line 3174 "src/parser.c"     break;    case 82: /* Term: Term '[' Query ':' Query ']' '?'  */-#line 612 "src/parser.y"+#line 611 "src/parser.y"                                  {   (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); }-#line 3198 "src/parser.c"+#line 3182 "src/parser.c"     break;    case 83: /* Term: Term '[' Query ':' ']' '?'  */-#line 615 "src/parser.y"+#line 614 "src/parser.y"                            {   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); }-#line 3206 "src/parser.c"+#line 3190 "src/parser.c"     break;    case 84: /* Term: Term '[' ':' Query ']' '?'  */-#line 618 "src/parser.y"+#line 617 "src/parser.y"                            {   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); }-#line 3214 "src/parser.c"+#line 3198 "src/parser.c"     break;    case 85: /* Term: Term '[' Query ':' Query ']'  */-#line 621 "src/parser.y"+#line 620 "src/parser.y"                                           {   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); }-#line 3222 "src/parser.c"+#line 3206 "src/parser.c"     break;    case 86: /* Term: Term '[' Query ':' ']'  */-#line 624 "src/parser.y"+#line 623 "src/parser.y"                                     {   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); }-#line 3230 "src/parser.c"+#line 3214 "src/parser.c"     break;    case 87: /* Term: Term '[' ':' Query ']'  */-#line 627 "src/parser.y"+#line 626 "src/parser.y"                                     {   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); }-#line 3238 "src/parser.c"+#line 3222 "src/parser.c"     break;    case 88: /* Term: Term '?'  */-#line 630 "src/parser.y"+#line 629 "src/parser.y"          {   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); }-#line 3246 "src/parser.c"+#line 3230 "src/parser.c"     break;    case 89: /* Term: LITERAL  */-#line 633 "src/parser.y"+#line 632 "src/parser.y"         {   (yyval.blk) = gen_const((yyvsp[0].literal)); }-#line 3254 "src/parser.c"+#line 3238 "src/parser.c"     break;    case 90: /* Term: String  */-#line 636 "src/parser.y"+#line 635 "src/parser.y"        {   (yyval.blk) = (yyvsp[0].blk); }-#line 3262 "src/parser.c"+#line 3246 "src/parser.c"     break;    case 91: /* Term: FORMAT  */-#line 639 "src/parser.y"+#line 638 "src/parser.y"        {   (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); }-#line 3270 "src/parser.c"+#line 3254 "src/parser.c"     break;    case 92: /* Term: '-' Term  */-#line 642 "src/parser.y"+#line 641 "src/parser.y"          {   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); }-#line 3278 "src/parser.c"+#line 3262 "src/parser.c"     break;    case 93: /* Term: '(' Query ')'  */-#line 645 "src/parser.y"+#line 644 "src/parser.y"               {   (yyval.blk) = (yyvsp[-1].blk); }-#line 3286 "src/parser.c"+#line 3270 "src/parser.c"     break;    case 94: /* Term: '[' Query ']'  */-#line 648 "src/parser.y"+#line 647 "src/parser.y"               {   (yyval.blk) = gen_collect((yyvsp[-1].blk)); }-#line 3294 "src/parser.c"+#line 3278 "src/parser.c"     break;    case 95: /* Term: '[' ']'  */-#line 651 "src/parser.y"+#line 650 "src/parser.y"         {   (yyval.blk) = gen_const(jv_array()); }-#line 3302 "src/parser.c"+#line 3286 "src/parser.c"     break;    case 96: /* Term: '{' DictPairs '}'  */-#line 654 "src/parser.y"+#line 653 "src/parser.y"                   {   block o = gen_const_object((yyvsp[-1].blk));   if (o.first != NULL)@@ -3310,103 +3294,103 @@ yyreduce:   else     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP)); }-#line 3314 "src/parser.c"+#line 3298 "src/parser.c"     break;    case 97: /* Term: "reduce" Expr "as" Patterns '(' Query ';' Query ')'  */-#line 661 "src/parser.y"+#line 660 "src/parser.y"                                                     {   (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); }-#line 3322 "src/parser.c"+#line 3306 "src/parser.c"     break;    case 98: /* Term: "foreach" Expr "as" Patterns '(' Query ';' Query ';' Query ')'  */-#line 664 "src/parser.y"+#line 663 "src/parser.y"                                                                {   (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); }-#line 3330 "src/parser.c"+#line 3314 "src/parser.c"     break;    case 99: /* Term: "foreach" Expr "as" Patterns '(' Query ';' Query ')'  */-#line 667 "src/parser.y"+#line 666 "src/parser.y"                                                      {   (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); }-#line 3338 "src/parser.c"+#line 3322 "src/parser.c"     break;    case 100: /* Term: "if" Query "then" Query ElseBody  */-#line 670 "src/parser.y"+#line 669 "src/parser.y"                                  {   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); }-#line 3346 "src/parser.c"+#line 3330 "src/parser.c"     break;    case 101: /* Term: "if" Query "then" error  */-#line 673 "src/parser.y"+#line 672 "src/parser.y"                         {   FAIL((yyloc), "Possibly unterminated 'if' statement");   (yyval.blk) = (yyvsp[-2].blk); }-#line 3355 "src/parser.c"+#line 3339 "src/parser.c"     break;    case 102: /* Term: "try" Expr "catch" Expr  */-#line 677 "src/parser.y"+#line 676 "src/parser.y"                         {   (yyval.blk) = gen_try((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3363 "src/parser.c"+#line 3347 "src/parser.c"     break;    case 103: /* Term: "try" Expr "catch" error  */-#line 680 "src/parser.y"+#line 679 "src/parser.y"                          {   FAIL((yyloc), "Possibly unterminated 'try' statement");   (yyval.blk) = (yyvsp[-2].blk); }-#line 3372 "src/parser.c"+#line 3356 "src/parser.c"     break;    case 104: /* Term: "try" Expr  */-#line 684 "src/parser.y"+#line 683 "src/parser.y"            {   (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK)); }-#line 3380 "src/parser.c"+#line 3364 "src/parser.c"     break;    case 105: /* Term: '$' '$' '$' BINDING  */-#line 702 "src/parser.y"+#line 701 "src/parser.y"                     {   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADVN, jv_string_value((yyvsp[0].literal))));   jv_free((yyvsp[0].literal)); }-#line 3389 "src/parser.c"+#line 3373 "src/parser.c"     break;    case 106: /* Term: BINDING  */-#line 706 "src/parser.y"+#line 705 "src/parser.y"         {   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));   jv_free((yyvsp[0].literal)); }-#line 3398 "src/parser.c"+#line 3382 "src/parser.c"     break;    case 107: /* Term: "$__loc__"  */-#line 710 "src/parser.y"+#line 709 "src/parser.y"            {   (yyval.blk) = gen_loc_object(&(yyloc), locations); }-#line 3406 "src/parser.c"+#line 3390 "src/parser.c"     break;    case 108: /* Term: IDENT  */-#line 713 "src/parser.y"+#line 712 "src/parser.y"       {   const char *s = jv_string_value((yyvsp[0].literal));   if (strcmp(s, "false") == 0)@@ -3419,198 +3403,198 @@ yyreduce:     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));   jv_free((yyvsp[0].literal)); }-#line 3423 "src/parser.c"+#line 3407 "src/parser.c"     break;    case 109: /* Term: IDENT '(' Args ')'  */-#line 725 "src/parser.y"+#line 724 "src/parser.y"                    {   (yyval.blk) = gen_call(jv_string_value((yyvsp[-3].literal)), (yyvsp[-1].blk));   (yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk));   jv_free((yyvsp[-3].literal)); }-#line 3433 "src/parser.c"+#line 3417 "src/parser.c"     break;    case 110: /* Term: '(' error ')'  */-#line 730 "src/parser.y"+#line 729 "src/parser.y"               { (yyval.blk) = gen_noop(); }-#line 3439 "src/parser.c"+#line 3423 "src/parser.c"     break;    case 111: /* Term: '[' error ']'  */-#line 731 "src/parser.y"+#line 730 "src/parser.y"               { (yyval.blk) = gen_noop(); }-#line 3445 "src/parser.c"+#line 3429 "src/parser.c"     break;    case 112: /* Term: Term '[' error ']'  */-#line 732 "src/parser.y"+#line 731 "src/parser.y"                    { (yyval.blk) = (yyvsp[-3].blk); }-#line 3451 "src/parser.c"+#line 3435 "src/parser.c"     break;    case 113: /* Term: '{' error '}'  */-#line 733 "src/parser.y"+#line 732 "src/parser.y"               { (yyval.blk) = gen_noop(); }-#line 3457 "src/parser.c"+#line 3441 "src/parser.c"     break;    case 114: /* Args: Arg  */-#line 736 "src/parser.y"+#line 735 "src/parser.y"     {   (yyval.blk) = (yyvsp[0].blk); }-#line 3465 "src/parser.c"+#line 3449 "src/parser.c"     break;    case 115: /* Args: Args ';' Arg  */-#line 739 "src/parser.y"+#line 738 "src/parser.y"              {   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3473 "src/parser.c"+#line 3457 "src/parser.c"     break;    case 116: /* Arg: Query  */-#line 744 "src/parser.y"+#line 743 "src/parser.y"       {   (yyval.blk) = gen_lambda((yyvsp[0].blk)); }-#line 3481 "src/parser.c"+#line 3465 "src/parser.c"     break; -  case 117: /* RepPatterns: RepPatterns "?//" Pattern  */-#line 749 "src/parser.y"-                          {-  (yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk)));+  case 117: /* RepPatterns: RepPatterns '?' "//" Pattern  */+#line 748 "src/parser.y"+                             {+  (yyval.blk) = BLOCK((yyvsp[-3].blk), gen_destructure_alt((yyvsp[0].blk))); }-#line 3489 "src/parser.c"+#line 3473 "src/parser.c"     break;    case 118: /* RepPatterns: Pattern  */-#line 752 "src/parser.y"+#line 751 "src/parser.y"         {   (yyval.blk) = gen_destructure_alt((yyvsp[0].blk)); }-#line 3497 "src/parser.c"+#line 3481 "src/parser.c"     break; -  case 119: /* Patterns: RepPatterns "?//" Pattern  */-#line 757 "src/parser.y"-                          {-  (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));+  case 119: /* Patterns: RepPatterns '?' "//" Pattern  */+#line 756 "src/parser.y"+                              {+  (yyval.blk) = BLOCK((yyvsp[-3].blk), (yyvsp[0].blk)); }-#line 3505 "src/parser.c"+#line 3489 "src/parser.c"     break;    case 120: /* Patterns: Pattern  */-#line 760 "src/parser.y"+#line 759 "src/parser.y"         {   (yyval.blk) = (yyvsp[0].blk); }-#line 3513 "src/parser.c"+#line 3497 "src/parser.c"     break;    case 121: /* Pattern: BINDING  */-#line 765 "src/parser.y"+#line 764 "src/parser.y"         {   (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));   jv_free((yyvsp[0].literal)); }-#line 3522 "src/parser.c"+#line 3506 "src/parser.c"     break;    case 122: /* Pattern: '[' ArrayPats ']'  */-#line 769 "src/parser.y"+#line 768 "src/parser.y"                   {   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); }-#line 3530 "src/parser.c"+#line 3514 "src/parser.c"     break;    case 123: /* Pattern: '{' ObjPats '}'  */-#line 772 "src/parser.y"+#line 771 "src/parser.y"                 {   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); }-#line 3538 "src/parser.c"+#line 3522 "src/parser.c"     break;    case 124: /* ArrayPats: Pattern  */-#line 777 "src/parser.y"+#line 776 "src/parser.y"         {   (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk)); }-#line 3546 "src/parser.c"+#line 3530 "src/parser.c"     break;    case 125: /* ArrayPats: ArrayPats ',' Pattern  */-#line 780 "src/parser.y"+#line 779 "src/parser.y"                       {   (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3554 "src/parser.c"+#line 3538 "src/parser.c"     break;    case 126: /* ObjPats: ObjPat  */-#line 785 "src/parser.y"+#line 784 "src/parser.y"        {   (yyval.blk) = (yyvsp[0].blk); }-#line 3562 "src/parser.c"+#line 3546 "src/parser.c"     break;    case 127: /* ObjPats: ObjPats ',' ObjPat  */-#line 788 "src/parser.y"+#line 787 "src/parser.y"                    {   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3570 "src/parser.c"+#line 3554 "src/parser.c"     break;    case 128: /* ObjPat: BINDING  */-#line 793 "src/parser.y"+#line 792 "src/parser.y"         {   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)))); }-#line 3578 "src/parser.c"+#line 3562 "src/parser.c"     break;    case 129: /* ObjPat: BINDING ':' Pattern  */-#line 796 "src/parser.y"+#line 795 "src/parser.y"                     {   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), BLOCK(gen_op_simple(DUP), gen_op_unbound(STOREV, jv_string_value((yyvsp[-2].literal))), (yyvsp[0].blk))); }-#line 3586 "src/parser.c"+#line 3570 "src/parser.c"     break;    case 130: /* ObjPat: IDENT ':' Pattern  */-#line 799 "src/parser.y"+#line 798 "src/parser.y"                   {   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); }-#line 3594 "src/parser.c"+#line 3578 "src/parser.c"     break;    case 131: /* ObjPat: Keyword ':' Pattern  */-#line 802 "src/parser.y"+#line 801 "src/parser.y"                     {   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); }-#line 3602 "src/parser.c"+#line 3586 "src/parser.c"     break;    case 132: /* ObjPat: String ':' Pattern  */-#line 805 "src/parser.y"+#line 804 "src/parser.y"                    {   (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3610 "src/parser.c"+#line 3594 "src/parser.c"     break;    case 133: /* ObjPat: '(' Query ')' ':' Pattern  */-#line 808 "src/parser.y"+#line 807 "src/parser.y"                           {   jv msg = check_object_key((yyvsp[-3].blk));   if (jv_is_valid(msg)) {@@ -3619,267 +3603,267 @@ yyreduce:   jv_free(msg);   (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk)); }-#line 3623 "src/parser.c"+#line 3607 "src/parser.c"     break;    case 134: /* ObjPat: error ':' Pattern  */-#line 816 "src/parser.y"+#line 815 "src/parser.y"                   {   FAIL((yyloc), "May need parentheses around object key expression");   (yyval.blk) = (yyvsp[0].blk); }-#line 3632 "src/parser.c"+#line 3616 "src/parser.c"     break;    case 135: /* Keyword: "as"  */-#line 822 "src/parser.y"+#line 821 "src/parser.y"      {   (yyval.literal) = jv_string("as"); }-#line 3640 "src/parser.c"+#line 3624 "src/parser.c"     break;    case 136: /* Keyword: "def"  */-#line 825 "src/parser.y"+#line 824 "src/parser.y"       {   (yyval.literal) = jv_string("def"); }-#line 3648 "src/parser.c"+#line 3632 "src/parser.c"     break;    case 137: /* Keyword: "module"  */-#line 828 "src/parser.y"+#line 827 "src/parser.y"          {   (yyval.literal) = jv_string("module"); }-#line 3656 "src/parser.c"+#line 3640 "src/parser.c"     break;    case 138: /* Keyword: "import"  */-#line 831 "src/parser.y"+#line 830 "src/parser.y"          {   (yyval.literal) = jv_string("import"); }-#line 3664 "src/parser.c"+#line 3648 "src/parser.c"     break;    case 139: /* Keyword: "include"  */-#line 834 "src/parser.y"+#line 833 "src/parser.y"           {   (yyval.literal) = jv_string("include"); }-#line 3672 "src/parser.c"+#line 3656 "src/parser.c"     break;    case 140: /* Keyword: "if"  */-#line 837 "src/parser.y"+#line 836 "src/parser.y"      {   (yyval.literal) = jv_string("if"); }-#line 3680 "src/parser.c"+#line 3664 "src/parser.c"     break;    case 141: /* Keyword: "then"  */-#line 840 "src/parser.y"+#line 839 "src/parser.y"        {   (yyval.literal) = jv_string("then"); }-#line 3688 "src/parser.c"+#line 3672 "src/parser.c"     break;    case 142: /* Keyword: "else"  */-#line 843 "src/parser.y"+#line 842 "src/parser.y"        {   (yyval.literal) = jv_string("else"); }-#line 3696 "src/parser.c"+#line 3680 "src/parser.c"     break;    case 143: /* Keyword: "elif"  */-#line 846 "src/parser.y"+#line 845 "src/parser.y"        {   (yyval.literal) = jv_string("elif"); }-#line 3704 "src/parser.c"+#line 3688 "src/parser.c"     break;    case 144: /* Keyword: "reduce"  */-#line 849 "src/parser.y"+#line 848 "src/parser.y"          {   (yyval.literal) = jv_string("reduce"); }-#line 3712 "src/parser.c"+#line 3696 "src/parser.c"     break;    case 145: /* Keyword: "foreach"  */-#line 852 "src/parser.y"+#line 851 "src/parser.y"           {   (yyval.literal) = jv_string("foreach"); }-#line 3720 "src/parser.c"+#line 3704 "src/parser.c"     break;    case 146: /* Keyword: "end"  */-#line 855 "src/parser.y"+#line 854 "src/parser.y"       {   (yyval.literal) = jv_string("end"); }-#line 3728 "src/parser.c"+#line 3712 "src/parser.c"     break;    case 147: /* Keyword: "and"  */-#line 858 "src/parser.y"+#line 857 "src/parser.y"       {   (yyval.literal) = jv_string("and"); }-#line 3736 "src/parser.c"+#line 3720 "src/parser.c"     break;    case 148: /* Keyword: "or"  */-#line 861 "src/parser.y"+#line 860 "src/parser.y"      {   (yyval.literal) = jv_string("or"); }-#line 3744 "src/parser.c"+#line 3728 "src/parser.c"     break;    case 149: /* Keyword: "try"  */-#line 864 "src/parser.y"+#line 863 "src/parser.y"       {   (yyval.literal) = jv_string("try"); }-#line 3752 "src/parser.c"+#line 3736 "src/parser.c"     break;    case 150: /* Keyword: "catch"  */-#line 867 "src/parser.y"+#line 866 "src/parser.y"         {   (yyval.literal) = jv_string("catch"); }-#line 3760 "src/parser.c"+#line 3744 "src/parser.c"     break;    case 151: /* Keyword: "label"  */-#line 870 "src/parser.y"+#line 869 "src/parser.y"         {   (yyval.literal) = jv_string("label"); }-#line 3768 "src/parser.c"+#line 3752 "src/parser.c"     break;    case 152: /* Keyword: "break"  */-#line 873 "src/parser.y"+#line 872 "src/parser.y"         {   (yyval.literal) = jv_string("break"); }-#line 3776 "src/parser.c"+#line 3760 "src/parser.c"     break;    case 153: /* DictPairs: %empty  */-#line 879 "src/parser.y"+#line 878 "src/parser.y"        {   (yyval.blk) = gen_noop(); }-#line 3784 "src/parser.c"+#line 3768 "src/parser.c"     break;    case 154: /* DictPairs: DictPair  */-#line 882 "src/parser.y"+#line 881 "src/parser.y"          {   (yyval.blk) = (yyvsp[0].blk); }-#line 3792 "src/parser.c"+#line 3776 "src/parser.c"     break;    case 155: /* DictPairs: DictPair ',' DictPairs  */-#line 885 "src/parser.y"+#line 884 "src/parser.y"                        {   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3800 "src/parser.c"+#line 3784 "src/parser.c"     break;    case 156: /* DictPair: IDENT ':' DictExpr  */-#line 890 "src/parser.y"+#line 889 "src/parser.y"                    {   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); }-#line 3808 "src/parser.c"+#line 3792 "src/parser.c"     break;    case 157: /* DictPair: Keyword ':' DictExpr  */-#line 893 "src/parser.y"+#line 892 "src/parser.y"                      {   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); }-#line 3816 "src/parser.c"+#line 3800 "src/parser.c"     break;    case 158: /* DictPair: String ':' DictExpr  */-#line 896 "src/parser.y"+#line 895 "src/parser.y"                     {   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3824 "src/parser.c"+#line 3808 "src/parser.c"     break;    case 159: /* DictPair: String  */-#line 899 "src/parser.y"+#line 898 "src/parser.y"        {   (yyval.blk) = gen_dictpair((yyvsp[0].blk), BLOCK(gen_op_simple(POP), gen_op_simple(DUP2),                               gen_op_simple(DUP2), gen_op_simple(INDEX))); }-#line 3833 "src/parser.c"+#line 3817 "src/parser.c"     break;    case 160: /* DictPair: BINDING ':' DictExpr  */-#line 903 "src/parser.y"+#line 902 "src/parser.y"                      {   (yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))),                     (yyvsp[0].blk));   jv_free((yyvsp[-2].literal)); }-#line 3843 "src/parser.c"+#line 3827 "src/parser.c"     break;    case 161: /* DictPair: BINDING  */-#line 908 "src/parser.y"+#line 907 "src/parser.y"         {   (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),                     gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))))); }-#line 3852 "src/parser.c"+#line 3836 "src/parser.c"     break;    case 162: /* DictPair: IDENT  */-#line 912 "src/parser.y"+#line 911 "src/parser.y"       {   (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),                     gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); }-#line 3861 "src/parser.c"+#line 3845 "src/parser.c"     break;    case 163: /* DictPair: "$__loc__"  */-#line 916 "src/parser.y"+#line 915 "src/parser.y"            {   (yyval.blk) = gen_dictpair(gen_const(jv_string("__loc__")),                     gen_loc_object(&(yyloc), locations)); }-#line 3870 "src/parser.c"+#line 3854 "src/parser.c"     break;    case 164: /* DictPair: Keyword  */-#line 920 "src/parser.y"+#line 919 "src/parser.y"         {   (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),                     gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); }-#line 3879 "src/parser.c"+#line 3863 "src/parser.c"     break;    case 165: /* DictPair: '(' Query ')' ':' DictExpr  */-#line 924 "src/parser.y"+#line 923 "src/parser.y"                            {   jv msg = check_object_key((yyvsp[-3].blk));   if (jv_is_valid(msg)) {@@ -3888,36 +3872,36 @@ yyreduce:   jv_free(msg);   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); }-#line 3892 "src/parser.c"+#line 3876 "src/parser.c"     break;    case 166: /* DictPair: error ':' DictExpr  */-#line 932 "src/parser.y"+#line 931 "src/parser.y"                    {   FAIL((yylsp[-2]), "May need parentheses around object key expression");   (yyval.blk) = (yyvsp[0].blk); }-#line 3901 "src/parser.c"+#line 3885 "src/parser.c"     break;    case 167: /* DictExpr: DictExpr '|' DictExpr  */-#line 938 "src/parser.y"+#line 937 "src/parser.y"                       {   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }-#line 3909 "src/parser.c"+#line 3893 "src/parser.c"     break;    case 168: /* DictExpr: Expr  */-#line 941 "src/parser.y"+#line 940 "src/parser.y"      {   (yyval.blk) = (yyvsp[0].blk); }-#line 3917 "src/parser.c"+#line 3901 "src/parser.c"     break;  -#line 3921 "src/parser.c"+#line 3905 "src/parser.c"        default: break;     }@@ -4146,7 +4130,7 @@ yyreturnlab:   return yyresult; } -#line 944 "src/parser.y"+#line 943 "src/parser.y"   int jq_parse(struct locfile* locations, block* answer) {

src/parser.h

@@ -111,14 +111,13 @@ struct lexer_param;     SETDEFINEDOR = 293,            /* "//="  */     LESSEQ = 294,                  /* "<="  */     GREATEREQ = 295,               /* ">="  */-    ALTERNATION = 296,             /* "?//"  */-    QQSTRING_START = 297,          /* QQSTRING_START  */-    QQSTRING_TEXT = 298,           /* QQSTRING_TEXT  */-    QQSTRING_INTERP_START = 299,   /* QQSTRING_INTERP_START  */-    QQSTRING_INTERP_END = 300,     /* QQSTRING_INTERP_END  */-    QQSTRING_END = 301,            /* QQSTRING_END  */-    FUNCDEF = 302,                 /* FUNCDEF  */-    NONOPT = 303                   /* NONOPT  */+    QQSTRING_START = 296,          /* QQSTRING_START  */+    QQSTRING_TEXT = 297,           /* QQSTRING_TEXT  */+    QQSTRING_INTERP_START = 298,   /* QQSTRING_INTERP_START  */+    QQSTRING_INTERP_END = 299,     /* QQSTRING_INTERP_END  */+    QQSTRING_END = 300,            /* QQSTRING_END  */+    FUNCDEF = 301,                 /* FUNCDEF  */+    NONOPT = 302                   /* NONOPT  */   };   typedef enum yytokentype yytoken_kind_t; #endif@@ -165,14 +164,13 @@ struct lexer_param; #define SETDEFINEDOR 293 #define LESSEQ 294 #define GREATEREQ 295-#define ALTERNATION 296-#define QQSTRING_START 297-#define QQSTRING_TEXT 298-#define QQSTRING_INTERP_START 299-#define QQSTRING_INTERP_END 300-#define QQSTRING_END 301-#define FUNCDEF 302-#define NONOPT 303+#define QQSTRING_START 296+#define QQSTRING_TEXT 297+#define QQSTRING_INTERP_START 298+#define QQSTRING_INTERP_END 299+#define QQSTRING_END 300+#define FUNCDEF 301+#define NONOPT 302  /* Value type.  */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED@@ -183,7 +181,7 @@ union YYSTYPE   jv literal;   block blk; -#line 187 "src/parser.h"+#line 185 "src/parser.h"  }; typedef union YYSTYPE YYSTYPE;

src/parser.y

@@ -85,7 +85,6 @@ struct lexer_param; %token SETDEFINEDOR "//=" %token LESSEQ "<=" %token GREATEREQ ">="-%token ALTERNATION "?//"  %token QQSTRING_START %token <literal> QQSTRING_TEXT@@ -746,16 +745,16 @@ Query { }  RepPatterns:-RepPatterns "?//" Pattern {-  $$ = BLOCK($1, gen_destructure_alt($3));+RepPatterns '?' "//" Pattern {+  $$ = BLOCK($1, gen_destructure_alt($4)); } | Pattern {   $$ = gen_destructure_alt($1); }  Patterns:-RepPatterns "?//" Pattern {-  $$ = BLOCK($1, $3);+RepPatterns '?' "//" Pattern {+  $$ = BLOCK($1, $4); } | Pattern {   $$ = $1;

tests/jq.test

@@ -1485,6 +1485,11 @@ try error(0) // 1 null 1 +# Lex token test #3589, like error(0)? // 1+error(0) ?// 1+null+1+ 1, try error(2), 3 null 1