]> granicus.if.org Git - jq/commitdiff
Support "if" without "else" clause
authorChance Zibolski <czibolsk@redhat.com>
Fri, 15 Feb 2019 03:59:59 +0000 (19:59 -0800)
committerNico Williams <nico@cryptonector.com>
Thu, 21 Feb 2019 02:03:26 +0000 (20:03 -0600)
Defaults the else clause to the identity filter "." if an else clause is
missing.

The following two jq programs are considered equivalent:

```
if .foo then
    .foo = "bar"
else
    .
end
```

```
if .foo then
    .foo = "bar"
end
```

src/parser.c
src/parser.h
src/parser.y
tests/jq.test

index f82bdd1aa82f5780a0161173f9de4e3d69a234e7..93a924ae218355e56076c0d2c8274230ab7e7a43 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   1964
+#define YYLAST   2015
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  69
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  30
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  163
+#define YYNRULES  164
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  315
+#define YYNSTATES  316
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -739,22 +739,22 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint16 yyrline[] =
 {
        0,   300,   300,   303,   308,   311,   322,   325,   330,   333,
-     338,   342,   345,   349,   353,   357,   360,   365,   369,   373,
-     378,   385,   389,   393,   397,   401,   405,   409,   413,   417,
-     421,   425,   429,   433,   437,   441,   445,   449,   455,   461,
-     465,   469,   473,   477,   481,   485,   489,   493,   498,   501,
-     518,   527,   534,   542,   553,   558,   564,   567,   572,   577,
-     584,   584,   588,   588,   595,   598,   601,   607,   610,   615,
-     618,   621,   627,   630,   633,   641,   645,   648,   651,   654,
-     657,   660,   663,   666,   669,   673,   679,   682,   685,   688,
+     338,   342,   345,   349,   353,   357,   360,   363,   368,   372,
+     376,   381,   388,   392,   396,   400,   404,   408,   412,   416,
+     420,   424,   428,   432,   436,   440,   444,   448,   452,   458,
+     464,   468,   472,   476,   480,   484,   488,   492,   496,   501,
+     504,   521,   530,   537,   545,   556,   561,   567,   570,   575,
+     580,   587,   587,   591,   591,   598,   601,   604,   610,   613,
+     618,   621,   624,   630,   633,   636,   644,   648,   651,   654,
+     657,   660,   663,   666,   669,   672,   676,   682,   685,   688,
      691,   694,   697,   700,   703,   706,   709,   712,   715,   718,
-     721,   724,   727,   734,   738,   742,   754,   759,   760,   761,
-     762,   765,   768,   773,   778,   781,   786,   789,   794,   798,
-     801,   806,   809,   814,   817,   822,   825,   828,   831,   834,
-     837,   845,   851,   854,   857,   860,   863,   866,   869,   872,
+     721,   724,   727,   730,   737,   741,   745,   757,   762,   763,
+     764,   765,   768,   771,   776,   781,   784,   789,   792,   797,
+     801,   804,   809,   812,   817,   820,   825,   828,   831,   834,
+     837,   840,   848,   854,   857,   860,   863,   866,   869,   872,
      875,   878,   881,   884,   887,   890,   893,   896,   899,   902,
-     905,   910,   913,   914,   915,   918,   921,   924,   927,   931,
-     935,   939,   943,   951
+     905,   908,   913,   916,   917,   918,   921,   924,   927,   930,
+     934,   938,   942,   946,   954
 };
 #endif
 
@@ -797,52 +797,52 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -160
+#define YYPACT_NINF -158
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-160)))
+  (!!((Yystate) == (-158)))
 
