Allow .["foo"].["bar"]
authorNicolas Williams <nico@cryptonector.com>
Fri, 8 Mar 2019 15:59:47 +0000 (09:59 -0600)
committerNicolas Williams <nico@cryptonector.com>
Mon, 25 Mar 2019 04:23:16 +0000 (23:23 -0500)
src/parser.c
src/parser.y

index d6d4ba055161e308b62ccc01d1c7f4c9e94258ad..d9210a980b9c16c67454dad03274d6e93b033089 100644 (file)
@@ -678,16 +678,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  27
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2134
+#define YYLAST   2220
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  69
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  30
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  167
+#define YYNRULES  169
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  318
+#define YYNSTATES  322
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -748,13 +748,13 @@ static const yytype_uint16 yyrline[] =
      616,   621,   624,   627,   633,   636,   639,   647,   651,   654,
      657,   660,   663,   666,   669,   672,   675,   679,   685,   688,
      691,   694,   697,   700,   703,   706,   709,   712,   715,   718,
-     721,   724,   727,   730,   733,   740,   744,   753,   765,   770,
-     771,   772,   773,   776,   779,   784,   789,   792,   797,   800,
-     805,   809,   812,   817,   820,   825,   828,   833,   836,   839,
-     842,   845,   848,   856,   862,   865,   868,   871,   874,   877,
+     721,   724,   727,   730,   733,   736,   739,   746,   750,   759,
+     771,   776,   777,   778,   779,   782,   785,   790,   795,   798,
+     803,   806,   811,   815,   818,   823,   826,   831,   834,   839,
+     842,   845,   848,   851,   854,   862,   868,   871,   874,   877,
      880,   883,   886,   889,   892,   895,   898,   901,   904,   907,
-     910,   913,   916,   921,   924,   925,   926,   929,   932,   935,
-     938,   942,   946,   950,   954,   958,   962,   970
+     910,   913,   916,   919,   922,   927,   930,   931,   932,   935,
+     938,   941,   944,   948,   952,   956,   960,   964,   968,   976
 };
 #endif
 
@@ -797,52 +797,53 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -154
+#define YYPACT_NINF -157
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-154)))
+  (!!((Yystate) == (-157)))
 