-#define YYTABLE_NINF -152
+#define YYTABLE_NINF -153
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-152)))
+  (!!((Yytable_value) == (-153)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      29,   764,     3,    59,    -7,   -10,  -160,    16,  -160,    57,
-     764,   432,   432,   764,    18,     1,  -160,   764,   514,     2,
-     281,   174,   347,  1282,   764,  -160,     5,  -160,     4,     4,
-     764,    59,   672,   764,  -160,  -160,   -22,  1638,     9,    51,
-      43,    74,  -160,    75,  -160,    66,    49,  1112,  -160,  -160,
-    -160,   113,    16,    72,    65,  -160,   909,   -21,    70,  -160,
-    -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,
-    -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,   764,   130,
-      73,    76,    79,    95,   764,   764,   764,   764,   764,   764,
-     764,   764,   764,   764,   764,   764,   764,   764,   764,   764,
-     764,   764,   764,   764,   764,   764,   764,   764,  -160,  -160,
-    1806,    90,   -13,     4,   447,   137,  -160,  -160,  -160,  1806,
-     764,  -160,  -160,  1333,  1806,   -46,  -160,  -160,    19,   764,
-     579,   -13,   -13,   644,   104,  -160,    17,  -160,  -160,  -160,
-    -160,  -160,  -160,   404,   213,  -160,   213,  1146,    89,   213,
-     213,  -160,   404,  1874,   116,   116,  1840,   342,  1906,  1874,
-    1874,  1874,  1874,  1874,  1874,   116,   116,  1806,  1840,  1874,
-     116,   116,    66,    66,    98,    98,    98,  -160,   149,   -13,
-     826,   117,   112,   120,   103,    96,   764,   105,   859,    20,
-    -160,  -160,   764,  -160,    23,  -160,   160,    64,  -160,  1384,
-    -160,  1588,   123,   124,  -160,  -160,   764,  -160,   764,  -160,
-     -12,  -160,   213,   126,    53,   126,   127,   213,   126,   126,
-    -160,  -160,  -160,   -23,   131,   132,   764,   172,   135,   -18,
-    -160,   136,   -13,   764,  -160,  -160,   959,  -160,   736,   129,
-    -160,   185,  -160,  -160,  -160,    19,   139,  -160,   764,   764,
-    -160,   764,   764,  1806,  1672,  -160,   213,   213,   126,   -13,
-    -160,   -13,   -13,  1180,   143,   -13,   826,  -160,   -13,   153,
-    1806,   142,   151,  1009,  -160,  -160,  -160,   764,  1722,  1772,
-    1435,  1486,  -160,   126,   126,  -160,  -160,  -160,   147,   -13,
-    -160,  -160,  -160,  -160,  -160,   154,  1537,  -160,   764,   764,
-     764,   -13,  -160,  -160,  -160,  1588,  1214,  1059,  -160,  -160,
-    -160,   764,  -160,  1248,  -160
+      18,   765,    40,    48,    -6,    10,  -158,    31,  -158,    76,
+     765,   433,   433,   765,    20,     0,  -158,   765,   515,    17,
+     282,   146,   348,  1283,   765,  -158,     2,  -158,    -5,    -5,
+     765,    48,   673,   765,  -158,  -158,   -10,  1689,    14,    47,
+      79,   112,  -158,   119,  -158,     3,    63,  1113,  -158,  -158,
+    -158,   124,    31,    68,    61,  -158,   910,   -26,    67,  -158,
+    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
+    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,   765,   127,
+      70,    71,    77,    87,   765,   765,   765,   765,   765,   765,
+     765,   765,   765,   765,   765,   765,   765,   765,   765,   765,
+     765,   765,   765,   765,   765,   765,   765,   765,  -158,  -158,
+    1857,    86,   -16,    -5,   448,   135,  -158,  -158,  -158,  1857,
+     765,  -158,  -158,  1334,  1857,   -53,  -158,  -158,     1,   765,
+     580,   -16,   -16,   645,   108,  -158,    28,  -158,  -158,  -158,
+    -158,  -158,  -158,   405,   214,  -158,   214,  1147,    93,   214,
+     214,  -158,   405,  1925,   343,   343,  1891,   496,  1957,  1925,
+    1925,  1925,  1925,  1925,  1925,   343,   343,  1857,  1891,  1925,
+     343,   343,     3,     3,    99,    99,    99,  -158,   155,   -16,
+     827,   121,   115,   123,   107,   100,   765,   113,   860,     7,
+    -158,  -158,   765,  -158,    75,  -158,   166,   -20,  -158,  1385,
+    -158,  1589,   114,   117,  -158,  -158,   765,  -158,   765,  -158,
+     -18,  -158,   214,   125,    50,   125,   118,   214,   125,   125,
+    -158,  -158,  -158,   -23,   120,   126,   765,   174,   129,   -24,
+    -158,   130,   -16,   765,  -158,  -158,   960,  -158,   737,   122,
+    -158,   178,  -158,  -158,  -158,     1,   131,  -158,   765,   765,
+    -158,  -158,   765,   765,  1857,  1723,  -158,   214,   214,   125,
+     -16,  -158,   -16,   -16,  1181,   132,   -16,   827,  -158,   -16,
+     144,  1857,   138,   139,  1010,  -158,  -158,  -158,   765,  1773,
+    1823,  1436,  1487,  -158,   125,   125,  -158,  -158,  -158,   137,
+     -16,  -158,  -158,  -158,  -158,  -158,   140,  1538,  -158,   765,
+     765,   765,   -16,  -158,  -158,  -158,  1639,  1215,  1060,  -158,
+    -158,  -158,   765,  -158,  1249,  -158
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -850,53 +850,53 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,     0,     0,     6,   105,    81,    96,    98,    73,     0,
-       0,     0,     0,     0,     0,     0,    60,     0,     0,     0,
-       0,     0,     0,     0,     0,    97,    47,     1,     0,     0,
-       8,     6,     0,     0,    77,    62,     0,     0,     0,     0,
-      18,     0,    75,     0,    64,    32,     0,     0,   104,   103,
-      84,     0,     0,    83,     0,   101,     0,     0,   161,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,     0,     0,
-     158,     0,     0,   152,     0,     0,     0,     0,     0,     0,
+       4,     0,     0,     6,   106,    82,    97,    99,    74,     0,
+       0,     0,     0,     0,     0,     0,    61,     0,     0,     0,
+       0,     0,     0,     0,     0,    98,    48,     1,     0,     0,
+       8,     6,     0,     0,    78,    63,     0,     0,     0,     0,
+      19,     0,    76,     0,    65,    33,     0,     0,   105,   104,
+      85,     0,     0,    84,     0,   102,     0,     0,   162,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,     0,     0,
+     159,     0,     0,   153,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    21,     5,
-      10,    80,     0,     0,     0,     0,    53,    52,     3,     2,
-       8,     7,    48,     0,   113,     0,   111,    64,     0,     0,
-       0,     0,     0,     0,     0,    74,     0,   107,    99,    85,
-      79,   108,   100,     0,     0,   110,     0,     0,   160,     0,
-       0,   102,     0,    40,    41,    42,    25,    24,    23,    27,
-      31,    34,    36,    39,    26,    45,    46,    28,    29,    22,
-      43,    44,    30,    33,    35,    37,    38,    76,     0,     0,
-       0,     0,     0,   117,    82,     0,     0,    89,     0,     0,
-       9,    49,     0,   106,     0,    59,     0,     0,    56,     0,
-      16,     0,     0,     0,    19,    17,     0,    65,     0,    61,
-       0,   154,     0,   163,    71,   155,     0,     0,   157,   156,
-     153,   118,   121,     0,     0,     0,     0,     0,     0,     0,
-     123,     0,     0,     0,    78,   109,     0,    88,     0,    87,
-      51,     0,   112,    63,    58,     0,     0,    54,     0,     0,
-      15,     0,     0,    20,     0,    70,     0,     0,   159,     0,
-     119,     0,     0,     0,   125,     0,     0,   120,     0,   116,
-      11,    95,    94,     0,    86,    50,    57,     0,     0,     0,
-       0,     0,    66,    69,   162,   122,   131,   127,     0,     0,
-     129,   124,   128,    92,    91,    93,     0,    68,     0,     0,
-       0,     0,   126,    90,    55,     0,     0,     0,   130,    67,
-      12,     0,    14,     0,    13
+       0,     0,     0,     0,     0,     0,     0,     0,    22,     5,
+      10,    81,     0,     0,     0,     0,    54,    53,     3,     2,
+       8,     7,    49,     0,   114,     0,   112,    65,     0,     0,
+       0,     0,     0,     0,     0,    75,     0,   108,   100,    86,
+      80,   109,   101,     0,     0,   111,     0,     0,   161,     0,
+       0,   103,     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,    77,     0,     0,
+       0,     0,     0,   118,    83,     0,     0,    90,     0,     0,
+       9,    50,     0,   107,     0,    60,     0,     0,    57,     0,
+      17,     0,     0,     0,    20,    18,     0,    66,     0,    62,
+       0,   155,     0,   164,    72,   156,     0,     0,   158,   157,
+     154,   119,   122,     0,     0,     0,     0,     0,     0,     0,
+     124,     0,     0,     0,    79,   110,     0,    89,     0,    88,
+      52,     0,   113,    64,    59,     0,     0,    55,     0,     0,
+      16,    15,     0,     0,    21,     0,    71,     0,     0,   160,
+       0,   120,     0,     0,     0,   126,     0,     0,   121,     0,
+     117,    11,    96,    95,     0,    87,    51,    58,     0,     0,
+       0,     0,     0,    67,    70,   163,   123,   132,   128,     0,
+       0,   130,   125,   129,    93,    92,    94,     0,    69,     0,
+       0,     0,     0,   127,    91,    56,     0,     0,     0,   131,
+      68,    12,     0,    14,     0,    13
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -160,  -160,  -160,   180,    94,    -1,  -160,  -160,   187,   -11,
-    -160,   -19,     6,  -160,  -160,    97,   -83,  -145,    -4,  -160,
-      31,  -160,   -92,  -124,  -160,  -160,   -38,  -159,  -106,  -160
+    -158,  -158,  -158,   157,    81,    -1,  -158,  -158,   161,   -12,
+    -158,   -43,     6,  -158,  -158,    88,  -103,  -136,    -8,  -158,
+      22,  -158,   -57,  -123,  -158,  -158,   -51,  -157,  -105,  -158
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     2,     3,    30,   118,   110,    31,    32,   115,    24,
-     197,   198,    25,    44,   127,   136,   250,   213,    26,   125,
+     197,   198,    25,    44,   127,   136,   251,   213,    26,   125,
      126,   181,   182,   183,   223,   229,   230,    81,    82,    83
 };
 
@@ -905,156 +905,151 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      23,   215,    42,    27,   218,   219,    48,    38,    39,    37,
-     111,    52,    40,   192,   111,   193,    45,    47,   112,   120,
-      56,   231,   131,   195,   240,   259,    53,   143,    80,   119,
-     266,   123,   124,    49,   116,   116,   143,   211,   128,   202,
-     203,   129,   144,   260,     1,    16,   220,   145,    34,   178,
-     267,   144,   179,    33,   180,   222,   111,    35,   111,   207,
-     208,    36,   209,    43,   132,   207,   208,   255,   243,   113,
-     114,   133,   258,   113,   114,    28,    29,   147,   134,   135,
-      41,   196,   241,   153,   154,   155,   156,   157,   158,   159,
+      23,    42,    52,    38,    39,   195,   192,   111,   193,    37,
+     215,   240,    40,   218,   219,   112,    45,    47,   120,   111,
+      56,    48,   143,   231,   267,   260,    53,   131,    80,   119,
+     143,   123,   124,     1,   116,   116,    16,   144,   211,   245,
+      27,   246,   145,   261,   268,   144,   178,   220,    49,   179,
+     128,   180,   111,   129,    33,   111,   222,   105,   106,   107,
+     132,   108,    43,   196,    28,    29,   113,   114,    34,   241,
+     207,   208,    35,   209,   202,   203,   256,   147,   113,   114,
+      36,   259,    41,   153,   154,   155,   156,   157,   158,   159,
      160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   231,   269,   120,
-     137,   283,   284,   188,   139,   113,   114,   113,   114,   184,
-     105,   106,   107,   245,   108,   246,  -152,  -152,   199,   201,
-     140,   141,   205,   146,   148,   285,   149,   286,   287,   150,
-     214,   290,   214,   152,   292,   214,   214,   151,   177,    80,
-     189,   206,   217,   221,  -152,  -152,   108,   232,    80,   233,
-    -115,   234,   235,   237,   244,   302,  -152,  -152,   103,   104,
-     105,   106,   107,   256,   108,    54,   264,   308,     4,     5,
-       6,     7,     8,   251,   252,   236,   228,   274,     9,   275,
-     257,   124,    10,  -114,   261,   262,    11,    12,   265,   268,
-     293,    13,   277,    14,    15,   253,   289,   254,   214,   294,
-     301,   121,   303,   214,   190,    16,   117,     4,     5,     6,
-       7,     8,   309,   242,   194,   263,   276,    17,   291,     0,
-       0,     0,   270,     0,    18,     0,    19,   273,    20,    21,
-      55,    22,     0,    15,     0,     0,     0,   278,   279,     0,
-     280,   281,   214,   214,    16,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
-       0,     0,   228,    18,     0,    19,   296,    20,    21,     0,
-      22,   -72,    50,     0,     0,    51,   -72,     0,    52,     0,
-     -72,   -72,   -72,   -72,   -72,     0,     0,   305,   306,   307,
-     -72,   -72,   -72,     0,     0,   -72,   -72,   -72,     0,   -72,
-     313,     0,     0,   -72,   -72,   -72,   -72,   -72,   -72,   -72,
-     -72,     0,    16,     0,     0,   -72,     0,     0,   -72,   -72,
-     -72,   -72,   -72,   -72,   -72,   -72,   -72,   -72,     0,   -72,
-     -72,     0,   -72,     0,   -72,   -72,   -72,   -72,    57,   -72,
-       0,    58,    85,    86,    52,     0,     0,     0,     0,     0,
+     170,   171,   172,   173,   174,   175,   176,   133,   120,   270,
+     231,   113,   114,   188,   113,   114,   134,   207,   208,   184,
+     243,   284,   285,   135,   137,   139,   140,   141,   199,   201,
+     146,   148,   205,   149,   150,   152,   214,   286,   214,   287,
+     288,   214,   214,   291,   177,   151,   293,    54,   189,    80,
+       4,     5,     6,     7,     8,   206,   217,   108,    80,   221,
+       9,   232,   233,  -116,    10,   234,   235,   303,    11,    12,
+     244,   237,   257,    13,   252,    14,    15,   253,   265,   309,
+     275,   258,   276,   262,  -115,   236,   228,    16,   121,   263,
+     117,   124,   266,   269,   278,   290,   294,   295,   304,    17,
+     302,   190,   277,   310,   214,   254,    18,   255,    19,   214,
+      20,    21,    55,    22,   242,   194,   292,     0,     4,     5,
+       6,     7,     8,     0,     0,   264,     0,     0,     0,     0,
+       0,     0,   271,     0,     0,     0,     0,   274,     0,     0,
+       0,     0,     0,     0,    15,     0,     0,   279,   280,   214,
+     214,   281,   282,     0,     0,    16,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   212,     0,     0,
+       0,     0,     0,   228,    18,     0,    19,   297,    20,    21,
+       0,    22,   -73,    50,     0,     0,    51,   -73,     0,    52,
+       0,   -73,   -73,   -73,   -73,   -73,     0,     0,   306,   307,
+     308,   -73,   -73,   -73,     0,     0,   -73,   -73,   -73,     0,
+     -73,   314,     0,     0,   -73,   -73,   -73,   -73,   -73,   -73,
+     -73,   -73,     0,    16,     0,     0,   -73,     0,     0,   -73,
+     -73,   -73,   -73,   -73,   -73,   -73,   -73,   -73,   -73,     0,
+     -73,   -73,     0,   -73,     0,   -73,   -73,   -73,   -73,    57,
+     -73,     0,    58,  -153,  -153,    52,     0,     0,     0,     0,
+       0,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+       0,  -153,  -153,     0,     0,     0,     0,     0,     0,    16,
+       0,     0,     0,  -153,  -153,   103,   104,   105,   106,   107,
+       0,   108,     0,     0,     0,     0,   210,     0,    78,    58,
+      79,     0,    52,     0,     0,     0,  -152,     0,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,     4,     5,     6,
+       7,     8,     0,     0,     0,     0,    16,     0,     0,   185,
+       0,     0,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     9,    15,     0,    78,    10,    79,     0,     0,
+      11,    12,     0,  -152,    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,    85,    86,    18,     0,
+      19,   186,    20,    21,   187,    22,    46,     0,     0,     4,
+       5,     6,     7,     8,     0,     0,     0,     0,     0,     9,
+       0,     0,     0,    10,    96,    97,     0,    11,    12,     0,
+       0,     0,    13,     0,    14,    15,   101,   102,   103,   104,
+     105,   106,   107,     0,   108,     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,   200,    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,   204,    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,     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,   273,    22,     0,    16,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+       0,     0,     0,     0,     0,    18,     0,    19,   224,    20,
+      21,   225,    22,     0,    52,     0,     0,     0,     0,     0,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,     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,   210,     0,    78,    58,    79,
-       0,    52,     0,     0,     0,  -151,     0,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,     4,     5,     6,     7,
-       8,     0,     0,     0,     0,    16,     0,     0,   185,     0,
-       0,     4,     5,     6,     7,     8,     0,     0,     0,     0,
-       0,     9,    15,     0,    78,    10,    79,     0,     0,    11,
-      12,     0,  -151,    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,
-     186,    20,    21,   187,    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,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,     0,    19,     0,    20,    21,
-     200,    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,   204,    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,
-       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,   272,    22,     0,    16,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       0,     0,     0,     0,    18,     0,    19,   224,    20,    21,
-     225,    22,     0,    52,     0,     0,     0,     0,     0,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,     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,   226,     0,   227,     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,   238,     0,     0,   239,     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,   271,     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,   295,     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,     0,
-     312,    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,
-      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,   216,     0,     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,   226,     0,   227,
        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,   288,     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,   310,     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,   314,
-       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,   109,    84,    85,    86,    87,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,     0,   108,    84,
+      85,    86,    87,   238,     0,     0,   239,     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,   272,     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,   296,     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,   312,
+       0,   313,    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,    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,   216,     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,   289,     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,   311,     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,
+     315,     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,   191,    84,    85,    86,    87,     0,     0,     0,
+       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,   247,    84,    85,    86,    87,     0,     0,
+     107,     0,   108,   191,    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,   299,    84,    85,    86,    87,     0,
+     106,   107,     0,   108,   247,    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,
@@ -1064,185 +1059,190 @@ static const yytype_int16 yytable[] =
        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,   304,    84,    85,    86,
-      87,     0,     0,     0,     0,     0,     0,     0,   248,   249,
+     104,   105,   106,   107,     0,   108,   301,    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,
-       0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,     0,     0,   282,     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,   297,    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,   298,     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,    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,  -152,    85,    86,     0,     0,     0,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,    88,
-      89,     0,     0,     0,     0,     0,  -152,  -152,  -152,  -152,
-    -152,  -152,    96,    97,     0,     0,    85,    86,     0,     0,
-       0,     0,     0,  -152,   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,     0,   108
+     103,   104,   105,   106,   107,     0,   108,   305,    84,    85,
+      86,    87,     0,     0,     0,     0,     0,     0,     0,   248,
+     249,     0,     0,   250,    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,   248,
+     249,     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,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,     0,     0,   283,     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,   298,    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,   299,     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,
+      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,  -153,    85,    86,     0,     0,     0,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+      88,    89,     0,     0,     0,     0,     0,  -153,  -153,  -153,
+    -153,  -153,  -153,    96,    97,     0,     0,    85,    86,     0,
+       0,     0,     0,     0,  -153,   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,     0,   108
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,   146,     1,     0,   149,   150,     4,    11,    12,    10,
-       5,     7,    13,    59,     5,    61,    17,    18,    13,    30,
-      21,   180,    13,     4,     4,    48,    20,    48,    22,    30,
-      48,    32,    33,    31,    28,    29,    48,   143,    60,   131,
-     132,    63,    63,    66,    15,    41,   152,    68,    58,    62,
-      68,    63,    65,    60,    67,   179,     5,    41,     5,    42,
-      43,     4,    45,    62,    13,    42,    43,   212,    45,    64,
-      65,    28,   217,    64,    65,    16,    17,    78,     4,     4,
-      62,    62,    62,    84,    85,    86,    87,    88,    89,    90,
+       1,     1,     7,    11,    12,     4,    59,     5,    61,    10,
+     146,     4,    13,   149,   150,    13,    17,    18,    30,     5,
+      21,     4,    48,   180,    48,    48,    20,    13,    22,    30,
+      48,    32,    33,    15,    28,    29,    41,    63,   143,    59,
+       0,    61,    68,    66,    68,    63,    62,   152,    31,    65,
+      60,    67,     5,    63,    60,     5,   179,    54,    55,    56,
+      13,    58,    62,    62,    16,    17,    64,    65,    58,    62,
+      42,    43,    41,    45,   131,   132,   212,    78,    64,    65,
+       4,   217,    62,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   266,   232,   120,
-      61,   256,   257,   114,     1,    64,    65,    64,    65,   113,
-      54,    55,    56,    59,    58,    61,    10,    11,   129,   130,
-      58,    66,   133,    63,     4,   259,    63,   261,   262,    63,
-     144,   265,   146,    48,   268,   149,   150,    68,    58,   143,
-      13,    47,    63,     4,    38,    39,    58,    40,   152,    47,
-      40,    58,    66,    58,     4,   289,    50,    51,    52,    53,
-      54,    55,    56,    47,    58,     1,     4,   301,     4,     5,
-       6,     7,     8,    60,    60,   186,   180,    58,    14,     4,
-      63,   192,    18,    40,    63,    63,    22,    23,    63,    63,
-      58,    27,    63,    29,    30,   206,    63,   208,   212,    58,
-      63,    31,    58,   217,   120,    41,    29,     4,     5,     6,
-       7,     8,   305,   192,   127,   226,   245,    53,   266,    -1,
-      -1,    -1,   233,    -1,    60,    -1,    62,   238,    64,    65,
-      66,    67,    -1,    30,    -1,    -1,    -1,   248,   249,    -1,
-     251,   252,   256,   257,    41,    -1,    -1,    -1,    -1,    -1,
+     101,   102,   103,   104,   105,   106,   107,    28,   120,   232,
+     267,    64,    65,   114,    64,    65,     4,    42,    43,   113,
+      45,   257,   258,     4,    61,     1,    58,    66,   129,   130,
+      63,     4,   133,    63,    63,    48,   144,   260,   146,   262,
+     263,   149,   150,   266,    58,    68,   269,     1,    13,   143,
+       4,     5,     6,     7,     8,    47,    63,    58,   152,     4,
+      14,    40,    47,    40,    18,    58,    66,   290,    22,    23,
+       4,    58,    47,    27,    60,    29,    30,    60,     4,   302,
+      58,    63,     4,    63,    40,   186,   180,    41,    31,    63,
+      29,   192,    63,    63,    63,    63,    58,    58,    58,    53,
+      63,   120,   245,   306,   212,   206,    60,   208,    62,   217,
+      64,    65,    66,    67,   192,   127,   267,    -1,     4,     5,
+       6,     7,     8,    -1,    -1,   226,    -1,    -1,    -1,    -1,
+      -1,    -1,   233,    -1,    -1,    -1,    -1,   238,    -1,    -1,
+      -1,    -1,    -1,    -1,    30,    -1,    -1,   248,   249,   257,
+     258,   252,   253,    -1,    -1,    41,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,
+      -1,    -1,    -1,   267,    60,    -1,    62,   278,    64,    65,
+      -1,    67,     0,     1,    -1,    -1,     4,     5,    -1,     7,
+      -1,     9,    10,    11,    12,    13,    -1,    -1,   299,   300,
+     301,    19,    20,    21,    -1,    -1,    24,    25,    26,    -1,
+      28,   312,    -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,    10,    11,    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,    38,    39,    -1,    22,    23,    -1,
+      -1,    -1,    27,    -1,    29,    30,    50,    51,    52,    53,
+      54,    55,    56,    -1,    58,    -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,    -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,   266,    60,    -1,    62,   277,    64,    65,    -1,
-      67,     0,     1,    -1,    -1,     4,     5,    -1,     7,    -1,
-       9,    10,    11,    12,    13,    -1,    -1,   298,   299,   300,
-      19,    20,    21,    -1,    -1,    24,    25,    26,    -1,    28,
-     311,    -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,
+      -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,
-      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,
-       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,    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,    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,
-      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,    -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,     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,     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,     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,
-      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,    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,    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,    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,    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,    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,    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,
@@ -1266,43 +1266,53 @@ 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,
+      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,
-      -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,    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,
-      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,    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,    -1,    58
+      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,    -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,    -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,    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,    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,    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,    -1,    58
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1334,13 +1344,13 @@ static const yytype_uint8 yystos[] =
       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,    59,    61,    59,    20,    21,
-      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
+      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
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1350,41 +1360,41 @@ static const yytype_uint8 yyr1[] =
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    75,    75,
-      76,    76,    76,    77,    78,    78,    79,    79,    80,    80,
-      82,    81,    83,    81,    84,    84,    84,    85,    85,    86,
-      86,    86,    87,    87,    87,    87,    87,    87,    87,    87,
+      74,    74,    74,    74,    74,    74,    74,    74,    74,    75,
+      75,    76,    76,    76,    77,    78,    78,    79,    79,    80,
+      80,    82,    81,    83,    81,    84,    84,    84,    85,    85,
+      86,    86,    86,    87,    87,    87,    87,    87,    87,    87,
       87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
       87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
       87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
-      87,    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,
+      87,    87,    88,    88,    89,    90,    90,    91,    91,    92,
+      92,    92,    93,    93,    94,    94,    95,    95,    95,    95,
+      95,    95,    95,    96,    96,    96,    96,    96,    96,    96,
       96,    96,    96,    96,    96,    96,    96,    96,    96,    96,
-      96,    97,    97,    97,    97,    98,    98,    98,    98,    98,
-      98,    98,    98,    98
+      96,    96,    97,    97,    97,    97,    98,    98,    98,    98,
+      98,    98,    98,    98,    98
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     3,     3,     0,     3,     0,     2,     0,     2,
-       2,     5,     9,    11,     9,     5,     4,     4,     2,     4,
-       5,     2,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     2,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     1,     2,     3,
-       5,     4,     2,     1,     5,     8,     1,     3,     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,     1,     1,
+       2,     5,     9,    11,     9,     5,     5,     4,     4,     2,
+       4,     5,     2,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     2,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     1,     2,
+       3,     5,     4,     2,     1,     5,     8,     1,     3,     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,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     1,     3,     3,     3,     3,     3,     1,     4,
-       2,     1,     5,     3
+       1,     1,     0,     1,     3,     3,     3,     3,     3,     1,
+       4,     2,     1,     5,     3
 };
 
 
@@ -1817,6 +1827,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1885,189 +1896,189 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
   switch (yytype)
     {
           case 4: /* IDENT  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1891 "src/parser.c" /* yacc.c:1257  */
+#line 1902 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 5: /* FIELD  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1897 "src/parser.c" /* yacc.c:1257  */
+#line 1908 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 6: /* LITERAL  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1903 "src/parser.c" /* yacc.c:1257  */
+#line 1914 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 7: /* FORMAT  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1909 "src/parser.c" /* yacc.c:1257  */
+#line 1920 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 42: /* QQSTRING_TEXT  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1915 "src/parser.c" /* yacc.c:1257  */
+#line 1926 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 71: /* Module  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1921 "src/parser.c" /* yacc.c:1257  */
+#line 1932 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 72: /* Imports  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1927 "src/parser.c" /* yacc.c:1257  */
+#line 1938 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 73: /* FuncDefs  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1933 "src/parser.c" /* yacc.c:1257  */
+#line 1944 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 74: /* Exp  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1939 "src/parser.c" /* yacc.c:1257  */
+#line 1950 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 75: /* Import  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1945 "src/parser.c" /* yacc.c:1257  */
+#line 1956 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 76: /* ImportWhat  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1951 "src/parser.c" /* yacc.c:1257  */
+#line 1962 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 77: /* ImportFrom  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1957 "src/parser.c" /* yacc.c:1257  */
+#line 1968 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 78: /* FuncDef  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1963 "src/parser.c" /* yacc.c:1257  */
+#line 1974 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 79: /* Params  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1969 "src/parser.c" /* yacc.c:1257  */
+#line 1980 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 80: /* Param  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1975 "src/parser.c" /* yacc.c:1257  */
+#line 1986 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 81: /* String  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1981 "src/parser.c" /* yacc.c:1257  */
+#line 1992 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 84: /* QQString  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1987 "src/parser.c" /* yacc.c:1257  */
+#line 1998 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 85: /* ElseBody  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1993 "src/parser.c" /* yacc.c:1257  */
+#line 2004 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 86: /* ExpD  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 1999 "src/parser.c" /* yacc.c:1257  */
+#line 2010 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 87: /* Term  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2005 "src/parser.c" /* yacc.c:1257  */
+#line 2016 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 88: /* Args  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2011 "src/parser.c" /* yacc.c:1257  */
+#line 2022 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 89: /* Arg  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2017 "src/parser.c" /* yacc.c:1257  */
+#line 2028 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 90: /* RepPatterns  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2023 "src/parser.c" /* yacc.c:1257  */
+#line 2034 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 91: /* Patterns  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2029 "src/parser.c" /* yacc.c:1257  */
+#line 2040 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 92: /* Pattern  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2035 "src/parser.c" /* yacc.c:1257  */
+#line 2046 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 93: /* ArrayPats  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2041 "src/parser.c" /* yacc.c:1257  */
+#line 2052 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 94: /* ObjPats  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2047 "src/parser.c" /* yacc.c:1257  */
+#line 2058 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 95: /* ObjPat  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2053 "src/parser.c" /* yacc.c:1257  */
+#line 2064 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 96: /* Keyword  */
-#line 36 "src/parser.y" /* yacc.c:1257  */
+#line 36 "src/parser.y" /* yacc.c:1258  */
       { jv_free(((*yyvaluep).literal)); }
-#line 2059 "src/parser.c" /* yacc.c:1257  */
+#line 2070 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 97: /* MkDict  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2065 "src/parser.c" /* yacc.c:1257  */
+#line 2076 "src/parser.c" /* yacc.c:1258  */
         break;
 
     case 98: /* MkDictPair  */
-#line 37 "src/parser.y" /* yacc.c:1257  */
+#line 37 "src/parser.y" /* yacc.c:1258  */
       { block_free(((*yyvaluep).blk)); }
-#line 2071 "src/parser.c" /* yacc.c:1257  */
+#line 2082 "src/parser.c" /* yacc.c:1258  */
         break;
 
 
@@ -2353,37 +2364,38 @@ yyreduce:
      GCC warning that YYVAL may be used uninitialized.  */
   yyval = yyvsp[1-yylen];
 
-  /* Default location.  */
+  /* Default location. */
   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+  yyerror_range[1] = yyloc;
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
         case 2:
-#line 300 "src/parser.y" /* yacc.c:1646  */
+#line 300 "src/parser.y" /* yacc.c:1648  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
 }