-#define YYTABLE_NINF -154
+#define YYTABLE_NINF -156
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-154)))
+  (!!((Yytable_value) == (-156)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      24,   834,     3,    33,   -45,    -6,  -154,    18,  -154,    56,
-     834,   435,   435,   834,     4,     1,  -154,   834,   584,  2047,
-     284,   517,   350,  1352,   834,  -154,     0,  -154,    -3,    -3,
-     834,    33,   742,   834,  -154,  -154,    -9,  1758,     9,    57,
-      39,    64,  -154,    67,  -154,   -11,    11,  1182,  -154,  -154,
-    -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,
-    -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,  -154,
-      74,    18,    49,    10,  -154,   979,   -38,    47,   834,  2075,
-      54,    72,    59,    34,   834,   834,   834,   834,   834,   834,
-     834,   834,   834,   834,   834,   834,   834,   834,   834,   834,
-     834,   834,   834,   834,   834,   834,   834,   834,  -154,  -154,
-    1926,    79,   -25,    -3,   450,   125,  -154,  -154,  -154,  1926,
-     834,  -154,  -154,  1403,  1926,    55,  -154,  -154,     7,   834,
-     649,   -25,   -25,   714,    94,  -154,    81,  -154,  -154,  -154,
-    -154,  -154,  -154,   407,   170,  -154,   170,  1216,    80,  -154,
-     170,   170,  -154,   407,  1994,   207,   207,  1960,   345,   143,
-    1994,  1994,  1994,  1994,  1994,  1994,   207,   207,  1926,  1960,
-    1994,   207,   207,   -11,   -11,    86,    86,    86,  -154,   141,
-     -25,   896,   108,   103,   112,    97,    90,   834,    99,   929,
-      19,  -154,  -154,   834,  -154,    88,  -154,  2103,    75,  -154,
-    1454,  -154,  1658,    98,   100,  -154,  -154,   834,  -154,   834,
-    -154,   -15,  -154,   170,   114,    14,   114,   101,   170,   114,
-     114,  -154,  -154,  -154,   -42,   102,   106,   834,   158,   107,
-     -27,  -154,   109,   -25,   834,  -154,  -154,  1029,  -154,   806,
-     113,  -154,   169,  -154,  -154,  -154,  -154,     7,   117,  -154,
-     834,   834,  -154,  -154,   834,   834,  1926,  1792,  -154,   170,
-     170,   114,   -25,  -154,   -25,   -25,  1250,   120,   -25,   896,
-    -154,   -25,   144,  1926,   127,   130,  1079,  -154,  -154,  -154,
-     834,  1842,  1892,  1505,  1556,  -154,   114,   114,  -154,  -154,
-    -154,   126,   -25,  -154,  -154,  -154,  -154,  -154,   132,  1607,
-    -154,   834,   834,   834,   -25,  -154,  -154,  -154,  1708,  1284,
-    1129,  -154,  -154,  -154,   834,  -154,  1318,  -154
+      43,   838,    75,    28,    16,    22,  -157,    66,  -157,   108,
+     838,   161,   161,   838,    63,     1,  -157,   838,   588,  2133,
+     288,   521,   354,  1406,   838,  -157,     0,  -157,    14,    14,
+     838,    28,   746,   838,  -157,  -157,    -9,  1812,    17,    55,
+      99,   126,  -157,   127,  -157,    -6,    72,  1236,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
+     140,    66,    85,    78,  -157,   983,   -45,    82,   838,  2161,
+      86,    87,    83,   105,   838,   838,   838,   838,   838,   838,
+     838,   838,   838,   838,   838,   838,   838,   838,   838,   838,
+     838,   838,   838,   838,   838,   838,   838,   838,  -157,  -157,
+    1980,    96,   -26,    -3,   454,   142,  -157,  -157,  -157,  1980,
+     838,  -157,  -157,  1457,  1980,   -19,  -157,  -157,    10,   838,
+     653,   -26,   -26,   718,   109,  -157,    24,  -157,  -157,  -157,
+    -157,  -157,  -157,   411,   130,  -157,   130,  1270,    94,  -157,
+     130,   130,  -157,   411,  2048,   209,   209,  2014,   349,  2080,
+    2048,  2048,  2048,  2048,  2048,  2048,   209,   209,  1980,  2014,
+    2048,   209,   209,    -6,    -6,   101,   101,   101,  -157,   157,
+     -26,   900,   122,   117,   132,   838,   112,   107,   838,   116,
+     933,    11,  -157,  -157,   838,  -157,    81,  -157,  2189,    -2,
+    -157,  1508,  -157,  1712,   115,   118,  -157,  -157,   838,  -157,
+     838,  -157,   -20,  -157,   130,   129,    51,   129,   114,   130,
+     129,   129,  -157,  -157,  -157,   -13,   119,   125,   838,   175,
+     133,   -22,  -157,   135,   -26,   838,  1033,  -157,  -157,  1083,
+    -157,   810,   123,  -157,   181,  -157,  -157,  -157,  -157,    10,
+     136,  -157,   838,   838,  -157,  -157,   838,   838,  1980,  1846,
+    -157,   130,   130,   129,   -26,  -157,   -26,   -26,  1304,   137,
+     -26,   900,  -157,   -26,   149,  1980,   143,   145,   146,  1133,
+    -157,  -157,  -157,   838,  1896,  1946,  1559,  1610,  -157,   129,
+     129,  -157,  -157,  -157,   148,   -26,  -157,  -157,  -157,  -157,
+    -157,  -157,   147,  1661,  -157,   838,   838,   838,   -26,  -157,
+    -157,  -157,  1762,  1338,  1183,  -157,  -157,  -157,   838,  -157,
+    1372,  -157
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -850,54 +851,55 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,     0,     0,     6,   107,    83,    98,   100,    75,     0,
+       4,     0,     0,     6,   109,    83,   100,   102,    75,     0,
        0,     0,     0,     0,     0,     0,    62,     0,     0,     0,
-       0,     0,     0,     0,     0,    99,    48,     1,     0,     0,
+       0,     0,     0,     0,     0,   101,    48,     1,     0,     0,
        8,     6,     0,     0,    79,    64,     0,     0,     0,     0,
-      19,     0,    77,     0,    66,    33,     0,     0,   105,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   106,    86,
-       0,     0,    85,     0,   103,     0,     0,   164,     0,     0,
-     160,   165,     0,   154,     0,     0,     0,     0,     0,     0,
+      19,     0,    77,     0,    66,    33,     0,     0,   107,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   108,    86,
+       0,     0,    85,     0,   105,     0,     0,   166,     0,     0,
+     162,   167,     0,   156,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    22,     5,
       10,    82,     0,     0,     0,     0,    54,    53,     3,     2,
-       8,     7,    49,     0,   115,     0,   113,    66,     0,     0,
-       0,     0,     0,     0,     0,    76,     0,   109,   101,    87,
-      81,   110,   102,     0,     0,   112,     0,     0,   162,   163,
-       0,     0,   104,     0,    41,    42,    43,    26,    25,    24,
+       8,     7,    49,     0,   117,     0,   115,    66,     0,     0,
+       0,     0,     0,     0,     0,    76,     0,   111,   103,    87,
+      81,   112,   104,     0,     0,   114,     0,     0,   164,   165,
+       0,     0,   106,     0,    41,    42,    43,    26,    25,    24,
       28,    32,    35,    37,    40,    27,    46,    47,    29,    30,
       23,    44,    45,    31,    34,    36,    38,    39,    78,     0,
-       0,     0,     0,     0,   119,    84,     0,     0,    91,     0,
-       0,     9,    50,     0,   108,     0,    61,     0,     0,    57,
-       0,    17,     0,     0,     0,    20,    18,     0,    67,     0,
-      63,     0,   156,     0,   167,    73,   157,     0,     0,   159,
-     158,   155,   120,   123,     0,     0,     0,     0,     0,     0,
-       0,   125,     0,     0,     0,    80,   111,     0,    90,     0,
-      89,    52,     0,   114,    65,    59,    60,     0,     0,    55,
-       0,     0,    16,    15,     0,     0,    21,     0,    72,     0,
-       0,   161,     0,   121,     0,     0,     0,   127,     0,     0,
-     122,     0,   118,    11,    97,    96,     0,    88,    51,    58,
-       0,     0,     0,     0,     0,    68,    71,   166,   124,   133,
-     129,     0,     0,   131,   126,   130,    94,    93,    95,     0,
-      70,     0,     0,     0,     0,   128,    92,    56,     0,     0,
-       0,   132,    69,    12,     0,    14,     0,    13
+       0,     0,     0,     0,   121,     0,    84,     0,     0,    93,
+       0,     0,     9,    50,     0,   110,     0,    61,     0,     0,
+      57,     0,    17,     0,     0,     0,    20,    18,     0,    67,
+       0,    63,     0,   158,     0,   169,    73,   159,     0,     0,
+     161,   160,   157,   122,   125,     0,     0,     0,     0,     0,
+       0,     0,   127,     0,     0,     0,     0,    80,   113,     0,
+      92,     0,    89,    52,     0,   116,    65,    59,    60,     0,
+       0,    55,     0,     0,    16,    15,     0,     0,    21,     0,
+      72,     0,     0,   163,     0,   123,     0,     0,     0,   129,
+       0,     0,   124,     0,   120,    11,    91,    99,    98,     0,
+      88,    51,    58,     0,     0,     0,     0,     0,    68,    71,
+     168,   126,   135,   131,     0,     0,   133,   128,   132,    90,
+      96,    95,    97,     0,    70,     0,     0,     0,     0,   130,
+      94,    56,     0,     0,     0,   134,    69,    12,     0,    14,
+       0,    13
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -154,  -154,  -154,   160,    82,    -1,  -154,  -154,   174,   -12,
-    -154,   -43,     6,  -154,  -154,    78,  -101,   -93,    -4,  -154,
-      17,  -154,   -76,  -153,  -154,  -154,   -57,   -18,  -107,  -154
+    -157,  -157,  -157,   177,    92,    -1,  -157,  -157,   184,   -11,
+    -157,   -43,     5,  -157,  -157,    89,   -98,  -140,    -4,  -157,
+      23,  -157,   -61,  -156,  -157,  -157,   -53,   -18,  -106,  -157
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     2,     3,    30,   118,   110,    31,    32,   115,    24,
-     198,   199,    25,    44,   127,   136,   253,   214,    26,   125,
-     126,   182,   183,   184,   224,   230,   231,    81,    82,    83
+     199,   200,    25,    44,   127,   136,   255,   215,    26,   125,
+     126,   182,   183,   184,   225,   231,   232,    81,    82,    83
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -905,349 +907,360 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      23,    68,    42,    27,    71,   111,   262,    38,    39,    37,
-     143,   196,    40,   112,   111,    33,    45,    47,   120,   111,
-      75,   269,   131,   241,   263,   144,    72,   223,    80,   119,
-     145,   123,   124,   143,   116,   116,   212,   179,    16,     1,
-     180,   270,   181,   105,   106,   107,   221,   108,   144,    28,
-      29,   128,    34,   216,   129,   203,   204,   219,   220,    35,
-      36,   149,   111,    43,   113,   114,    41,   133,   134,   197,
-     132,   135,   137,   113,   114,   139,   141,   147,   113,   114,
-     272,   242,   153,   154,   155,   156,   157,   158,   159,   160,
+      23,    68,    42,   143,    71,   111,   217,    38,    39,    37,
+     220,   221,    40,   112,   197,   243,    45,    47,   144,   120,
+      75,    71,   111,   145,   224,    72,   271,    80,   143,   119,
+     131,   123,   124,   116,   116,   264,   179,   213,    16,   180,
+     194,   181,   195,   144,    28,    29,   272,   222,   105,   106,
+     107,   128,   108,   265,   129,    16,   111,   249,     1,   250,
+     111,   149,   185,    43,   113,   114,   209,   210,   132,   211,
+     204,   205,   198,   244,   260,    27,    33,   147,   274,   263,
+      34,   113,   114,   154,   155,   156,   157,   158,   159,   160,
      161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   140,   120,   288,
-     146,   289,   290,   189,   193,   293,   194,   150,   295,   185,
-     258,   113,   114,   208,   209,   261,   210,   152,   200,   202,
-     208,   209,   206,   244,   247,   151,   248,   178,   190,   305,
-     215,   207,   215,   218,   108,   222,   215,   215,   233,    80,
-     234,   311,  -117,    85,    86,   235,   236,   238,   254,    80,
-     255,   259,   267,   232,   260,   264,   286,   287,    88,   265,
-     268,   277,   271,   278,     4,     5,     6,     7,     8,   246,
-     280,    96,    97,   292,  -116,   296,   237,   229,   297,   304,
-     306,   121,   124,   101,   102,   103,   104,   105,   106,   107,
-      15,   108,   191,   117,   279,   195,   256,   312,   257,   215,
-     243,    16,   294,     0,   215,     0,     0,  -154,  -154,     0,
-       0,     0,     0,   213,     0,     0,   266,     0,     0,     0,
-      18,     0,    19,   273,    20,    21,     0,    22,   276,     0,
-       0,     0,     0,     0,     0,  -154,  -154,     0,     0,   281,
-     282,   232,     0,   283,   284,   215,   215,  -154,  -154,   103,
-     104,   105,   106,   107,     0,   108,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   229,     0,     0,     0,   299,
-       0,     0,     0,     0,   -74,    69,     0,     0,    70,   -74,
-       0,    71,     0,   -74,   -74,   -74,   -74,   -74,     0,     0,
-     308,   309,   310,   -74,   -74,   -74,     0,     0,   -74,   -74,
-     -74,     0,   -74,   316,     0,     0,   -74,   -74,   -74,   -74,
-     -74,   -74,   -74,   -74,     0,    16,     0,     0,   -74,     0,
-       0,   -74,   -74,   -74,   -74,   -74,   -74,   -74,   -74,   -74,
-     -74,     0,   -74,   -74,     0,   -74,     0,   -74,   -74,   -74,
-     -74,    76,   -74,     0,    77,    85,    86,    71,     0,     0,
-       0,     0,     0,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,    96,    97,     0,     0,     0,     0,     0,
-       0,    16,     0,     0,     0,   101,   102,   103,   104,   105,
-     106,   107,     0,   108,     0,     0,     0,     0,   211,     0,
-      78,    77,    79,     0,    71,     0,     0,     0,  -153,     0,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,     4,
-       5,     6,     7,     8,     0,     0,     0,     0,    16,     0,
-       0,   186,     0,     0,     4,     5,     6,     7,     8,     0,
-       0,     0,     0,     0,     9,    15,     0,    78,    10,    79,
-       0,     0,    11,    12,     0,  -153,    16,    13,     0,    14,
-      15,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    16,     0,     0,     0,    18,     0,    19,     0,    20,
-      21,     0,    22,    17,     0,     0,     0,     0,     0,     0,
-      18,     0,    19,   187,    20,    21,   188,    22,    73,     0,
-       0,     4,     5,     6,     7,     8,     0,     0,     0,     0,
-       0,     9,     0,     0,     0,    10,     0,     0,     0,    11,
-      12,     0,     0,     0,    13,     0,    14,    15,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      17,     0,     0,     0,     0,     0,     0,    18,     0,    19,
-       0,    20,    21,    74,    22,    46,     0,     0,     4,     5,
+     171,   172,   173,   174,   175,   176,   177,    35,   291,   120,
+     292,   293,    36,   190,   296,   113,   114,   298,   186,   113,
+     114,   289,   290,   209,   210,    41,   246,   133,   201,   203,
+     134,   135,   207,   137,     4,     5,     6,     7,     8,   309,
+     216,   139,   216,   140,   141,   146,   216,   216,    80,   150,
+     151,   152,   315,   153,   178,   191,   208,   219,    80,   108,
+      15,   223,   234,   233,   235,     4,     5,     6,     7,     8,
+     237,    16,  -119,   238,   240,   256,   261,   262,   257,   269,
+     248,   280,   266,   214,   236,   281,   230,   239,   267,  -118,
+      18,    15,    19,   124,    20,    21,   270,    22,   273,   283,
+     295,   299,    16,   300,   301,   310,   282,   258,   121,   259,
+     216,   308,   192,   117,   316,   216,   196,   245,   297,  -156,
+    -156,    18,     0,    19,     0,    20,    21,   268,    22,     0,
+       0,     0,     0,     0,   275,     0,     0,     0,     0,     0,
+     279,     0,     0,     0,     0,     0,     0,  -156,  -156,     0,
+       0,   284,   285,   233,     0,   286,   287,   216,   216,  -156,
+    -156,   103,   104,   105,   106,   107,     0,   108,     0,     0,
+       0,     0,     0,     0,     0,     0,   230,     0,     0,     0,
+       0,     0,   303,     0,     0,     0,     0,     0,   -74,    69,
+       0,     0,    70,   -74,     0,    71,     0,   -74,   -74,   -74,
+     -74,   -74,     0,     0,   312,   313,   314,   -74,   -74,   -74,
+       0,     0,   -74,   -74,   -74,     0,   -74,   320,     0,     0,
+     -74,   -74,   -74,   -74,   -74,   -74,   -74,   -74,     0,    16,
+       0,     0,   -74,     0,     0,   -74,   -74,   -74,   -74,   -74,
+     -74,   -74,   -74,   -74,   -74,     0,   -74,   -74,     0,   -74,
+       0,   -74,   -74,   -74,   -74,    76,   -74,     0,    77,    85,
+      86,    71,     0,     0,     0,     0,     0,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,     0,    96,    97,     0,
+       0,     0,     0,     0,     0,    16,     0,     0,     0,   101,
+     102,   103,   104,   105,   106,   107,     0,   108,     0,     0,
+       0,     0,   212,     0,    78,    77,    79,     0,    71,     0,
+       0,     0,  -155,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    16,     0,     0,   187,     0,     0,     4,     5,
        6,     7,     8,     0,     0,     0,     0,     0,     9,     0,
-       0,     0,    10,     0,     0,     0,    11,    12,     0,     0,
+       0,    78,    10,    79,     0,     0,    11,    12,     0,  -155,
        0,    13,     0,    14,    15,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    16,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,     0,    19,     0,    20,    21,
-     201,    22,     0,     4,     5,     6,     7,     8,     0,     0,
-       0,     0,     0,     9,     0,     0,     0,    10,     0,     0,
-       0,    11,    12,     0,     0,     0,    13,     0,    14,    15,
+       0,     0,     0,     0,    18,     0,    19,   188,    20,    21,
+     189,    22,    73,     0,     0,     4,     5,     6,     7,     8,
+       0,     0,     0,     0,     0,     9,     0,     0,     0,    10,
+       0,     0,     0,    11,    12,     0,     0,     0,    13,     0,
+      14,    15,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    16,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    17,     0,     0,     0,     0,     0,
+       0,    18,     0,    19,     0,    20,    21,    74,    22,    46,
+       0,     0,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     9,     0,     0,     0,    10,     0,     0,     0,
+      11,    12,     0,     0,     0,    13,     0,    14,    15,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      16,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    17,     0,     0,     0,     0,     0,     0,    18,
-       0,    19,     0,    20,    21,   205,    22,     0,     4,     5,
-       6,     7,     8,     0,     0,     0,     0,     0,     9,     0,
-       0,     0,    10,     0,     0,     0,    11,    12,     0,     0,
-       0,    13,     0,    14,    15,     0,     4,     5,     6,     7,
-       8,     0,     0,     0,     0,    16,     9,     0,     0,     0,
-      10,     0,     0,     0,    11,    12,     0,    17,     0,    13,
-       0,    14,    15,     0,    18,     0,    19,     0,    20,    21,
-       0,    22,     0,    16,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    17,     0,     0,     0,     0,
-       0,   122,    18,     0,    19,     0,    20,    21,     0,    22,
-       4,     5,     6,     7,     8,     0,     0,     0,     0,     0,
+       0,    17,     0,     0,     0,     0,     0,     0,    18,     0,
+      19,     0,    20,    21,   202,    22,     0,     4,     5,     6,
+       7,     8,     0,     0,     0,     0,     0,     9,     0,     0,
+       0,    10,     0,     0,     0,    11,    12,     0,     0,     0,
+      13,     0,    14,    15,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    16,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
+       0,     0,     0,    18,     0,    19,     0,    20,    21,   206,
+      22,     0,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     9,     0,     0,     0,    10,     0,     0,     0,
+      11,    12,     0,     0,     0,    13,     0,    14,    15,     0,
+       4,     5,     6,     7,     8,     0,     0,     0,     0,    16,
        9,     0,     0,     0,    10,     0,     0,     0,    11,    12,
-       0,     0,     0,    13,     0,    14,    15,     0,     4,     5,
-       6,     7,     8,     0,     0,     0,     0,    16,     9,     0,
-       0,     0,    10,     0,     0,     0,    11,    12,     0,    17,
-       0,    13,     0,    14,    15,     0,    18,     0,    19,     0,
-      20,    21,   275,    22,     0,    16,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,     0,    19,   225,    20,    21,
-     226,    22,     0,    71,     0,     0,     0,     0,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    16,    84,    85,
-      86,    87,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    88,    89,   227,     0,   228,     0,
-       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,    84,    85,
-      86,    87,   239,     0,     0,   240,     0,     0,     0,     0,
-       0,     0,     0,     0,    88,    89,     0,     0,     0,     0,
-       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,    84,    85,
-      86,    87,     0,     0,     0,   142,     0,     0,     0,     0,
-       0,     0,     0,     0,    88,    89,     0,     0,     0,     0,
-       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,    84,    85,
-      86,    87,     0,     0,     0,   274,     0,     0,     0,     0,
-       0,     0,     0,     0,    88,    89,     0,     0,     0,     0,
-       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,    84,    85,
-      86,    87,     0,     0,     0,   298,     0,     0,     0,     0,
-       0,     0,     0,     0,    88,    89,     0,     0,     0,     0,
-       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,   314,     0,
-     315,    84,    85,    86,    87,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    88,    89,     0,
-       0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,     0,    84,    85,    86,    87,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
-     108,    88,    89,   138,     0,     0,     0,     0,    90,    91,
+       0,    17,     0,    13,     0,    14,    15,     0,    18,     0,
+      19,     0,    20,    21,     0,    22,     0,    16,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
+       0,     0,     0,     0,     0,   122,    18,     0,    19,     0,
+      20,    21,     0,    22,     4,     5,     6,     7,     8,     0,
+       0,     0,     0,     0,     9,     0,     0,     0,    10,     0,
+       0,     0,    11,    12,     0,     0,     0,    13,     0,    14,
+      15,     0,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,    16,     9,     0,     0,     0,    10,     0,     0,     0,
+      11,    12,     0,    17,     0,    13,     0,    14,    15,     0,
+      18,     0,    19,     0,    20,    21,   278,    22,     0,    16,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    17,     0,     0,     0,     0,     0,     0,    18,     0,
+      19,   226,    20,    21,   227,    22,     0,    71,     0,     0,
+       0,     0,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    16,    84,    85,    86,    87,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+     228,     0,   229,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,    84,    85,    86,    87,   241,     0,     0,   242,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,    84,    85,    86,    87,     0,     0,     0,   142,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,    84,    85,    86,    87,     0,     0,     0,   276,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,    84,    85,    86,    87,     0,     0,     0,   277,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,    84,    85,    86,    87,     0,     0,     0,   302,
+       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,   318,     0,   319,    84,    85,    86,    87,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    88,    89,     0,     0,     0,     0,     0,    90,    91,
       92,    93,    94,    95,    96,    97,     0,     0,     0,    84,
       85,    86,    87,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,     0,   108,    88,    89,   217,     0,     0,
+     105,   106,   107,     0,   108,    88,    89,   138,     0,     0,
        0,     0,    90,    91,    92,    93,    94,    95,    96,    97,
        0,     0,     0,    84,    85,    86,    87,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,     0,   108,    88,
-      89,   291,     0,     0,     0,     0,    90,    91,    92,    93,
+      89,   218,     0,     0,     0,     0,    90,    91,    92,    93,
       94,    95,    96,    97,     0,     0,     0,    84,    85,    86,
       87,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,     0,   108,    88,    89,   313,     0,     0,     0,     0,
+     107,     0,   108,    88,    89,   294,     0,     0,     0,     0,
       90,    91,    92,    93,    94,    95,    96,    97,     0,     0,
        0,    84,    85,    86,    87,    98,    99,   100,   101,   102,
      103,   104,   105,   106,   107,     0,   108,    88,    89,   317,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,     0,     0,     0,     0,     0,    98,
+      96,    97,     0,     0,     0,    84,    85,    86,    87,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
-     108,   109,    84,    85,    86,    87,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,    89,
-       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
-      95,    96,    97,     0,     0,     0,     0,     0,     0,     0,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-       0,   108,   192,    84,    85,    86,    87,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    88,
-      89,     0,     0,     0,     0,     0,    90,    91,    92,    93,
-      94,    95,    96,    97,     0,     0,     0,     0,     0,     0,
-       0,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,     0,   108,   249,    84,    85,    86,    87,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      88,    89,     0,     0,     0,     0,     0,    90,    91,    92,
-      93,    94,    95,    96,    97,     0,     0,     0,     0,     0,
-       0,     0,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,     0,   108,   302,    84,    85,    86,    87,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    88,    89,     0,     0,     0,     0,     0,    90,    91,
+     108,    88,    89,   321,     0,     0,     0,     0,    90,    91,
       92,    93,    94,    95,    96,    97,     0,     0,     0,     0,
        0,     0,     0,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,     0,   108,   303,    84,    85,    86,    87,
+     105,   106,   107,     0,   108,   109,    84,    85,    86,    87,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    88,    89,     0,     0,     0,     0,     0,    90,
       91,    92,    93,    94,    95,    96,    97,     0,     0,     0,
        0,     0,     0,     0,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,     0,   108,   307,    84,    85,    86,
-      87,     0,     0,     0,     0,     0,     0,     0,   250,   251,
-       0,     0,   252,    88,    89,     0,     0,     0,     0,     0,
-      90,    91,    92,    93,    94,    95,    96,    97,     0,     0,
-       0,     0,     0,     0,     0,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,     0,   108,    84,    85,    86,
-      87,     0,     0,     0,     0,     0,     0,     0,   250,   251,
+     104,   105,   106,   107,     0,   108,   193,    84,    85,    86,
+      87,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    88,    89,     0,     0,     0,     0,     0,
       90,    91,    92,    93,    94,    95,    96,    97,     0,     0,
        0,     0,     0,     0,     0,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,     0,   108,    84,    85,    86,
-      87,     0,     0,     0,     0,     0,     0,   130,     0,     0,
-       0,     0,     0,    88,    89,     0,     0,     0,     0,     0,
-      90,    91,    92,    93,    94,    95,    96,    97,     0,     0,
-       0,    84,    85,    86,    87,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,     0,   108,    88,    89,     0,
+     103,   104,   105,   106,   107,     0,   108,   251,    84,    85,
+      86,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    88,    89,     0,     0,     0,     0,
+       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
+       0,     0,     0,     0,     0,     0,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,     0,   108,   306,    84,
+      85,    86,    87,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    88,    89,     0,     0,     0,
+       0,     0,    90,    91,    92,    93,    94,    95,    96,    97,
+       0,     0,     0,     0,     0,     0,     0,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,     0,   108,   307,
+      84,    85,    86,    87,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    88,    89,     0,     0,
+       0,     0,     0,    90,    91,    92,    93,    94,    95,    96,
+      97,     0,     0,     0,     0,     0,     0,     0,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     311,    84,    85,    86,    87,     0,     0,     0,     0,     0,
+       0,     0,   252,   253,     0,     0,   254,    88,    89,     0,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,     0,     0,   285,     0,     0,    98,
+      96,    97,     0,     0,     0,     0,     0,     0,     0,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
      108,    84,    85,    86,    87,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   300,    88,    89,     0,
+       0,     0,   252,   253,     0,     0,     0,    88,    89,     0,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
       96,    97,     0,     0,     0,     0,     0,     0,     0,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
      108,    84,    85,    86,    87,     0,     0,     0,     0,     0,
-       0,   301,     0,     0,     0,     0,     0,    88,    89,     0,
+       0,   130,     0,     0,     0,     0,     0,    88,    89,     0,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
       96,    97,     0,     0,     0,    84,    85,    86,    87,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
      108,    88,    89,     0,     0,     0,     0,     0,    90,    91,
+      92,    93,    94,    95,    96,    97,     0,     0,     0,     0,
+     288,     0,     0,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,     0,   108,    84,    85,    86,    87,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     304,    88,    89,     0,     0,     0,     0,     0,    90,    91,
+      92,    93,    94,    95,    96,    97,     0,     0,     0,     0,
+       0,     0,     0,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,     0,   108,    84,    85,    86,    87,     0,
+       0,     0,     0,     0,     0,   305,     0,     0,     0,     0,
+       0,    88,    89,     0,     0,     0,     0,     0,    90,    91,
       92,    93,    94,    95,    96,    97,     0,     0,     0,    84,
       85,    86,    87,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,     0,   108,    88,    89,     0,     0,     0,
        0,     0,    90,    91,    92,    93,    94,    95,    96,    97,
-       0,     0,     0,  -154,    85,    86,     0,     0,     0,   100,
+       0,     0,     0,    84,    85,    86,    87,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,     0,   108,    88,
-      89,     0,     0,     0,     0,     0,  -154,  -154,  -154,  -154,
-    -154,  -154,    96,    97,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  -154,   101,   102,   103,   104,   105,   106,
-     107,    48,   108,     0,     0,     0,     0,     0,     0,     0,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,   148,
-       0,     0,     0,     0,     0,     0,     0,     0,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,   245,     0,     0,
+      89,     0,     0,     0,     0,     0,    90,    91,    92,    93,
+      94,    95,    96,    97,     0,     0,     0,  -156,    85,    86,
+       0,     0,     0,   100,   101,   102,   103,   104,   105,   106,
+     107,     0,   108,    88,    89,     0,     0,     0,     0,     0,
+    -156,  -156,  -156,  -156,  -156,  -156,    96,    97,     0,     0,
+      85,    86,     0,     0,     0,     0,     0,  -156,   101,   102,
+     103,   104,   105,   106,   107,    88,   108,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    96,    97,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     101,   102,   103,   104,   105,   106,   107,    48,   108,     0,
        0,     0,     0,     0,     0,     0,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67
+      63,    64,    65,    66,    67,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,   247,     0,     0,     0,     0,     0,     0,
+       0,     0,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,    19,     1,     0,     7,     5,    48,    11,    12,    10,
-      48,     4,    13,    13,     5,    60,    17,    18,    30,     5,
-      21,    48,    13,     4,    66,    63,    20,   180,    22,    30,
-      68,    32,    33,    48,    28,    29,   143,    62,    41,    15,
-      65,    68,    67,    54,    55,    56,   153,    58,    63,    16,
-      17,    60,    58,   146,    63,   131,   132,   150,   151,    41,
-       4,    79,     5,    62,    64,    65,    62,    28,     4,    62,
-      13,     4,    61,    64,    65,     1,    66,    78,    64,    65,
-     233,    62,    48,    84,    85,    86,    87,    88,    89,    90,
+       1,    19,     1,    48,     7,     5,   146,    11,    12,    10,
+     150,   151,    13,    13,     4,     4,    17,    18,    63,    30,
+      21,     7,     5,    68,   180,    20,    48,    22,    48,    30,
+      13,    32,    33,    28,    29,    48,    62,   143,    41,    65,
+      59,    67,    61,    63,    16,    17,    68,   153,    54,    55,
+      56,    60,    58,    66,    63,    41,     5,    59,    15,    61,
+       5,    79,    65,    62,    64,    65,    42,    43,    13,    45,
+     131,   132,    62,    62,   214,     0,    60,    78,   234,   219,
+      58,    64,    65,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,    58,   120,   262,
-      63,   264,   265,   114,    59,   268,    61,    63,   271,   113,
-     213,    64,    65,    42,    43,   218,    45,    68,   129,   130,
-      42,    43,   133,    45,    59,    63,    61,    58,    13,   292,
-     144,    47,   146,    63,    58,     4,   150,   151,    40,   143,
-      47,   304,    40,    10,    11,    58,    66,    58,    60,   153,
-      60,    47,     4,   181,    63,    63,   259,   260,    25,    63,
-      63,    58,    63,     4,     4,     5,     6,     7,     8,   197,
-      63,    38,    39,    63,    40,    58,   187,   181,    58,    63,
-      58,    31,   193,    50,    51,    52,    53,    54,    55,    56,
-      30,    58,   120,    29,   247,   127,   207,   308,   209,   213,
-     193,    41,   269,    -1,   218,    -1,    -1,    10,    11,    -1,
-      -1,    -1,    -1,    53,    -1,    -1,   227,    -1,    -1,    -1,
-      60,    -1,    62,   234,    64,    65,    -1,    67,   239,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    -1,   250,
-     251,   269,    -1,   254,   255,   259,   260,    50,    51,    52,
-      53,    54,    55,    56,    -1,    58,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   269,    -1,    -1,    -1,   280,
-      -1,    -1,    -1,    -1,     0,     1,    -1,    -1,     4,     5,
-      -1,     7,    -1,     9,    10,    11,    12,    13,    -1,    -1,
-     301,   302,   303,    19,    20,    21,    -1,    -1,    24,    25,
-      26,    -1,    28,   314,    -1,    -1,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    41,    -1,    -1,    44,    -1,
-      -1,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    -1,    58,    59,    -1,    61,    -1,    63,    64,    65,
-      66,     1,    68,    -1,     4,    10,    11,     7,    -1,    -1,
-      -1,    -1,    -1,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    -1,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    41,    -1,    -1,    -1,    50,    51,    52,    53,    54,
-      55,    56,    -1,    58,    -1,    -1,    -1,    -1,     1,    -1,
-      60,     4,    62,    -1,     7,    -1,    -1,    -1,    68,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,     4,
-       5,     6,     7,     8,    -1,    -1,    -1,    -1,    41,    -1,
-      -1,     1,    -1,    -1,     4,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    14,    30,    -1,    60,    18,    62,
-      -1,    -1,    22,    23,    -1,    68,    41,    27,    -1,    29,
-      30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    41,    -1,    -1,    -1,    60,    -1,    62,    -1,    64,
-      65,    -1,    67,    53,    -1,    -1,    -1,    -1,    -1,    -1,
-      60,    -1,    62,    63,    64,    65,    66,    67,     1,    -1,
-      -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-      -1,    14,    -1,    -1,    -1,    18,    -1,    -1,    -1,    22,
-      23,    -1,    -1,    -1,    27,    -1,    29,    30,    -1,    -1,
-      -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,    -1,    60,    -1,    62,
-      -1,    64,    65,    66,    67,     1,    -1,    -1,     4,     5,
+     101,   102,   103,   104,   105,   106,   107,    41,   264,   120,
+     266,   267,     4,   114,   270,    64,    65,   273,   113,    64,
+      65,   261,   262,    42,    43,    62,    45,    28,   129,   130,
+       4,     4,   133,    61,     4,     5,     6,     7,     8,   295,
+     144,     1,   146,    58,    66,    63,   150,   151,   143,    63,
+      63,    68,   308,    48,    58,    13,    47,    63,   153,    58,
+      30,     4,    40,   181,    47,     4,     5,     6,     7,     8,
+      58,    41,    40,    66,    58,    60,    47,    63,    60,     4,
+     198,    58,    63,    53,   185,     4,   181,   188,    63,    40,
+      60,    30,    62,   194,    64,    65,    63,    67,    63,    63,
+      63,    58,    41,    58,    58,    58,   249,   208,    31,   210,
+     214,    63,   120,    29,   312,   219,   127,   194,   271,    10,
+      11,    60,    -1,    62,    -1,    64,    65,   228,    67,    -1,
+      -1,    -1,    -1,    -1,   235,    -1,    -1,    -1,    -1,    -1,
+     241,    -1,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+      -1,   252,   253,   271,    -1,   256,   257,   261,   262,    50,
+      51,    52,    53,    54,    55,    56,    -1,    58,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   271,    -1,    -1,    -1,
+      -1,    -1,   283,    -1,    -1,    -1,    -1,    -1,     0,     1,
+      -1,    -1,     4,     5,    -1,     7,    -1,     9,    10,    11,
+      12,    13,    -1,    -1,   305,   306,   307,    19,    20,    21,
+      -1,    -1,    24,    25,    26,    -1,    28,   318,    -1,    -1,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    41,
+      -1,    -1,    44,    -1,    -1,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    -1,    58,    59,    -1,    61,
+      -1,    63,    64,    65,    66,     1,    68,    -1,     4,    10,
+      11,     7,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    -1,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    50,
+      51,    52,    53,    54,    55,    56,    -1,    58,    -1,    -1,
+      -1,    -1,     1,    -1,    60,     4,    62,    -1,     7,    -1,
+      -1,    -1,    68,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    -1,     1,    -1,    -1,     4,     5,
        6,     7,     8,    -1,    -1,    -1,    -1,    -1,    14,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,
+      -1,    60,    18,    62,    -1,    -1,    22,    23,    -1,    68,
       -1,    27,    -1,    29,    30,    -1,    -1,    -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,    -1,    60,    -1,    62,    -1,    64,    65,
-       1,    67,    -1,     4,     5,     6,     7,     8,    -1,    -1,
-      -1,    -1,    -1,    14,    -1,    -1,    -1,    18,    -1,    -1,
-      -1,    22,    23,    -1,    -1,    -1,    27,    -1,    29,    30,
+      -1,    -1,    -1,    -1,    60,    -1,    62,    63,    64,    65,
+      66,    67,     1,    -1,    -1,     4,     5,     6,     7,     8,
+      -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    18,
+      -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    27,    -1,
+      29,    30,    -1,    -1,    -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,
+      -1,    60,    -1,    62,    -1,    64,    65,    66,    67,     1,
+      -1,    -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    14,    -1,    -1,    -1,    18,    -1,    -1,    -1,
+      22,    23,    -1,    -1,    -1,    27,    -1,    29,    30,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
       -1,    -1,    -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,    -1,    60,
-      -1,    62,    -1,    64,    65,     1,    67,    -1,     4,     5,
-       6,     7,     8,    -1,    -1,    -1,    -1,    -1,    14,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,
-      -1,    27,    -1,    29,    30,    -1,     4,     5,     6,     7,
-       8,    -1,    -1,    -1,    -1,    41,    14,    -1,    -1,    -1,
-      18,    -1,    -1,    -1,    22,    23,    -1,    53,    -1,    27,
-      -1,    29,    30,    -1,    60,    -1,    62,    -1,    64,    65,
-      -1,    67,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,
-      -1,    59,    60,    -1,    62,    -1,    64,    65,    -1,    67,
-       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
+      -1,    53,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
+      62,    -1,    64,    65,     1,    67,    -1,     4,     5,     6,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,
+      -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
+      27,    -1,    29,    30,    -1,    -1,    -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,    -1,    60,    -1,    62,    -1,    64,    65,     1,
+      67,    -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    14,    -1,    -1,    -1,    18,    -1,    -1,    -1,
+      22,    23,    -1,    -1,    -1,    27,    -1,    29,    30,    -1,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    41,
       14,    -1,    -1,    -1,    18,    -1,    -1,    -1,    22,    23,
-      -1,    -1,    -1,    27,    -1,    29,    30,    -1,     4,     5,
-       6,     7,     8,    -1,    -1,    -1,    -1,    41,    14,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    53,
-      -1,    27,    -1,    29,    30,    -1,    60,    -1,    62,    -1,
-      64,    65,    66,    67,    -1,    41,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,
-      -1,    -1,    -1,    -1,    60,    -1,    62,     1,    64,    65,
-       4,    67,    -1,     7,    -1,    -1,    -1,    -1,    -1,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    60,    -1,    62,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,     9,    10,
-      11,    12,    63,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,     9,    10,
-      11,    12,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,     9,    10,
-      11,    12,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,     9,    10,
-      11,    12,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,    59,    -1,
-      61,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    -1,
-      -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,     9,    10,    11,    12,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
-      58,    25,    26,    61,    -1,    -1,    -1,    -1,    32,    33,
+      -1,    53,    -1,    27,    -1,    29,    30,    -1,    60,    -1,
+      62,    -1,    64,    65,    -1,    67,    -1,    41,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
+      64,    65,    -1,    67,     4,     5,     6,     7,     8,    -1,
+      -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    18,    -1,
+      -1,    -1,    22,    23,    -1,    -1,    -1,    27,    -1,    29,
+      30,    -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    41,    14,    -1,    -1,    -1,    18,    -1,    -1,    -1,
+      22,    23,    -1,    53,    -1,    27,    -1,    29,    30,    -1,
+      60,    -1,    62,    -1,    64,    65,    66,    67,    -1,    41,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    53,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
+      62,     1,    64,    65,     4,    67,    -1,     7,    -1,    -1,
+      -1,    -1,    -1,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    41,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      60,    -1,    62,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,     9,    10,    11,    12,    63,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,     9,    10,    11,    12,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,     9,    10,    11,    12,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,     9,    10,    11,    12,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,     9,    10,    11,    12,    -1,    -1,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,    59,    -1,    61,     9,    10,    11,    12,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,     9,
       10,    11,    12,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    -1,    58,    25,    26,    61,    -1,    -1,
@@ -1262,26 +1275,9 @@ static const yytype_int16 yycheck[] =
       -1,     9,    10,    11,    12,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    -1,    58,    25,    26,    61,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,
+      38,    39,    -1,    -1,    -1,     9,    10,    11,    12,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
-      58,    59,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
-      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    58,    59,     9,    10,    11,    12,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-      26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    -1,    58,    59,     9,    10,    11,    12,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    -1,    58,    59,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
+      58,    25,    26,    61,    -1,    -1,    -1,    -1,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    -1,    58,    59,     9,    10,    11,    12,
@@ -1290,26 +1286,33 @@ static const yytype_int16 yycheck[] =
       33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    -1,    58,    59,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
-      -1,    -1,    24,    25,    26,    -1,    -1,    -1,    -1,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,    -1,
       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    19,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,     9,    10,    11,    12,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,    25,    26,    -1,
+      52,    53,    54,    55,    56,    -1,    58,    59,     9,    10,
+      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,    -1,
+      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    -1,    58,    59,     9,
+      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    -1,    -1,    -1,
+      -1,    -1,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    -1,    58,    59,
+       9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    -1,    -1,
+      -1,    -1,    -1,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    -1,    58,
+      59,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    20,    21,    -1,    -1,    24,    25,    26,    -1,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    44,    -1,    -1,    47,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
       58,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    -1,
+      -1,    -1,    20,    21,    -1,    -1,    -1,    25,    26,    -1,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
       38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
@@ -1319,24 +1322,41 @@ static const yytype_int16 yycheck[] =
       38,    39,    -1,    -1,    -1,     9,    10,    11,    12,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
       58,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      44,    -1,    -1,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    -1,    58,     9,    10,    11,    12,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      24,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    -1,    58,     9,    10,    11,    12,    -1,
+      -1,    -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,     9,
       10,    11,    12,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    -1,    58,    25,    26,    -1,    -1,    -1,
       -1,    -1,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,     9,    10,    11,    -1,    -1,    -1,    49,
+      -1,    -1,    -1,     9,    10,    11,    12,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    -1,    58,    25,
       26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      36,    37,    38,    39,    -1,    -1,    -1,     9,    10,    11,
       -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
-      56,     4,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,     4,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,     4,    -1,    -1,
+      56,    -1,    58,    25,    26,    -1,    -1,    -1,    -1,    -1,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      10,    11,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,
+      52,    53,    54,    55,    56,    25,    58,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      50,    51,    52,    53,    54,    55,    56,     4,    58,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31
+      27,    28,    29,    30,    31,     4,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,     4,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1361,20 +1381,21 @@ static const yytype_uint8 yystos[] =
       63,    63,    68,    48,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    58,    62,
-      65,    67,    90,    91,    92,    81,     1,    63,    66,    74,
-      13,    73,    59,    59,    61,    84,     4,    62,    79,    80,
-      74,     1,    74,    91,    91,     1,    74,    47,    42,    43,
-      45,     1,    97,    53,    86,    87,    86,    61,    63,    86,
-      86,    97,     4,    92,    93,     1,     4,    60,    62,    81,
-      94,    95,    96,    40,    47,    58,    66,    74,    58,    63,
-      66,     4,    62,    89,    45,     4,    96,    59,    61,    59,
-      20,    21,    24,    85,    60,    60,    74,    74,    86,    47,
-      63,    86,    48,    66,    63,    63,    74,     4,    63,    48,
-      68,    63,    92,    74,    66,    66,    74,    58,     4,    80,
-      63,    74,    74,    74,    74,    44,    86,    86,    92,    92,
-      92,    61,    63,    92,    95,    92,    58,    58,    66,    74,
-      24,    19,    59,    59,    63,    92,    58,    59,    74,    74,
-      74,    92,    85,    61,    59,    61,    74,    61
+      65,    67,    90,    91,    92,    65,    81,     1,    63,    66,
+      74,    13,    73,    59,    59,    61,    84,     4,    62,    79,
+      80,    74,     1,    74,    91,    91,     1,    74,    47,    42,
+      43,    45,     1,    97,    53,    86,    87,    86,    61,    63,
+      86,    86,    97,     4,    92,    93,     1,     4,    60,    62,
+      81,    94,    95,    96,    40,    47,    74,    58,    66,    74,
+      58,    63,    66,     4,    62,    89,    45,     4,    96,    59,
+      61,    59,    20,    21,    24,    85,    60,    60,    74,    74,
+      86,    47,    63,    86,    48,    66,    63,    63,    74,     4,
+      63,    48,    68,    63,    92,    74,    66,    66,    66,    74,
+      58,     4,    80,    63,    74,    74,    74,    74,    44,    86,
+      86,    92,    92,    92,    61,    63,    92,    95,    92,    58,
+      58,    58,    66,    74,    24,    19,    59,    59,    63,    92,
+      58,    59,    74,    74,    74,    92,    85,    61,    59,    61,
+      74,    61
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1391,12 +1412,12 @@ static const yytype_uint8 yyr1[] =
       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,
+      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,    97,    97,    97,    97,    98,    98,    98,
-      98,    98,    98,    98,    98,    98,    98,    98
+      96,    96,    96,    96,    96,    97,    97,    97,    97,    98,
+      98,    98,    98,    98,    98,    98,    98,    98,    98,    98
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1411,14 +1432,14 @@ static const yytype_uint8 yyr2[] =
        2,     1,     0,     4,     0,     5,     0,     2,     4,     5,
        3,     3,     2,     1,     1,     1,     3,     2,     3,     2,
        4,     3,     2,     1,     3,     2,     2,     3,     5,     4,
-       4,     3,     7,     6,     6,     6,     5,     5,     1,     1,
-       1,     3,     3,     2,     3,     2,     2,     1,     4,     3,
-       3,     4,     3,     1,     3,     1,     3,     1,     3,     1,
-       2,     3,     3,     1,     3,     1,     3,     2,     4,     3,
-       3,     3,     5,     3,     1,     1,     1,     1,     1,     1,
+       6,     5,     4,     3,     7,     6,     6,     6,     5,     5,
+       1,     1,     1,     3,     3,     2,     3,     2,     2,     1,
+       4,     3,     3,     4,     3,     1,     3,     1,     3,     1,
+       3,     1,     2,     3,     3,     1,     3,     1,     3,     2,
+       4,     3,     3,     3,     5,     3,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     3,     3,     3,     3,     3,
-       1,     4,     2,     2,     1,     1,     5,     3
+       1,     1,     1,     1,     1,     0,     1,     3,     3,     3,
+       3,     3,     1,     4,     2,     2,     1,     1,     5,     3
 };
 
 
@@ -1921,187 +1942,187 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
           case 4: /* IDENT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1925 "src/parser.c" /* yacc.c:1257  */
+#line 1946 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 5: /* FIELD  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1931 "src/parser.c" /* yacc.c:1257  */
+#line 1952 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 6: /* LITERAL  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1937 "src/parser.c" /* yacc.c:1257  */
+#line 1958 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 7: /* FORMAT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1943 "src/parser.c" /* yacc.c:1257  */
+#line 1964 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 42: /* QQSTRING_TEXT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1949 "src/parser.c" /* yacc.c:1257  */
+#line 1970 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 71: /* Module  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1955 "src/parser.c" /* yacc.c:1257  */
+#line 1976 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 72: /* Imports  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1961 "src/parser.c" /* yacc.c:1257  */
+#line 1982 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 73: /* FuncDefs  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1967 "src/parser.c" /* yacc.c:1257  */
+#line 1988 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 74: /* Exp  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1973 "src/parser.c" /* yacc.c:1257  */
+#line 1994 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 75: /* Import  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1979 "src/parser.c" /* yacc.c:1257  */
+#line 2000 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 76: /* ImportWhat  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1985 "src/parser.c" /* yacc.c:1257  */
+#line 2006 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 77: /* ImportFrom  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1991 "src/parser.c" /* yacc.c:1257  */
+#line 2012 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 78: /* FuncDef  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1997 "src/parser.c" /* yacc.c:1257  */
+#line 2018 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 79: /* Params  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2003 "src/parser.c" /* yacc.c:1257  */
+#line 2024 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 80: /* Param  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2009 "src/parser.c" /* yacc.c:1257  */
+#line 2030 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 81: /* String  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2015 "src/parser.c" /* yacc.c:1257  */
+#line 2036 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 84: /* QQString  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2021 "src/parser.c" /* yacc.c:1257  */
+#line 2042 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 85: /* ElseBody  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2027 "src/parser.c" /* yacc.c:1257  */
+#line 2048 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 86: /* ExpD  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2033 "src/parser.c" /* yacc.c:1257  */
+#line 2054 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 87: /* Term  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2039 "src/parser.c" /* yacc.c:1257  */
+#line 2060 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 88: /* Args  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2045 "src/parser.c" /* yacc.c:1257  */
+#line 2066 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 89: /* Arg  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2051 "src/parser.c" /* yacc.c:1257  */
+#line 2072 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 90: /* RepPatterns  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2057 "src/parser.c" /* yacc.c:1257  */
+#line 2078 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 91: /* Patterns  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2063 "src/parser.c" /* yacc.c:1257  */
+#line 2084 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 92: /* Pattern  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2069 "src/parser.c" /* yacc.c:1257  */
+#line 2090 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 93: /* ArrayPats  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2075 "src/parser.c" /* yacc.c:1257  */
+#line 2096 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 94: /* ObjPats  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2081 "src/parser.c" /* yacc.c:1257  */
+#line 2102 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 95: /* ObjPat  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2087 "src/parser.c" /* yacc.c:1257  */
+#line 2108 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 96: /* Keyword  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 2093 "src/parser.c" /* yacc.c:1257  */
+#line 2114 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 97: /* MkDict  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2099 "src/parser.c" /* yacc.c:1257  */
+#line 2120 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 98: /* MkDictPair  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2105 "src/parser.c" /* yacc.c:1257  */
+#line 2126 "src/parser.c" /* yacc.c:1257  */
         break;
 
 
@@ -2397,7 +2418,7 @@ yyreduce:
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
 }