-#line 2367 "src/parser.c" /* yacc.c:1646  */
+#line 2379 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 3:
-#line 303 "src/parser.y" /* yacc.c:1646  */
+#line 303 "src/parser.y" /* yacc.c:1648  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2375 "src/parser.c" /* yacc.c:1646  */
+#line 2387 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 4:
-#line 308 "src/parser.y" /* yacc.c:1646  */
+#line 308 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2383 "src/parser.c" /* yacc.c:1646  */
+#line 2395 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 5:
-#line 311 "src/parser.y" /* yacc.c:1646  */
+#line 311 "src/parser.y" /* yacc.c:1648  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant");
@@ -2393,366 +2405,374 @@ yyreduce:
     (yyval.blk) = gen_module((yyvsp[-1].blk));
   }
 }
-#line 2397 "src/parser.c" /* yacc.c:1646  */
+#line 2409 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 6:
-#line 322 "src/parser.y" /* yacc.c:1646  */
+#line 322 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2405 "src/parser.c" /* yacc.c:1646  */
+#line 2417 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 7:
-#line 325 "src/parser.y" /* yacc.c:1646  */
+#line 325 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2413 "src/parser.c" /* yacc.c:1646  */
+#line 2425 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 8:
-#line 330 "src/parser.y" /* yacc.c:1646  */
+#line 330 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2421 "src/parser.c" /* yacc.c:1646  */
+#line 2433 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 9:
-#line 333 "src/parser.y" /* yacc.c:1646  */
+#line 333 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2429 "src/parser.c" /* yacc.c:1646  */
+#line 2441 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 10:
-#line 338 "src/parser.y" /* yacc.c:1646  */
+#line 338 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2437 "src/parser.c" /* yacc.c:1646  */
+#line 2449 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 11:
-#line 342 "src/parser.y" /* yacc.c:1646  */
+#line 342 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2445 "src/parser.c" /* yacc.c:1646  */
+#line 2457 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 12:
-#line 345 "src/parser.y" /* yacc.c:1646  */
+#line 345 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2453 "src/parser.c" /* yacc.c:1646  */
+#line 2465 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 13:
-#line 349 "src/parser.y" /* yacc.c:1646  */
+#line 349 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2461 "src/parser.c" /* yacc.c:1646  */
+#line 2473 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 14:
-#line 353 "src/parser.y" /* yacc.c:1646  */
+#line 353 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
 }