-#line 2401 "src/parser.c" /* yacc.c:1646  */
+#line 2422 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 3:
@@ -2405,7 +2426,7 @@ yyreduce:
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2409 "src/parser.c" /* yacc.c:1646  */
+#line 2430 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 4:
@@ -2413,7 +2434,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2417 "src/parser.c" /* yacc.c:1646  */
+#line 2438 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 5:
@@ -2427,7 +2448,7 @@ yyreduce:
     (yyval.blk) = gen_module((yyvsp[-1].blk));
   }
 }
-#line 2431 "src/parser.c" /* yacc.c:1646  */
+#line 2452 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 6:
@@ -2435,7 +2456,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2439 "src/parser.c" /* yacc.c:1646  */
+#line 2460 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 7:
@@ -2443,7 +2464,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2447 "src/parser.c" /* yacc.c:1646  */
+#line 2468 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -2451,7 +2472,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2455 "src/parser.c" /* yacc.c:1646  */
+#line 2476 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 9:
@@ -2459,7 +2480,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2463 "src/parser.c" /* yacc.c:1646  */
+#line 2484 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 10:
@@ -2467,7 +2488,7 @@ yyreduce:
     {
   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2471 "src/parser.c" /* yacc.c:1646  */
+#line 2492 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 11:
@@ -2475,7 +2496,7 @@ yyreduce:
     {
   (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2479 "src/parser.c" /* yacc.c:1646  */
+#line 2500 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 12:
@@ -2483,7 +2504,7 @@ yyreduce:
     {
   (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2487 "src/parser.c" /* yacc.c:1646  */
+#line 2508 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
@@ -2491,7 +2512,7 @@ yyreduce:
     {
   (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2495 "src/parser.c" /* yacc.c:1646  */
+#line 2516 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
@@ -2499,7 +2520,7 @@ yyreduce:
     {
   (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
 }
-#line 2503 "src/parser.c" /* yacc.c:1646  */
+#line 2524 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 15:
@@ -2507,7 +2528,7 @@ yyreduce:
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2511 "src/parser.c" /* yacc.c:1646  */
+#line 2532 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 16:
@@ -2515,7 +2536,7 @@ yyreduce:
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
 }
-#line 2519 "src/parser.c" /* yacc.c:1646  */
+#line 2540 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 17:
@@ -2524,7 +2545,7 @@ yyreduce:
   FAIL((yyloc), "Possibly unterminated 'if' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2528 "src/parser.c" /* yacc.c:1646  */
+#line 2549 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -2533,7 +2554,7 @@ yyreduce:
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4);
   (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk)));
 }
-#line 2537 "src/parser.c" /* yacc.c:1646  */
+#line 2558 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -2542,7 +2563,7 @@ yyreduce:
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK));
   (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
 }
-#line 2546 "src/parser.c" /* yacc.c:1646  */
+#line 2567 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -2551,7 +2572,7 @@ yyreduce:
   FAIL((yyloc), "Possibly unterminated 'try' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2555 "src/parser.c" /* yacc.c:1646  */
+#line 2576 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -2562,7 +2583,7 @@ yyreduce:
   jv_free((yyvsp[-2].literal));
   jv_free(v);
 }
-#line 2566 "src/parser.c" /* yacc.c:1646  */
+#line 2587 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 22:
@@ -2570,7 +2591,7 @@ yyreduce:
     {
   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
 }
-#line 2574 "src/parser.c" /* yacc.c:1646  */
+#line 2595 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -2578,7 +2599,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2582 "src/parser.c" /* yacc.c:1646  */
+#line 2603 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -2586,7 +2607,7 @@ yyreduce:
     {
   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2590 "src/parser.c" /* yacc.c:1646  */
+#line 2611 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
@@ -2594,7 +2615,7 @@ yyreduce:
     {
   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2598 "src/parser.c" /* yacc.c:1646  */
+#line 2619 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 26:
@@ -2602,7 +2623,7 @@ yyreduce:
     {
   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2606 "src/parser.c" /* yacc.c:1646  */
+#line 2627 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
@@ -2610,7 +2631,7 @@ yyreduce:
     {
   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2614 "src/parser.c" /* yacc.c:1646  */
+#line 2635 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
@@ -2618,7 +2639,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2622 "src/parser.c" /* yacc.c:1646  */
+#line 2643 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
@@ -2626,7 +2647,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2630 "src/parser.c" /* yacc.c:1646  */
+#line 2651 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
@@ -2634,7 +2655,7 @@ yyreduce:
     {
   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2638 "src/parser.c" /* yacc.c:1646  */
+#line 2659 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
@@ -2642,7 +2663,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2646 "src/parser.c" /* yacc.c:1646  */
+#line 2667 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -2650,7 +2671,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2654 "src/parser.c" /* yacc.c:1646  */
+#line 2675 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 33:
@@ -2658,7 +2679,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2662 "src/parser.c" /* yacc.c:1646  */
+#line 2683 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
@@ -2666,7 +2687,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2670 "src/parser.c" /* yacc.c:1646  */
+#line 2691 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
@@ -2674,7 +2695,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2678 "src/parser.c" /* yacc.c:1646  */
+#line 2699 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
@@ -2682,7 +2703,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2686 "src/parser.c" /* yacc.c:1646  */
+#line 2707 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
@@ -2690,7 +2711,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2694 "src/parser.c" /* yacc.c:1646  */
+#line 2715 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 38:
@@ -2700,7 +2721,7 @@ yyreduce:
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Division by zero?");
 }
-#line 2704 "src/parser.c" /* yacc.c:1646  */
+#line 2725 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 39:
@@ -2710,7 +2731,7 @@ yyreduce:
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Remainder by zero?");
 }
-#line 2714 "src/parser.c" /* yacc.c:1646  */
+#line 2735 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 40:
@@ -2718,7 +2739,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2722 "src/parser.c" /* yacc.c:1646  */
+#line 2743 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 41:
@@ -2726,7 +2747,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2730 "src/parser.c" /* yacc.c:1646  */
+#line 2751 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 42:
@@ -2734,7 +2755,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
 }
-#line 2738 "src/parser.c" /* yacc.c:1646  */
+#line 2759 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 43:
@@ -2742,7 +2763,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
 }
-#line 2746 "src/parser.c" /* yacc.c:1646  */
+#line 2767 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 44:
@@ -2750,7 +2771,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
 }
-#line 2754 "src/parser.c" /* yacc.c:1646  */
+#line 2775 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
@@ -2758,7 +2779,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
 }
-#line 2762 "src/parser.c" /* yacc.c:1646  */
+#line 2783 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -2766,7 +2787,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
 }
-#line 2770 "src/parser.c" /* yacc.c:1646  */
+#line 2791 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -2774,7 +2795,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
 }
-#line 2778 "src/parser.c" /* yacc.c:1646  */
+#line 2799 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 48:
@@ -2782,7 +2803,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2786 "src/parser.c" /* yacc.c:1646  */
+#line 2807 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -2790,7 +2811,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2794 "src/parser.c" /* yacc.c:1646  */
+#line 2815 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -2810,7 +2831,7 @@ yyreduce:
     (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
   }
 }
-#line 2814 "src/parser.c" /* yacc.c:1646  */
+#line 2835 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 51:
@@ -2824,7 +2845,7 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2828 "src/parser.c" /* yacc.c:1646  */
+#line 2849 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -2836,7 +2857,7 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2840 "src/parser.c" /* yacc.c:1646  */
+#line 2861 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
@@ -2847,7 +2868,7 @@ yyreduce:
   block_free((yyvsp[0].blk));
   jv_free(v);
 }
-#line 2851 "src/parser.c" /* yacc.c:1646  */
+#line 2872 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 54:
@@ -2861,7 +2882,7 @@ yyreduce:
     (yyval.blk) = (yyvsp[0].blk);
   }
 }
-#line 2865 "src/parser.c" /* yacc.c:1646  */
+#line 2886 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -2870,7 +2891,7 @@ yyreduce:
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 2874 "src/parser.c" /* yacc.c:1646  */
+#line 2895 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 56:
@@ -2879,7 +2900,7 @@ yyreduce:
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-6].literal));
 }