-#line 2469 "src/parser.c" /* yacc.c:1646  */
+#line 2481 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 15:
-#line 357 "src/parser.y" /* yacc.c:1646  */
+#line 357 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2477 "src/parser.c" /* yacc.c:1646  */
+#line 2489 "src/parser.c" /* yacc.c:1648  */
     break;
 
   case 16:
-#line 360 "src/parser.y" /* yacc.c:1646  */
+#line 360 "src/parser.y" /* yacc.c:1648  */
+    {
+  (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
+}
+#line 2497 "src/parser.c" /* yacc.c:1648  */
+    break;
+
+  case 17:
+#line 363 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "Possibly unterminated 'if' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2486 "src/parser.c" /* yacc.c:1646  */
+#line 2506 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 17:
-#line 365 "src/parser.y" /* yacc.c:1646  */
+  case 18:
+#line 368 "src/parser.y" /* yacc.c:1648  */
     {
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4);
   (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk)));
 }
-#line 2495 "src/parser.c" /* yacc.c:1646  */
+#line 2515 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 18:
-#line 369 "src/parser.y" /* yacc.c:1646  */
+  case 19:
+#line 372 "src/parser.y" /* yacc.c:1648  */
     {
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK));
   (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
 }
-#line 2504 "src/parser.c" /* yacc.c:1646  */
+#line 2524 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 19:
-#line 373 "src/parser.y" /* yacc.c:1646  */
+  case 20:
+#line 376 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "Possibly unterminated 'try' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2513 "src/parser.c" /* yacc.c:1646  */
+#line 2533 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 20:
-#line 378 "src/parser.y" /* yacc.c:1646  */
+  case 21:
+#line 381 "src/parser.y" /* yacc.c:1648  */
     {
   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal)));
   (yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk)));
   jv_free((yyvsp[-2].literal));
   jv_free(v);
 }
-#line 2524 "src/parser.c" /* yacc.c:1646  */
+#line 2544 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 21:
-#line 385 "src/parser.y" /* yacc.c:1646  */
+  case 22:
+#line 388 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
 }
-#line 2532 "src/parser.c" /* yacc.c:1646  */
+#line 2552 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 22:
-#line 389 "src/parser.y" /* yacc.c:1646  */
+  case 23:
+#line 392 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2540 "src/parser.c" /* yacc.c:1646  */
+#line 2560 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 23:
-#line 393 "src/parser.y" /* yacc.c:1646  */
+  case 24:
+#line 396 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2548 "src/parser.c" /* yacc.c:1646  */
+#line 2568 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 24:
-#line 397 "src/parser.y" /* yacc.c:1646  */
+  case 25:
+#line 400 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2556 "src/parser.c" /* yacc.c:1646  */
+#line 2576 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 25:
-#line 401 "src/parser.y" /* yacc.c:1646  */
+  case 26:
+#line 404 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2564 "src/parser.c" /* yacc.c:1646  */
+#line 2584 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 26:
-#line 405 "src/parser.y" /* yacc.c:1646  */
+  case 27:
+#line 408 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2572 "src/parser.c" /* yacc.c:1646  */
+#line 2592 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 27:
-#line 409 "src/parser.y" /* yacc.c:1646  */
+  case 28:
+#line 412 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2580 "src/parser.c" /* yacc.c:1646  */
+#line 2600 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 28:
-#line 413 "src/parser.y" /* yacc.c:1646  */
+  case 29:
+#line 416 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2588 "src/parser.c" /* yacc.c:1646  */
+#line 2608 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 29:
-#line 417 "src/parser.y" /* yacc.c:1646  */
+  case 30:
+#line 420 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2596 "src/parser.c" /* yacc.c:1646  */
+#line 2616 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 30:
-#line 421 "src/parser.y" /* yacc.c:1646  */
+  case 31:
+#line 424 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2604 "src/parser.c" /* yacc.c:1646  */
+#line 2624 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 31:
-#line 425 "src/parser.y" /* yacc.c:1646  */
+  case 32:
+#line 428 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2612 "src/parser.c" /* yacc.c:1646  */
+#line 2632 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 32:
-#line 429 "src/parser.y" /* yacc.c:1646  */
+  case 33:
+#line 432 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2620 "src/parser.c" /* yacc.c:1646  */
+#line 2640 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 33:
-#line 433 "src/parser.y" /* yacc.c:1646  */
+  case 34:
+#line 436 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2628 "src/parser.c" /* yacc.c:1646  */
+#line 2648 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 34:
-#line 437 "src/parser.y" /* yacc.c:1646  */
+  case 35:
+#line 440 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2636 "src/parser.c" /* yacc.c:1646  */
+#line 2656 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 35:
-#line 441 "src/parser.y" /* yacc.c:1646  */
+  case 36:
+#line 444 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2644 "src/parser.c" /* yacc.c:1646  */
+#line 2664 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 36:
-#line 445 "src/parser.y" /* yacc.c:1646  */
+  case 37:
+#line 448 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2652 "src/parser.c" /* yacc.c:1646  */
+#line 2672 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 37:
-#line 449 "src/parser.y" /* yacc.c:1646  */
+  case 38:
+#line 452 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/');
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Division by zero?");
 }
-#line 2662 "src/parser.c" /* yacc.c:1646  */
+#line 2682 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 38:
-#line 455 "src/parser.y" /* yacc.c:1646  */
+  case 39:
+#line 458 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%');
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Remainder by zero?");
 }
-#line 2672 "src/parser.c" /* yacc.c:1646  */
+#line 2692 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 39:
-#line 461 "src/parser.y" /* yacc.c:1646  */
+  case 40:
+#line 464 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2680 "src/parser.c" /* yacc.c:1646  */
+#line 2700 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 40:
-#line 465 "src/parser.y" /* yacc.c:1646  */
+  case 41:
+#line 468 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2688 "src/parser.c" /* yacc.c:1646  */
+#line 2708 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 41:
-#line 469 "src/parser.y" /* yacc.c:1646  */
+  case 42:
+#line 472 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
 }
-#line 2696 "src/parser.c" /* yacc.c:1646  */
+#line 2716 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 42:
-#line 473 "src/parser.y" /* yacc.c:1646  */
+  case 43:
+#line 476 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
 }
-#line 2704 "src/parser.c" /* yacc.c:1646  */
+#line 2724 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 43:
-#line 477 "src/parser.y" /* yacc.c:1646  */
+  case 44:
+#line 480 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
 }
-#line 2712 "src/parser.c" /* yacc.c:1646  */
+#line 2732 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 44:
-#line 481 "src/parser.y" /* yacc.c:1646  */
+  case 45:
+#line 484 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
 }
-#line 2720 "src/parser.c" /* yacc.c:1646  */
+#line 2740 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 45:
-#line 485 "src/parser.y" /* yacc.c:1646  */
+  case 46:
+#line 488 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
 }
-#line 2728 "src/parser.c" /* yacc.c:1646  */
+#line 2748 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 46:
-#line 489 "src/parser.y" /* yacc.c:1646  */
+  case 47:
+#line 492 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
 }
-#line 2736 "src/parser.c" /* yacc.c:1646  */
+#line 2756 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 47:
-#line 493 "src/parser.y" /* yacc.c:1646  */
+  case 48:
+#line 496 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2744 "src/parser.c" /* yacc.c:1646  */
+#line 2764 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 48:
-#line 498 "src/parser.y" /* yacc.c:1646  */
+  case 49:
+#line 501 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2752 "src/parser.c" /* yacc.c:1646  */
+#line 2772 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 49:
-#line 501 "src/parser.y" /* yacc.c:1646  */
+  case 50:
+#line 504 "src/parser.y" /* yacc.c:1648  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant");
@@ -2768,11 +2788,11 @@ yyreduce:
     (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
   }
 }
-#line 2772 "src/parser.c" /* yacc.c:1646  */
+#line 2792 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 50:
-#line 518 "src/parser.y" /* yacc.c:1646  */
+  case 51:
+#line 521 "src/parser.y" /* yacc.c:1648  */
     {
   jv v = block_const((yyvsp[-3].blk));
   // XXX Make gen_import take only blocks and the int is_data so we
@@ -2782,11 +2802,11 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2786 "src/parser.c" /* yacc.c:1646  */
+#line 2806 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 51:
-#line 527 "src/parser.y" /* yacc.c:1646  */
+  case 52:
+#line 530 "src/parser.y" /* yacc.c:1648  */
     {
   jv v = block_const((yyvsp[-2].blk));
   (yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 0);
@@ -2794,22 +2814,22 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2798 "src/parser.c" /* yacc.c:1646  */
+#line 2818 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 52:
-#line 534 "src/parser.y" /* yacc.c:1646  */
+  case 53:
+#line 537 "src/parser.y" /* yacc.c:1648  */
     {
   jv v = block_const((yyvsp[0].blk));
   (yyval.blk) = gen_import(jv_string_value(v), NULL, 0);
   block_free((yyvsp[0].blk));
   jv_free(v);
 }
-#line 2809 "src/parser.c" /* yacc.c:1646  */
+#line 2829 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 53:
-#line 542 "src/parser.y" /* yacc.c:1646  */
+  case 54:
+#line 545 "src/parser.y" /* yacc.c:1648  */
     {
   if (!block_is_const((yyvsp[0].blk))) {
     FAIL((yyloc), "Import path must be constant");
@@ -2819,173 +2839,173 @@ yyreduce:
     (yyval.blk) = (yyvsp[0].blk);
   }
 }
-#line 2823 "src/parser.c" /* yacc.c:1646  */
+#line 2843 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 54:
-#line 553 "src/parser.y" /* yacc.c:1646  */
+  case 55:
+#line 556 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 2832 "src/parser.c" /* yacc.c:1646  */
+#line 2852 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 55:
-#line 558 "src/parser.y" /* yacc.c:1646  */
+  case 56:
+#line 561 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-6].literal));
 }
-#line 2841 "src/parser.c" /* yacc.c:1646  */
+#line 2861 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 56:
-#line 564 "src/parser.y" /* yacc.c:1646  */
+  case 57:
+#line 567 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2849 "src/parser.c" /* yacc.c:1646  */
+#line 2869 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 57:
-#line 567 "src/parser.y" /* yacc.c:1646  */
+  case 58:
+#line 570 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2857 "src/parser.c" /* yacc.c:1646  */
+#line 2877 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 58:
-#line 572 "src/parser.y" /* yacc.c:1646  */
+  case 59:
+#line 575 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2866 "src/parser.c" /* yacc.c:1646  */
+#line 2886 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 59:
-#line 577 "src/parser.y" /* yacc.c:1646  */
+  case 60:
+#line 580 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2875 "src/parser.c" /* yacc.c:1646  */
+#line 2895 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 60:
-#line 584 "src/parser.y" /* yacc.c:1646  */
+  case 61:
+#line 587 "src/parser.y" /* yacc.c:1648  */
     { (yyval.literal) = jv_string("text"); }
-#line 2881 "src/parser.c" /* yacc.c:1646  */
+#line 2901 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 61:
-#line 584 "src/parser.y" /* yacc.c:1646  */
+  case 62:
+#line 587 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2890 "src/parser.c" /* yacc.c:1646  */
+#line 2910 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 62:
-#line 588 "src/parser.y" /* yacc.c:1646  */
+  case 63:
+#line 591 "src/parser.y" /* yacc.c:1648  */
     { (yyval.literal) = (yyvsp[-1].literal); }
-#line 2896 "src/parser.c" /* yacc.c:1646  */
+#line 2916 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 63:
-#line 588 "src/parser.y" /* yacc.c:1646  */
+  case 64:
+#line 591 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2905 "src/parser.c" /* yacc.c:1646  */
+#line 2925 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 64:
-#line 595 "src/parser.y" /* yacc.c:1646  */
+  case 65:
+#line 598 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_const(jv_string(""));
 }
-#line 2913 "src/parser.c" /* yacc.c:1646  */
+#line 2933 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 65:
-#line 598 "src/parser.y" /* yacc.c:1646  */
+  case 66:
+#line 601 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
 }
-#line 2921 "src/parser.c" /* yacc.c:1646  */
+#line 2941 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 66:
-#line 601 "src/parser.y" /* yacc.c:1646  */
+  case 67:
+#line 604 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
 }
-#line 2929 "src/parser.c" /* yacc.c:1646  */
+#line 2949 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 67:
-#line 607 "src/parser.y" /* yacc.c:1646  */
+  case 68:
+#line 610 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2937 "src/parser.c" /* yacc.c:1646  */
+#line 2957 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 68:
-#line 610 "src/parser.y" /* yacc.c:1646  */
+  case 69:
+#line 613 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2945 "src/parser.c" /* yacc.c:1646  */
+#line 2965 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 69:
-#line 615 "src/parser.y" /* yacc.c:1646  */
+  case 70:
+#line 618 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2953 "src/parser.c" /* yacc.c:1646  */
+#line 2973 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 70:
-#line 618 "src/parser.y" /* yacc.c:1646  */
+  case 71:
+#line 621 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2961 "src/parser.c" /* yacc.c:1646  */
+#line 2981 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 71:
-#line 621 "src/parser.y" /* yacc.c:1646  */
+  case 72:
+#line 624 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2969 "src/parser.c" /* yacc.c:1646  */
+#line 2989 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 72:
-#line 627 "src/parser.y" /* yacc.c:1646  */
+  case 73:
+#line 630 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2977 "src/parser.c" /* yacc.c:1646  */
+#line 2997 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 73:
-#line 630 "src/parser.y" /* yacc.c:1646  */
+  case 74:
+#line 633 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_call("recurse", gen_noop());
 }
-#line 2985 "src/parser.c" /* yacc.c:1646  */
+#line 3005 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 74:
-#line 633 "src/parser.y" /* yacc.c:1646  */
+  case 75:
+#line 636 "src/parser.y" /* yacc.c:1648  */
     {
   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal)));     // impossible symbol
   (yyval.blk) = gen_location((yyloc), locations,
@@ -2994,231 +3014,231 @@ yyreduce:
   jv_free(v);
   jv_free((yyvsp[0].literal));
 }
-#line 2998 "src/parser.c" /* yacc.c:1646  */
+#line 3018 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 75:
-#line 641 "src/parser.y" /* yacc.c:1646  */
+  case 76:
+#line 644 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "break requires a label to break to");
   (yyval.blk) = gen_noop();
 }
-#line 3007 "src/parser.c" /* yacc.c:1646  */
+#line 3027 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 76:
-#line 645 "src/parser.y" /* yacc.c:1646  */
+  case 77:
+#line 648 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
 }
-#line 3015 "src/parser.c" /* yacc.c:1646  */
+#line 3035 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 77:
-#line 648 "src/parser.y" /* yacc.c:1646  */
+  case 78:
+#line 651 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
 }
-#line 3023 "src/parser.c" /* yacc.c:1646  */
+#line 3043 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 78:
-#line 651 "src/parser.y" /* yacc.c:1646  */
+  case 79:
+#line 654 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3031 "src/parser.c" /* yacc.c:1646  */
+#line 3051 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 79:
-#line 654 "src/parser.y" /* yacc.c:1646  */
+  case 80:
+#line 657 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
 }
-#line 3039 "src/parser.c" /* yacc.c:1646  */
+#line 3059 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 80:
-#line 657 "src/parser.y" /* yacc.c:1646  */
+  case 81:
+#line 660 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
 }
-#line 3047 "src/parser.c" /* yacc.c:1646  */
+#line 3067 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 81:
-#line 660 "src/parser.y" /* yacc.c:1646  */
+  case 82:
+#line 663 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
 }
-#line 3055 "src/parser.c" /* yacc.c:1646  */
+#line 3075 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 82:
-#line 663 "src/parser.y" /* yacc.c:1646  */
+  case 83:
+#line 666 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3063 "src/parser.c" /* yacc.c:1646  */
+#line 3083 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 83:
-#line 666 "src/parser.y" /* yacc.c:1646  */
+  case 84:
+#line 669 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
 }
-#line 3071 "src/parser.c" /* yacc.c:1646  */
+#line 3091 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 84:
-#line 669 "src/parser.y" /* yacc.c:1646  */
+  case 85:
+#line 672 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3080 "src/parser.c" /* yacc.c:1646  */
+#line 3100 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 85:
-#line 673 "src/parser.y" /* yacc.c:1646  */
+  case 86:
+#line 676 "src/parser.y" /* yacc.c:1648  */
     {
   jv_free((yyvsp[-1].literal));
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3090 "src/parser.c" /* yacc.c:1646  */
+#line 3110 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 86:
-#line 679 "src/parser.y" /* yacc.c:1646  */
+  case 87:
+#line 682 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
 }
-#line 3098 "src/parser.c" /* yacc.c:1646  */
+#line 3118 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 87:
-#line 682 "src/parser.y" /* yacc.c:1646  */
+  case 88:
+#line 685 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3106 "src/parser.c" /* yacc.c:1646  */
+#line 3126 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 88:
-#line 685 "src/parser.y" /* yacc.c:1646  */
+  case 89:
+#line 688 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
 }
-#line 3114 "src/parser.c" /* yacc.c:1646  */
+#line 3134 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 89:
-#line 688 "src/parser.y" /* yacc.c:1646  */
+  case 90:
+#line 691 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
 }
-#line 3122 "src/parser.c" /* yacc.c:1646  */
+#line 3142 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 90:
-#line 691 "src/parser.y" /* yacc.c:1646  */
+  case 91:
+#line 694 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3130 "src/parser.c" /* yacc.c:1646  */
+#line 3150 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 91:
-#line 694 "src/parser.y" /* yacc.c:1646  */
+  case 92:
+#line 697 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
 }
-#line 3138 "src/parser.c" /* yacc.c:1646  */
+#line 3158 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 92:
-#line 697 "src/parser.y" /* yacc.c:1646  */
+  case 93:
+#line 700 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3146 "src/parser.c" /* yacc.c:1646  */
+#line 3166 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 93:
-#line 700 "src/parser.y" /* yacc.c:1646  */
+  case 94:
+#line 703 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
 }
-#line 3154 "src/parser.c" /* yacc.c:1646  */
+#line 3174 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 94:
-#line 703 "src/parser.y" /* yacc.c:1646  */
+  case 95:
+#line 706 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
 }
-#line 3162 "src/parser.c" /* yacc.c:1646  */
+#line 3182 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 95:
-#line 706 "src/parser.y" /* yacc.c:1646  */
+  case 96:
+#line 709 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
 }