-#line 2883 "src/parser.c" /* yacc.c:1646  */
+#line 2904 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 57:
@@ -2887,7 +2908,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2891 "src/parser.c" /* yacc.c:1646  */
+#line 2912 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 58:
@@ -2895,7 +2916,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2899 "src/parser.c" /* yacc.c:1646  */
+#line 2920 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 59:
@@ -2904,7 +2925,7 @@ yyreduce:
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2908 "src/parser.c" /* yacc.c:1646  */
+#line 2929 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 60:
@@ -2913,7 +2934,7 @@ yyreduce:
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2917 "src/parser.c" /* yacc.c:1646  */
+#line 2938 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 61:
@@ -2922,13 +2943,13 @@ yyreduce:
   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2926 "src/parser.c" /* yacc.c:1646  */
+#line 2947 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 62:
 #line 590 "src/parser.y" /* yacc.c:1646  */
     { (yyval.literal) = jv_string("text"); }
-#line 2932 "src/parser.c" /* yacc.c:1646  */
+#line 2953 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 63:
@@ -2937,13 +2958,13 @@ yyreduce:
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2941 "src/parser.c" /* yacc.c:1646  */
+#line 2962 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 64:
 #line 594 "src/parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[-1].literal); }
-#line 2947 "src/parser.c" /* yacc.c:1646  */
+#line 2968 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 65:
@@ -2952,7 +2973,7 @@ yyreduce:
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2956 "src/parser.c" /* yacc.c:1646  */
+#line 2977 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 66:
@@ -2960,7 +2981,7 @@ yyreduce:
     {
   (yyval.blk) = gen_const(jv_string(""));
 }
-#line 2964 "src/parser.c" /* yacc.c:1646  */
+#line 2985 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 67:
@@ -2968,7 +2989,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
 }
-#line 2972 "src/parser.c" /* yacc.c:1646  */
+#line 2993 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 68:
@@ -2976,7 +2997,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
 }
-#line 2980 "src/parser.c" /* yacc.c:1646  */
+#line 3001 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 69:
@@ -2984,7 +3005,7 @@ yyreduce:
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2988 "src/parser.c" /* yacc.c:1646  */
+#line 3009 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 70:
@@ -2992,7 +3013,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2996 "src/parser.c" /* yacc.c:1646  */
+#line 3017 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 71:
@@ -3000,7 +3021,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3004 "src/parser.c" /* yacc.c:1646  */
+#line 3025 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 72:
@@ -3008,7 +3029,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 3012 "src/parser.c" /* yacc.c:1646  */
+#line 3033 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 73:
@@ -3016,7 +3037,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3020 "src/parser.c" /* yacc.c:1646  */
+#line 3041 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 74:
@@ -3024,7 +3045,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 3028 "src/parser.c" /* yacc.c:1646  */
+#line 3049 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 75:
@@ -3032,7 +3053,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("recurse", gen_noop());
 }
-#line 3036 "src/parser.c" /* yacc.c:1646  */
+#line 3057 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 76:
@@ -3045,7 +3066,7 @@ yyreduce:
   jv_free(v);
   jv_free((yyvsp[0].literal));
 }