-#line 3170 "src/parser.c" /* yacc.c:1646  */
+#line 3190 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 96:
-#line 709 "src/parser.y" /* yacc.c:1646  */
+  case 97:
+#line 712 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_const((yyvsp[0].literal));
 }
-#line 3178 "src/parser.c" /* yacc.c:1646  */
+#line 3198 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 97:
-#line 712 "src/parser.y" /* yacc.c:1646  */
+  case 98:
+#line 715 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3186 "src/parser.c" /* yacc.c:1646  */
+#line 3206 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 98:
-#line 715 "src/parser.y" /* yacc.c:1646  */
+  case 99:
+#line 718 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
 }
-#line 3194 "src/parser.c" /* yacc.c:1646  */
+#line 3214 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 99:
-#line 718 "src/parser.y" /* yacc.c:1646  */
+  case 100:
+#line 721 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 3202 "src/parser.c" /* yacc.c:1646  */
+#line 3222 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 100:
-#line 721 "src/parser.y" /* yacc.c:1646  */
+  case 101:
+#line 724 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_collect((yyvsp[-1].blk));
 }
-#line 3210 "src/parser.c" /* yacc.c:1646  */
+#line 3230 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 101:
-#line 724 "src/parser.y" /* yacc.c:1646  */
+  case 102:
+#line 727 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_const(jv_array());
 }
-#line 3218 "src/parser.c" /* yacc.c:1646  */
+#line 3238 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 102:
-#line 727 "src/parser.y" /* yacc.c:1646  */
+  case 103:
+#line 730 "src/parser.y" /* yacc.c:1648  */
     {
   block o = gen_const_object((yyvsp[-1].blk));
   if (o.first != NULL)
@@ -3226,29 +3246,29 @@ yyreduce:
   else
     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3230 "src/parser.c" /* yacc.c:1646  */
+#line 3250 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 103:
-#line 734 "src/parser.y" /* yacc.c:1646  */
+  case 104:
+#line 737 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
                            jv_string("line"), jv_number(locfile_get_line(locations, (yyloc).start) + 1)));
 }
-#line 3239 "src/parser.c" /* yacc.c:1646  */
+#line 3259 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 104:
-#line 738 "src/parser.y" /* yacc.c:1646  */
+  case 105:
+#line 741 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
   jv_free((yyvsp[0].literal));
 }
-#line 3248 "src/parser.c" /* yacc.c:1646  */
+#line 3268 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 105:
-#line 742 "src/parser.y" /* yacc.c:1646  */
+  case 106:
+#line 745 "src/parser.y" /* yacc.c:1648  */
     {
   const char *s = jv_string_value((yyvsp[0].literal));
   if (strcmp(s, "false") == 0)
@@ -3261,198 +3281,198 @@ yyreduce:
     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
   jv_free((yyvsp[0].literal));
 }
-#line 3265 "src/parser.c" /* yacc.c:1646  */
+#line 3285 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 106:
-#line 754 "src/parser.y" /* yacc.c:1646  */
+  case 107:
+#line 757 "src/parser.y" /* yacc.c:1648  */
     {
   (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 3275 "src/parser.c" /* yacc.c:1646  */
+#line 3295 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 107:
-#line 759 "src/parser.y" /* yacc.c:1646  */
+  case 108:
+#line 762 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = gen_noop(); }
-#line 3281 "src/parser.c" /* yacc.c:1646  */
+#line 3301 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 108:
-#line 760 "src/parser.y" /* yacc.c:1646  */
+  case 109:
+#line 763 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = gen_noop(); }
-#line 3287 "src/parser.c" /* yacc.c:1646  */
+#line 3307 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 109:
-#line 761 "src/parser.y" /* yacc.c:1646  */
+  case 110:
+#line 764 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = (yyvsp[-3].blk); }
-#line 3293 "src/parser.c" /* yacc.c:1646  */
+#line 3313 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 110:
-#line 762 "src/parser.y" /* yacc.c:1646  */
+  case 111:
+#line 765 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = gen_noop(); }
-#line 3299 "src/parser.c" /* yacc.c:1646  */
+#line 3319 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 111:
-#line 765 "src/parser.y" /* yacc.c:1646  */
+  case 112:
+#line 768 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3307 "src/parser.c" /* yacc.c:1646  */
+#line 3327 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 112:
-#line 768 "src/parser.y" /* yacc.c:1646  */
+  case 113:
+#line 771 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3315 "src/parser.c" /* yacc.c:1646  */
+#line 3335 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 113:
-#line 773 "src/parser.y" /* yacc.c:1646  */
+  case 114:
+#line 776 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_lambda((yyvsp[0].blk));
 }
-#line 3323 "src/parser.c" /* yacc.c:1646  */
+#line 3343 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 114:
-#line 778 "src/parser.y" /* yacc.c:1646  */
+  case 115:
+#line 781 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk)));
 }
-#line 3331 "src/parser.c" /* yacc.c:1646  */
+#line 3351 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 115:
-#line 781 "src/parser.y" /* yacc.c:1646  */
+  case 116:
+#line 784 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_destructure_alt((yyvsp[0].blk));
 }
-#line 3339 "src/parser.c" /* yacc.c:1646  */
+#line 3359 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 116:
-#line 786 "src/parser.y" /* yacc.c:1646  */
+  case 117:
+#line 789 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3347 "src/parser.c" /* yacc.c:1646  */
+#line 3367 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 117:
-#line 789 "src/parser.y" /* yacc.c:1646  */
+  case 118:
+#line 792 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3355 "src/parser.c" /* yacc.c:1646  */
+#line 3375 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 118:
-#line 794 "src/parser.y" /* yacc.c:1646  */
+  case 119:
+#line 797 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 3364 "src/parser.c" /* yacc.c:1646  */
+#line 3384 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 119:
-#line 798 "src/parser.y" /* yacc.c:1646  */
+  case 120:
+#line 801 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3372 "src/parser.c" /* yacc.c:1646  */
+#line 3392 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 120:
-#line 801 "src/parser.y" /* yacc.c:1646  */
+  case 121:
+#line 804 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3380 "src/parser.c" /* yacc.c:1646  */
+#line 3400 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 121:
-#line 806 "src/parser.y" /* yacc.c:1646  */
+  case 122:
+#line 809 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk));
 }
-#line 3388 "src/parser.c" /* yacc.c:1646  */
+#line 3408 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 122:
-#line 809 "src/parser.y" /* yacc.c:1646  */
+  case 123:
+#line 812 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3396 "src/parser.c" /* yacc.c:1646  */
+#line 3416 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 123:
-#line 814 "src/parser.y" /* yacc.c:1646  */
+  case 124:
+#line 817 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3404 "src/parser.c" /* yacc.c:1646  */
+#line 3424 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 124:
-#line 817 "src/parser.y" /* yacc.c:1646  */
+  case 125:
+#line 820 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3412 "src/parser.c" /* yacc.c:1646  */
+#line 3432 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 125:
-#line 822 "src/parser.y" /* yacc.c:1646  */
+  case 126:
+#line 825 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))));
 }
-#line 3420 "src/parser.c" /* yacc.c:1646  */
+#line 3440 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 126:
-#line 825 "src/parser.y" /* yacc.c:1646  */
+  case 127:
+#line 828 "src/parser.y" /* yacc.c:1648  */
     {
   (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 3428 "src/parser.c" /* yacc.c:1646  */
+#line 3448 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 127:
-#line 828 "src/parser.y" /* yacc.c:1646  */
+  case 128:
+#line 831 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3436 "src/parser.c" /* yacc.c:1646  */
+#line 3456 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 128:
-#line 831 "src/parser.y" /* yacc.c:1646  */
+  case 129:
+#line 834 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3444 "src/parser.c" /* yacc.c:1646  */
+#line 3464 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 129:
-#line 834 "src/parser.y" /* yacc.c:1646  */
+  case 130:
+#line 837 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3452 "src/parser.c" /* yacc.c:1646  */
+#line 3472 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 130:
-#line 837 "src/parser.y" /* yacc.c:1646  */
+  case 131:
+#line 840 "src/parser.y" /* yacc.c:1648  */
     {
   jv msg = check_object_key((yyvsp[-3].blk));
   if (jv_is_valid(msg)) {
@@ -3461,258 +3481,258 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk));
 }
-#line 3465 "src/parser.c" /* yacc.c:1646  */
+#line 3485 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 131:
-#line 845 "src/parser.y" /* yacc.c:1646  */
+  case 132:
+#line 848 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3474 "src/parser.c" /* yacc.c:1646  */
+#line 3494 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 132:
-#line 851 "src/parser.y" /* yacc.c:1646  */
+  case 133:
+#line 854 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("as");
 }
-#line 3482 "src/parser.c" /* yacc.c:1646  */
+#line 3502 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 133:
-#line 854 "src/parser.y" /* yacc.c:1646  */
+  case 134:
+#line 857 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("def");
 }
-#line 3490 "src/parser.c" /* yacc.c:1646  */
+#line 3510 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 134:
-#line 857 "src/parser.y" /* yacc.c:1646  */
+  case 135:
+#line 860 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("module");
 }
-#line 3498 "src/parser.c" /* yacc.c:1646  */
+#line 3518 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 135:
-#line 860 "src/parser.y" /* yacc.c:1646  */
+  case 136:
+#line 863 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("import");
 }
-#line 3506 "src/parser.c" /* yacc.c:1646  */
+#line 3526 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 136:
-#line 863 "src/parser.y" /* yacc.c:1646  */
+  case 137:
+#line 866 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("include");
 }
-#line 3514 "src/parser.c" /* yacc.c:1646  */
+#line 3534 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 137:
-#line 866 "src/parser.y" /* yacc.c:1646  */
+  case 138:
+#line 869 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("if");
 }
-#line 3522 "src/parser.c" /* yacc.c:1646  */
+#line 3542 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 138:
-#line 869 "src/parser.y" /* yacc.c:1646  */
+  case 139:
+#line 872 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("then");
 }
-#line 3530 "src/parser.c" /* yacc.c:1646  */
+#line 3550 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 139:
-#line 872 "src/parser.y" /* yacc.c:1646  */
+  case 140:
+#line 875 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("else");
 }
-#line 3538 "src/parser.c" /* yacc.c:1646  */
+#line 3558 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 140:
-#line 875 "src/parser.y" /* yacc.c:1646  */
+  case 141:
+#line 878 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("elif");
 }
-#line 3546 "src/parser.c" /* yacc.c:1646  */
+#line 3566 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 141:
-#line 878 "src/parser.y" /* yacc.c:1646  */
+  case 142:
+#line 881 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("reduce");
 }
-#line 3554 "src/parser.c" /* yacc.c:1646  */
+#line 3574 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 142:
-#line 881 "src/parser.y" /* yacc.c:1646  */
+  case 143:
+#line 884 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("foreach");
 }
-#line 3562 "src/parser.c" /* yacc.c:1646  */
+#line 3582 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 143:
-#line 884 "src/parser.y" /* yacc.c:1646  */
+  case 144:
+#line 887 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("end");
 }
-#line 3570 "src/parser.c" /* yacc.c:1646  */
+#line 3590 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 144:
-#line 887 "src/parser.y" /* yacc.c:1646  */
+  case 145:
+#line 890 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("and");
 }
-#line 3578 "src/parser.c" /* yacc.c:1646  */
+#line 3598 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 145:
-#line 890 "src/parser.y" /* yacc.c:1646  */
+  case 146:
+#line 893 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("or");
 }
-#line 3586 "src/parser.c" /* yacc.c:1646  */
+#line 3606 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 146:
-#line 893 "src/parser.y" /* yacc.c:1646  */
+  case 147:
+#line 896 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("try");
 }
-#line 3594 "src/parser.c" /* yacc.c:1646  */
+#line 3614 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 147:
-#line 896 "src/parser.y" /* yacc.c:1646  */
+  case 148:
+#line 899 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("catch");
 }
-#line 3602 "src/parser.c" /* yacc.c:1646  */
+#line 3622 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 148:
-#line 899 "src/parser.y" /* yacc.c:1646  */
+  case 149:
+#line 902 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("label");
 }
-#line 3610 "src/parser.c" /* yacc.c:1646  */
+#line 3630 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 149:
-#line 902 "src/parser.y" /* yacc.c:1646  */
+  case 150:
+#line 905 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("break");
 }
-#line 3618 "src/parser.c" /* yacc.c:1646  */
+#line 3638 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 150:
-#line 905 "src/parser.y" /* yacc.c:1646  */
+  case 151:
+#line 908 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.literal) = jv_string("__loc__");
 }
-#line 3626 "src/parser.c" /* yacc.c:1646  */
+#line 3646 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 151:
-#line 910 "src/parser.y" /* yacc.c:1646  */
+  case 152:
+#line 913 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk)=gen_noop();
 }
-#line 3634 "src/parser.c" /* yacc.c:1646  */
+#line 3654 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 152:
-#line 913 "src/parser.y" /* yacc.c:1646  */
+  case 153:
+#line 916 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3640 "src/parser.c" /* yacc.c:1646  */
+#line 3660 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 153:
-#line 914 "src/parser.y" /* yacc.c:1646  */
+  case 154:
+#line 917 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
-#line 3646 "src/parser.c" /* yacc.c:1646  */
+#line 3666 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 154:
-#line 915 "src/parser.y" /* yacc.c:1646  */
+  case 155:
+#line 918 "src/parser.y" /* yacc.c:1648  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3652 "src/parser.c" /* yacc.c:1646  */
+#line 3672 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 155:
-#line 918 "src/parser.y" /* yacc.c:1646  */
+  case 156:
+#line 921 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
  }
-#line 3660 "src/parser.c" /* yacc.c:1646  */
+#line 3680 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 156:
-#line 921 "src/parser.y" /* yacc.c:1646  */
+  case 157:
+#line 924 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
   }
-#line 3668 "src/parser.c" /* yacc.c:1646  */
+#line 3688 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 157:
-#line 924 "src/parser.y" /* yacc.c:1646  */
+  case 158:
+#line 927 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
   }
-#line 3676 "src/parser.c" /* yacc.c:1646  */
+#line 3696 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 158:
-#line 927 "src/parser.y" /* yacc.c:1646  */
+  case 159:
+#line 930 "src/parser.y" /* yacc.c:1648  */
     {
   (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 3685 "src/parser.c" /* yacc.c:1646  */
+#line 3705 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 159:
-#line 931 "src/parser.y" /* yacc.c:1646  */
+  case 160:
+#line 934 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))),
                     (yyvsp[0].blk));
   }
-#line 3694 "src/parser.c" /* yacc.c:1646  */
+#line 3714 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 160:
-#line 935 "src/parser.y" /* yacc.c:1646  */
+  case 161:
+#line 938 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
                     gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
   }
-#line 3703 "src/parser.c" /* yacc.c:1646  */
+#line 3723 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 161:
-#line 939 "src/parser.y" /* yacc.c:1646  */
+  case 162:
+#line 942 "src/parser.y" /* yacc.c:1648  */
     {
   (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
                     gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
   }
-#line 3712 "src/parser.c" /* yacc.c:1646  */
+#line 3732 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 162:
-#line 943 "src/parser.y" /* yacc.c:1646  */
+  case 163:
+#line 946 "src/parser.y" /* yacc.c:1648  */
     {
   jv msg = check_object_key((yyvsp[-3].blk));
   if (jv_is_valid(msg)) {
@@ -3721,20 +3741,20 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
   }
-#line 3725 "src/parser.c" /* yacc.c:1646  */
+#line 3745 "src/parser.c" /* yacc.c:1648  */
     break;
 
-  case 163:
-#line 951 "src/parser.y" /* yacc.c:1646  */
+  case 164:
+#line 954 "src/parser.y" /* yacc.c:1648  */
     {
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
   }
-#line 3734 "src/parser.c" /* yacc.c:1646  */
+#line 3754 "src/parser.c" /* yacc.c:1648  */
     break;
 
 
-#line 3738 "src/parser.c" /* yacc.c:1646  */
+#line 3758 "src/parser.c" /* yacc.c:1648  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3857,7 +3877,6 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -3969,7 +3988,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 955 "src/parser.y" /* yacc.c:1906  */
+#line 958 "src/parser.y" /* yacc.c:1907  */
 
 
 int jq_parse(struct locfile* locations, block* answer) {
index b15c53aad45d16b194919ab369dc9c4060b6bb6b..e83a000a963c5b3a4587bbf9df9f49be509eb060 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.0.5.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
 extern int yydebug;
 #endif
 /* "%code requires" blocks.  */
-#line 11 "src/parser.y" /* yacc.c:1909  */
+#line 11 "src/parser.y" /* yacc.c:1910  */
 
 #include "locfile.h"
 struct lexer_param;
@@ -57,7 +57,7 @@ struct lexer_param;
     }                                           \
   } while (0)
 
-#line 61 "src/parser.h" /* yacc.c:1909  */
+#line 61 "src/parser.h" /* yacc.c:1910  */
 
 /* Token type.  */
 #ifndef YYTOKENTYPE
@@ -163,12 +163,12 @@ struct lexer_param;
 
 union YYSTYPE
 {
-#line 31 "src/parser.y" /* yacc.c:1909  */
+#line 31 "src/parser.y" /* yacc.c:1910  */
 
   jv literal;
   block blk;
 
-#line 172 "src/parser.h" /* yacc.c:1909  */
+#line 172 "src/parser.h" /* yacc.c:1910  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 946a9582064c722a90bfe813761cd6f16402c8de..62558502f0dc4569aeaa3396d9688d5ad599150e 100644 (file)
@@ -357,6 +357,9 @@ Term "as" Patterns '|' Exp {
 "if" Exp "then" Exp ElseBody {
   $$ = gen_cond($2, $4, $5);
 } |
+"if" Exp "then" Exp "end" {
+  $$ = gen_cond($2, $4, gen_noop());
+} |
 "if" Exp "then" error {
   FAIL(@$, "Possibly unterminated 'if' statement");
   $$ = $2;
index cbdc0bf017b198e9839125c5dec8ef5c2b15f4b1..c027f5382a99cdf12318c68d97b32ddeebf4041d 100644 (file)
@@ -1036,6 +1036,19 @@ null
 null
 [5,6]
 
+[if true then 3 end]
+7
+[3]
+
+[if false then 3 end]
+7
+[7]
+
+[if false then 3 else . end]
+7
+[7]
+
+
 [.[] | [.foo[] // .bar]]
 [{"foo":[1,2], "bar": 42}, {"foo":[1], "bar": null}, {"foo":[null,false,3], "bar": 18}, {"foo":[], "bar":42}, {"foo": [null,false,null], "bar": 41}]
 [[1,2], [1], [3], [42], [41]]