-#line 3049 "src/parser.c" /* yacc.c:1646  */
+#line 3070 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 77:
@@ -3054,7 +3075,7 @@ yyreduce:
   FAIL((yyloc), "break requires a label to break to");
   (yyval.blk) = gen_noop();
 }
-#line 3058 "src/parser.c" /* yacc.c:1646  */
+#line 3079 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 78:
@@ -3062,7 +3083,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
 }
-#line 3066 "src/parser.c" /* yacc.c:1646  */
+#line 3087 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 79:
@@ -3070,7 +3091,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
 }
-#line 3074 "src/parser.c" /* yacc.c:1646  */
+#line 3095 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 80:
@@ -3078,7 +3099,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3082 "src/parser.c" /* yacc.c:1646  */
+#line 3103 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 81:
@@ -3086,7 +3107,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
 }
-#line 3090 "src/parser.c" /* yacc.c:1646  */
+#line 3111 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 82:
@@ -3094,7 +3115,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
 }
-#line 3098 "src/parser.c" /* yacc.c:1646  */
+#line 3119 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 83:
@@ -3102,7 +3123,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
 }
-#line 3106 "src/parser.c" /* yacc.c:1646  */
+#line 3127 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 84:
@@ -3110,7 +3131,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3114 "src/parser.c" /* yacc.c:1646  */
+#line 3135 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 85:
@@ -3118,7 +3139,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
 }
-#line 3122 "src/parser.c" /* yacc.c:1646  */
+#line 3143 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 86:
@@ -3127,7 +3148,7 @@ yyreduce:
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3131 "src/parser.c" /* yacc.c:1646  */
+#line 3152 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 87:
@@ -3137,7 +3158,7 @@ yyreduce:
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3141 "src/parser.c" /* yacc.c:1646  */
+#line 3162 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 88:
@@ -3145,7 +3166,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
 }
-#line 3149 "src/parser.c" /* yacc.c:1646  */
+#line 3170 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 89:
@@ -3153,144 +3174,160 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3157 "src/parser.c" /* yacc.c:1646  */
+#line 3178 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 90:
 #line 691 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
+  (yyval.blk) = gen_index_opt((yyvsp[-5].blk), (yyvsp[-2].blk));
 }
-#line 3165 "src/parser.c" /* yacc.c:1646  */
+#line 3186 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 91:
 #line 694 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
+  (yyval.blk) = gen_index((yyvsp[-4].blk), (yyvsp[-1].blk));
 }
-#line 3173 "src/parser.c" /* yacc.c:1646  */
+#line 3194 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 92:
 #line 697 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
+  (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
 }
-#line 3181 "src/parser.c" /* yacc.c:1646  */
+#line 3202 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 93:
 #line 700 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
+  (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
 }
-#line 3189 "src/parser.c" /* yacc.c:1646  */
+#line 3210 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 94:
 #line 703 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
+  (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3197 "src/parser.c" /* yacc.c:1646  */
+#line 3218 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 95:
 #line 706 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
+  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
 }
-#line 3205 "src/parser.c" /* yacc.c:1646  */
+#line 3226 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 96:
 #line 709 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
+  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3213 "src/parser.c" /* yacc.c:1646  */
+#line 3234 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 97:
 #line 712 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
+  (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
 }
-#line 3221 "src/parser.c" /* yacc.c:1646  */
+#line 3242 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 98:
 #line 715 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_const((yyvsp[0].literal));
+  (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
 }
-#line 3229 "src/parser.c" /* yacc.c:1646  */
+#line 3250 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 99:
 #line 718 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = (yyvsp[0].blk);
+  (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
 }
-#line 3237 "src/parser.c" /* yacc.c:1646  */
+#line 3258 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 100:
 #line 721 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
+  (yyval.blk) = gen_const((yyvsp[0].literal));
 }
-#line 3245 "src/parser.c" /* yacc.c:1646  */
+#line 3266 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 101:
 #line 724 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = (yyvsp[-1].blk);
+  (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3253 "src/parser.c" /* yacc.c:1646  */
+#line 3274 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 102:
 #line 727 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_collect((yyvsp[-1].blk));
+  (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
 }
-#line 3261 "src/parser.c" /* yacc.c:1646  */
+#line 3282 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 103:
 #line 730 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_const(jv_array());
+  (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 3269 "src/parser.c" /* yacc.c:1646  */
+#line 3290 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 104:
 #line 733 "src/parser.y" /* yacc.c:1646  */
     {
+  (yyval.blk) = gen_collect((yyvsp[-1].blk));
+}
+#line 3298 "src/parser.c" /* yacc.c:1646  */
+    break;
+
+  case 105:
+#line 736 "src/parser.y" /* yacc.c:1646  */
+    {
+  (yyval.blk) = gen_const(jv_array());
+}
+#line 3306 "src/parser.c" /* yacc.c:1646  */
+    break;
+
+  case 106:
+#line 739 "src/parser.y" /* yacc.c:1646  */
+    {
   block o = gen_const_object((yyvsp[-1].blk));
   if (o.first != NULL)
     (yyval.blk) = o;
   else
     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3281 "src/parser.c" /* yacc.c:1646  */
+#line 3318 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 740 "src/parser.y" /* yacc.c:1646  */
+  case 107:
+#line 746 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
   jv_free((yyvsp[0].literal));
 }
-#line 3290 "src/parser.c" /* yacc.c:1646  */
+#line 3327 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 744 "src/parser.y" /* yacc.c:1646  */
+  case 108:
+#line 750 "src/parser.y" /* yacc.c:1646  */
     {
   if (strcmp(jv_string_value((yyvsp[0].literal)), "__loc__") == 0) {
     (yyval.blk) = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
@@ -3300,11 +3337,11 @@ yyreduce:
   }
   jv_free((yyvsp[0].literal));
 }
-#line 3304 "src/parser.c" /* yacc.c:1646  */
+#line 3341 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 753 "src/parser.y" /* yacc.c:1646  */
+  case 109:
+#line 759 "src/parser.y" /* yacc.c:1646  */
     {
   const char *s = jv_string_value((yyvsp[0].literal));
   if (strcmp(s, "false") == 0)
@@ -3317,198 +3354,198 @@ yyreduce:
     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
   jv_free((yyvsp[0].literal));
 }
-#line 3321 "src/parser.c" /* yacc.c:1646  */
+#line 3358 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 765 "src/parser.y" /* yacc.c:1646  */
+  case 110:
+#line 771 "src/parser.y" /* yacc.c:1646  */
     {
   (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 3331 "src/parser.c" /* yacc.c:1646  */
+#line 3368 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 770 "src/parser.y" /* yacc.c:1646  */
+  case 111:
+#line 776 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3337 "src/parser.c" /* yacc.c:1646  */
+#line 3374 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 771 "src/parser.y" /* yacc.c:1646  */
+  case 112:
+#line 777 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3343 "src/parser.c" /* yacc.c:1646  */
+#line 3380 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 772 "src/parser.y" /* yacc.c:1646  */
+  case 113:
+#line 778 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[-3].blk); }
-#line 3349 "src/parser.c" /* yacc.c:1646  */
+#line 3386 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 773 "src/parser.y" /* yacc.c:1646  */
+  case 114:
+#line 779 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3355 "src/parser.c" /* yacc.c:1646  */
+#line 3392 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 776 "src/parser.y" /* yacc.c:1646  */
+  case 115:
+#line 782 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3363 "src/parser.c" /* yacc.c:1646  */
+#line 3400 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 779 "src/parser.y" /* yacc.c:1646  */
+  case 116:
+#line 785 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3371 "src/parser.c" /* yacc.c:1646  */
+#line 3408 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 784 "src/parser.y" /* yacc.c:1646  */
+  case 117:
+#line 790 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_lambda((yyvsp[0].blk));
 }
-#line 3379 "src/parser.c" /* yacc.c:1646  */
+#line 3416 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 789 "src/parser.y" /* yacc.c:1646  */
+  case 118:
+#line 795 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk)));
 }
-#line 3387 "src/parser.c" /* yacc.c:1646  */
+#line 3424 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 792 "src/parser.y" /* yacc.c:1646  */
+  case 119:
+#line 798 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_destructure_alt((yyvsp[0].blk));
 }
-#line 3395 "src/parser.c" /* yacc.c:1646  */
+#line 3432 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 797 "src/parser.y" /* yacc.c:1646  */
+  case 120:
+#line 803 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3403 "src/parser.c" /* yacc.c:1646  */
+#line 3440 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 800 "src/parser.y" /* yacc.c:1646  */
+  case 121:
+#line 806 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3411 "src/parser.c" /* yacc.c:1646  */
+#line 3448 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 805 "src/parser.y" /* yacc.c:1646  */
+  case 122:
+#line 811 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 3420 "src/parser.c" /* yacc.c:1646  */
+#line 3457 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 809 "src/parser.y" /* yacc.c:1646  */
+  case 123:
+#line 815 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3428 "src/parser.c" /* yacc.c:1646  */
+#line 3465 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 812 "src/parser.y" /* yacc.c:1646  */
+  case 124:
+#line 818 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3436 "src/parser.c" /* yacc.c:1646  */
+#line 3473 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 817 "src/parser.y" /* yacc.c:1646  */
+  case 125:
+#line 823 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk));
 }
-#line 3444 "src/parser.c" /* yacc.c:1646  */
+#line 3481 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 820 "src/parser.y" /* yacc.c:1646  */
+  case 126:
+#line 826 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3452 "src/parser.c" /* yacc.c:1646  */
+#line 3489 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 825 "src/parser.y" /* yacc.c:1646  */
+  case 127:
+#line 831 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3460 "src/parser.c" /* yacc.c:1646  */
+#line 3497 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 828 "src/parser.y" /* yacc.c:1646  */
+  case 128:
+#line 834 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3468 "src/parser.c" /* yacc.c:1646  */
+#line 3505 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 833 "src/parser.y" /* yacc.c:1646  */
+  case 129:
+#line 839 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))));
 }
-#line 3476 "src/parser.c" /* yacc.c:1646  */
+#line 3513 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 836 "src/parser.y" /* yacc.c:1646  */
+  case 130:
+#line 842 "src/parser.y" /* yacc.c:1646  */
     {
   (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 3484 "src/parser.c" /* yacc.c:1646  */
+#line 3521 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 839 "src/parser.y" /* yacc.c:1646  */
+  case 131:
+#line 845 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3492 "src/parser.c" /* yacc.c:1646  */
+#line 3529 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 842 "src/parser.y" /* yacc.c:1646  */
+  case 132:
+#line 848 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3500 "src/parser.c" /* yacc.c:1646  */
+#line 3537 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 845 "src/parser.y" /* yacc.c:1646  */
+  case 133:
+#line 851 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3508 "src/parser.c" /* yacc.c:1646  */
+#line 3545 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 848 "src/parser.y" /* yacc.c:1646  */
+  case 134:
+#line 854 "src/parser.y" /* yacc.c:1646  */
     {
   jv msg = check_object_key((yyvsp[-3].blk));
   if (jv_is_valid(msg)) {
@@ -3517,276 +3554,276 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk));
 }
-#line 3521 "src/parser.c" /* yacc.c:1646  */
+#line 3558 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 856 "src/parser.y" /* yacc.c:1646  */
+  case 135:
+#line 862 "src/parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3530 "src/parser.c" /* yacc.c:1646  */
-    break;
-
-  case 134:
-#line 862 "src/parser.y" /* yacc.c:1646  */
-    {
-  (yyval.literal) = jv_string("as");
-}
-#line 3538 "src/parser.c" /* yacc.c:1646  */
-    break;
-
-  case 135:
-#line 865 "src/parser.y" /* yacc.c:1646  */
-    {
-  (yyval.literal) = jv_string("def");
-}
-#line 3546 "src/parser.c" /* yacc.c:1646  */
+#line 3567 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 136:
 #line 868 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("module");
+  (yyval.literal) = jv_string("as");
 }
-#line 3554 "src/parser.c" /* yacc.c:1646  */
+#line 3575 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 137:
 #line 871 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("import");
+  (yyval.literal) = jv_string("def");
 }
-#line 3562 "src/parser.c" /* yacc.c:1646  */
+#line 3583 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 138:
 #line 874 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("include");
+  (yyval.literal) = jv_string("module");
 }
-#line 3570 "src/parser.c" /* yacc.c:1646  */
+#line 3591 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 139:
 #line 877 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("if");
+  (yyval.literal) = jv_string("import");
 }
-#line 3578 "src/parser.c" /* yacc.c:1646  */
+#line 3599 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 140:
 #line 880 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("then");
+  (yyval.literal) = jv_string("include");
 }
-#line 3586 "src/parser.c" /* yacc.c:1646  */
+#line 3607 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 141:
 #line 883 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("else");
+  (yyval.literal) = jv_string("if");
 }
-#line 3594 "src/parser.c" /* yacc.c:1646  */
+#line 3615 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 142:
 #line 886 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("elif");
+  (yyval.literal) = jv_string("then");
 }
-#line 3602 "src/parser.c" /* yacc.c:1646  */
+#line 3623 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 143:
 #line 889 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("reduce");
+  (yyval.literal) = jv_string("else");
 }
-#line 3610 "src/parser.c" /* yacc.c:1646  */
+#line 3631 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 144:
 #line 892 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("foreach");
+  (yyval.literal) = jv_string("elif");
 }
-#line 3618 "src/parser.c" /* yacc.c:1646  */
+#line 3639 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 145:
 #line 895 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("end");
+  (yyval.literal) = jv_string("reduce");
 }
-#line 3626 "src/parser.c" /* yacc.c:1646  */
+#line 3647 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 146:
 #line 898 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("and");
+  (yyval.literal) = jv_string("foreach");
 }
-#line 3634 "src/parser.c" /* yacc.c:1646  */
+#line 3655 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 147:
 #line 901 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("or");
+  (yyval.literal) = jv_string("end");
 }
-#line 3642 "src/parser.c" /* yacc.c:1646  */
+#line 3663 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 148:
 #line 904 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("try");
+  (yyval.literal) = jv_string("and");
 }
-#line 3650 "src/parser.c" /* yacc.c:1646  */
+#line 3671 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 149:
 #line 907 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("catch");
+  (yyval.literal) = jv_string("or");
 }
-#line 3658 "src/parser.c" /* yacc.c:1646  */
+#line 3679 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 150:
 #line 910 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("label");
+  (yyval.literal) = jv_string("try");
 }
-#line 3666 "src/parser.c" /* yacc.c:1646  */
+#line 3687 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 151:
 #line 913 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("break");
+  (yyval.literal) = jv_string("catch");
 }
-#line 3674 "src/parser.c" /* yacc.c:1646  */
+#line 3695 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 152:
 #line 916 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.literal) = jv_string("__loc__");
+  (yyval.literal) = jv_string("label");
 }
-#line 3682 "src/parser.c" /* yacc.c:1646  */
+#line 3703 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 921 "src/parser.y" /* yacc.c:1646  */
+#line 919 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk)=gen_noop();
+  (yyval.literal) = jv_string("break");
 }
-#line 3690 "src/parser.c" /* yacc.c:1646  */
+#line 3711 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 924 "src/parser.y" /* yacc.c:1646  */
-    { (yyval.blk) = (yyvsp[0].blk); }
-#line 3696 "src/parser.c" /* yacc.c:1646  */
+#line 922 "src/parser.y" /* yacc.c:1646  */
+    {
+  (yyval.literal) = jv_string("__loc__");
+}
+#line 3719 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 925 "src/parser.y" /* yacc.c:1646  */
-    { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
-#line 3702 "src/parser.c" /* yacc.c:1646  */
+#line 927 "src/parser.y" /* yacc.c:1646  */
+    {
+  (yyval.blk)=gen_noop();
+}
+#line 3727 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 926 "src/parser.y" /* yacc.c:1646  */
+#line 930 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3708 "src/parser.c" /* yacc.c:1646  */
+#line 3733 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 929 "src/parser.y" /* yacc.c:1646  */
+#line 931 "src/parser.y" /* yacc.c:1646  */
+    { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
+#line 3739 "src/parser.c" /* yacc.c:1646  */
+    break;
+
+  case 158:
+#line 932 "src/parser.y" /* yacc.c:1646  */
+    { (yyval.blk) = (yyvsp[0].blk); }
+#line 3745 "src/parser.c" /* yacc.c:1646  */
+    break;
+
+  case 159:
+#line 935 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
  }
-#line 3716 "src/parser.c" /* yacc.c:1646  */
+#line 3753 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 932 "src/parser.y" /* yacc.c:1646  */
+  case 160:
+#line 938 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
   }
-#line 3724 "src/parser.c" /* yacc.c:1646  */
+#line 3761 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 935 "src/parser.y" /* yacc.c:1646  */
+  case 161:
+#line 941 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
   }
-#line 3732 "src/parser.c" /* yacc.c:1646  */
+#line 3769 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 938 "src/parser.y" /* yacc.c:1646  */
+  case 162:
+#line 944 "src/parser.y" /* yacc.c:1646  */
     {
   (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 3741 "src/parser.c" /* yacc.c:1646  */
+#line 3778 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 942 "src/parser.y" /* yacc.c:1646  */
+  case 163:
+#line 948 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))),
                     (yyvsp[0].blk));
   }
-#line 3750 "src/parser.c" /* yacc.c:1646  */
+#line 3787 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 946 "src/parser.y" /* yacc.c:1646  */
+  case 164:
+#line 952 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
                     gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
   }
-#line 3759 "src/parser.c" /* yacc.c:1646  */
+#line 3796 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 950 "src/parser.y" /* yacc.c:1646  */
+  case 165:
+#line 956 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
                     gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
   }
-#line 3768 "src/parser.c" /* yacc.c:1646  */
+#line 3805 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 954 "src/parser.y" /* yacc.c:1646  */
+  case 166:
+#line 960 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
                     gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
   }
-#line 3777 "src/parser.c" /* yacc.c:1646  */
+#line 3814 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 958 "src/parser.y" /* yacc.c:1646  */
+  case 167:
+#line 964 "src/parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
                     gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
   }
-#line 3786 "src/parser.c" /* yacc.c:1646  */
+#line 3823 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 962 "src/parser.y" /* yacc.c:1646  */
+  case 168:
+#line 968 "src/parser.y" /* yacc.c:1646  */
     {
   jv msg = check_object_key((yyvsp[-3].blk));
   if (jv_is_valid(msg)) {
@@ -3795,20 +3832,20 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
   }
-#line 3799 "src/parser.c" /* yacc.c:1646  */
+#line 3836 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 970 "src/parser.y" /* yacc.c:1646  */
+  case 169:
+#line 976 "src/parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
   }
-#line 3808 "src/parser.c" /* yacc.c:1646  */
+#line 3845 "src/parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3812 "src/parser.c" /* yacc.c:1646  */
+#line 3849 "src/parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4043,7 +4080,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 974 "src/parser.y" /* yacc.c:1906  */
+#line 980 "src/parser.y" /* yacc.c:1906  */
 
 
 int jq_parse(struct locfile* locations, block* answer) {
index 2fdaed2f93ee423cc09883aecb599c8712fdbc03..6758102561955007f434cf96c925b671951eaa6e 100644 (file)
@@ -688,6 +688,12 @@ Term '[' Exp ']' '?' {
 Term '[' Exp ']' %prec NONOPT {
   $$ = gen_index($1, $3);
 } |
+Term '.' '[' Exp ']' '?' {
+  $$ = gen_index_opt($1, $4);
+} |
+Term '.' '[' Exp ']' %prec NONOPT {
+  $$ = gen_index($1, $4);
+} |
 Term '[' ']' '?' {
   $$ = block_join($1, gen_op_simple(EACH_OPT));
 } |