]> granicus.if.org Git - jq/commitdiff
Allow variable refs as object keys {$key:value}
authorNicolas Williams <nico@cryptonector.com>
Tue, 11 Dec 2018 03:54:59 +0000 (21:54 -0600)
committerNicolas Williams <nico@cryptonector.com>
Tue, 11 Dec 2018 03:54:59 +0000 (21:54 -0600)
Users are often surprised by the requirement to parenthesize any
non-trivial object key expressions in object constructors.  E.g.,
{"a"+"b":1}.  This commit adds one more kind of key expression besides
literals and idents: variable references.

A common use case for this is jq programs as JSON templates to fill in
with variables computed from inputs or passed in on the command-line.
E.g., {some_key:$value}.  Now users can also use, e.g., {$key:$value}.

This and the restrictions on key and value expressions in object
constructors are now clarified a bit in the documentation.

docs/content/3.manual/manual.yml
src/parser.c
src/parser.y

index bfb17f48f42c9b18f34f56713519a0c8ba0e488f..e6d4e57a1f1e18f85e2c8112cee647fea0b45480 100644 (file)
@@ -549,13 +549,16 @@ sections:
           dictionaries or hashes), as in: `{"a": 42, "b": 17}`.
 
           If the keys are "identifier-like", then the quotes can be left
-          off, as in `{a:42, b:17}`.  Keys generated by expressions need
-          to be parenthesized, e.g., `{("a"+"b"):59}`.
+          off, as in `{a:42, b:17}`.  Variable references as key
+          expressions use the value of the variable as the key.  Key
+          expressions other than constant literals, identifiers, or
+          variable references, need to be parenthesized, e.g.,
+          `{("a"+"b"):59}`.
 
-          The value can be any expression (although you may need to
-          wrap it in parentheses if it's a complicated one), which gets
-          applied to the {} expression's input (remember, all filters
-          have an input and an output).
+          The value can be any expression (although you may need to wrap
+          it in parentheses if, for example, it contains colons), which
+          gets applied to the {} expression's input (remember, all
+          filters have an input and an output).
 
               {foo: .bar}
 
@@ -593,6 +596,16 @@ sections:
 
               {"stedolan": ["JQ Primer", "More JQ"]}
 
+          Variable references as keys use the value of the variable as
+          the key.  Without a value then the variable's name becomes the
+          key and its value becomes the value,
+
+              "f o o" as $foo | "b a r" as $bar | {$foo, $bar:$foo}
+
+          produces
+
+              {"f o o":"f o o","b a r":"f o o"}
+
         examples:
           - program: '{user, title: .titles[]}'
             input: '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}'
index 309735039eb69fd45afa8209a4e8451d3f495945..3b8cc7aef25d8ae127c1fcf11ef2d0ac8f630cfd 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   1972
+#define YYLAST   1964
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  69
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  30
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  162
+#define YYNRULES  163
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  313
+#define YYNSTATES  315
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -754,7 +754,7 @@ static const yytype_uint16 yyrline[] =
      837,   845,   851,   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,   947
+     935,   939,   943,   951
 };
 #endif
 
@@ -797,10 +797,10 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -158
+#define YYPACT_NINF -160
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-158)))
+  (!!((Yystate) == (-160)))
 
 #define YYTABLE_NINF -152
 
@@ -811,38 +811,38 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      21,   772,    43,    63,    -6,    12,  -158,    80,  -158,   122,
-     772,   193,   193,   772,    74,     5,  -158,   772,   522,    10,
-     279,   455,   152,  1290,   772,  -158,     8,  -158,     3,     3,
-     772,    63,   680,   772,  -158,  -158,    67,  1646,    58,   130,
-     106,   133,  -158,   135,  -158,    20,    83,  1120,  -158,  -158,
-    -158,   140,    80,    93,    86,  -158,   917,   -23,    91,  -158,
-    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
-    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,   772,   151,
-      94,    97,    95,   113,   772,   772,   772,   772,   772,   772,
-     772,   772,   772,   772,   772,   772,   772,   772,   772,   772,
-     772,   772,   772,   772,   772,   772,   772,   772,  -158,  -158,
-    1814,   104,    -7,     3,   388,   171,  -158,  -158,  -158,  1814,
-     772,  -158,  -158,  1341,  1814,    59,  -158,  -158,     7,   772,
-     587,    -7,    -7,   652,   117,  -158,     4,  -158,  -158,  -158,
-    -158,  -158,  -158,   345,    -3,  -158,    -3,  1154,  -158,    -3,
-      -3,  -158,   345,  1882,   370,   370,  1848,   436,  1914,  1882,
-    1882,  1882,  1882,  1882,  1882,   370,   370,  1814,  1848,  1882,
-     370,   370,    20,    20,   129,   129,   129,  -158,   184,    -7,
-     834,   149,   143,   156,   134,   136,   772,   145,   867,    47,
-    -158,  -158,   772,  -158,    23,  -158,   200,    72,  -158,  1392,
-    -158,  1596,   146,   150,  -158,  -158,   772,  -158,   772,  -158,
-     -11,  -158,    -3,   162,    51,   162,   148,   162,   162,  -158,
-    -158,  -158,   -24,   153,   154,   772,   209,   155,   -15,  -158,
-     158,    -7,   772,  -158,  -158,   967,  -158,   744,   157,  -158,
-     215,  -158,  -158,  -158,     7,   159,  -158,   772,   772,  -158,
-     772,   772,  1814,  1680,  -158,    -3,    -3,    -7,  -158,    -7,
-      -7,  1188,   163,    -7,   834,  -158,    -7,   185,  1814,   169,
-     170,  1017,  -158,  -158,  -158,   772,  1730,  1780,  1443,  1494,
-    -158,   162,   162,  -158,  -158,  -158,   166,    -7,  -158,  -158,
-    -158,  -158,  -158,   172,  1545,  -158,   772,   772,   772,    -7,
-    -158,  -158,  -158,  1596,  1222,  1067,  -158,  -158,  -158,   772,
-    -158,  1256,  -158
+      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
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -855,7 +855,7 @@ static const yytype_uint8 yydefact[] =
        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,   160,   132,
+      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,
@@ -864,40 +864,40 @@ static const yytype_uint8 yydefact[] =
       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,   159,     0,
+      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,   162,    71,   155,     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,     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,   161,   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,   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
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -158,  -158,  -158,   201,   115,    -1,  -158,  -158,   204,    -8,
-    -158,    -5,     6,  -158,  -158,   110,   -65,  -131,    -4,  -158,
-      48,  -158,    16,  -149,  -158,  -158,   -22,  -157,  -104,  -158
+    -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
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     2,     3,    30,   118,   110,    31,    32,   115,    24,
-     197,   198,    25,    44,   127,   136,   249,   213,    26,   125,
-     126,   181,   182,   183,   222,   228,   229,    81,    82,    83
+     197,   198,    25,    44,   127,   136,   250,   213,    26,   125,
+     126,   181,   182,   183,   223,   229,   230,    81,    82,    83
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -905,323 +905,328 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      23,     4,     5,     6,     7,     8,    42,    38,    39,    37,
-      52,   195,    40,   111,    48,   215,    45,    47,   217,   218,
-      56,   112,   120,   230,   257,   143,    53,    15,    80,   119,
-     221,   123,   124,   264,   116,   116,     1,   143,    16,   211,
-     144,    49,   258,    27,    16,   145,   207,   208,   219,   209,
-     212,   239,   144,   265,    33,   178,   111,    18,   179,    19,
-     180,    20,    21,   111,    22,   207,   208,    43,   242,   196,
-      34,   131,   113,   114,   105,   106,   107,   147,   108,    28,
-      29,   254,   267,   153,   154,   155,   156,   157,   158,   159,
+      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,
      160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   230,   283,   240,
-     284,   285,   120,   188,   288,   113,   114,   290,   192,   184,
-     193,    35,   113,   114,   281,   282,    36,   128,   199,   201,
-     129,   244,   205,   245,   133,   111,    41,   134,   300,   135,
-     214,   139,   214,   132,   137,   214,   214,   202,   203,    80,
-     306,   140,   141,    57,   146,   148,    58,   149,    80,    52,
-     150,   152,   177,   151,   206,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,   189,   235,   227,   108,   220,   231,
-     232,   124,   233,    16,   113,   114,  -115,     4,     5,     6,
-       7,     8,   234,   236,   243,   252,   250,   253,   214,   255,
-     251,   256,    78,   262,    79,   272,   259,   260,   263,   273,
-    -151,   266,   275,    15,   261,  -114,   287,   291,   292,   299,
-     301,   268,   121,   117,    16,   190,   271,   194,   307,   274,
-     241,     0,   289,     0,     0,     0,   276,   277,     0,   278,
-     279,   214,   214,    18,     0,    19,     0,    20,    21,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     227,     0,     0,     0,   294,     0,     0,     0,     0,   -72,
-      50,     0,     0,    51,   -72,     0,    52,     0,   -72,   -72,
-     -72,   -72,   -72,     0,     0,   303,   304,   305,   -72,   -72,
-     -72,     0,     0,   -72,   -72,   -72,     0,   -72,   311,     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,   210,   -72,     0,    58,
-       0,     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,
-    -152,  -152,     0,     0,     0,     0,    16,     0,     0,   185,
-       0,     0,     4,     5,     6,     7,     8,     0,     0,     0,
-       0,     0,     9,     0,     0,    78,    10,    79,  -152,  -152,
-      11,    12,     0,  -151,     0,    13,     0,    14,    15,     0,
-    -152,  -152,   103,   104,   105,   106,   107,     0,   108,    16,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    17,     0,     0,     0,     0,    85,    86,    18,     0,
-      19,   186,    20,    21,   187,    22,    54,     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,    55,    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,
+     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,
+      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,     0,     0,     0,    10,     0,     0,     0,    11,
-      12,     0,     0,     0,    13,     0,    14,    15,     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,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    18,     0,    19,     0,    20,    21,     0,    22,
       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,
+     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,
-     270,    22,     0,    16,     0,     0,     0,     0,     0,     0,
+       0,    22,     0,    16,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    17,     0,     0,     0,     0,
-       0,     0,    18,     0,    19,   223,    20,    21,   224,    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,   225,     0,   226,     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,
-     237,     0,     0,   238,     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,   269,     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,   293,     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,   309,     0,   310,    84,
-      85,    86,    87,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    88,    89,     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,    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,
+      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,   216,     0,     0,     0,     0,
+     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,   286,
-       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,   308,     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,   312,     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,     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,
-     191,    84,    85,    86,    87,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    88,    89,     0,
+     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,   246,    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,   297,    84,    85,    86,    87,     0,     0,     0,
+       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,   298,    84,    85,    86,    87,     0,     0,
+     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,     0,
        0,     0,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,     0,   108,   302,    84,    85,    86,    87,     0,
-       0,     0,     0,     0,     0,     0,   247,   248,     0,     0,
+     106,   107,     0,   108,   299,    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,
+     105,   106,   107,     0,   108,   300,    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,   304,    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,   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,     0,   280,     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,   295,    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,   296,
-       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,
+       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,    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
+      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
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,     4,     5,     6,     7,     8,     1,    11,    12,    10,
-       7,     4,    13,     5,     4,   146,    17,    18,   149,   150,
-      21,    13,    30,   180,    48,    48,    20,    30,    22,    30,
-     179,    32,    33,    48,    28,    29,    15,    48,    41,   143,
-      63,    31,    66,     0,    41,    68,    42,    43,   152,    45,
-      53,     4,    63,    68,    60,    62,     5,    60,    65,    62,
-      67,    64,    65,     5,    67,    42,    43,    62,    45,    62,
-      58,    13,    64,    65,    54,    55,    56,    78,    58,    16,
-      17,   212,   231,    84,    85,    86,    87,    88,    89,    90,
+       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,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   264,   257,    62,
-     259,   260,   120,   114,   263,    64,    65,   266,    59,   113,
-      61,    41,    64,    65,   255,   256,     4,    60,   129,   130,
-      63,    59,   133,    61,    28,     5,    62,     4,   287,     4,
-     144,     1,   146,    13,    61,   149,   150,   131,   132,   143,
-     299,    58,    66,     1,    63,     4,     4,    63,   152,     7,
-      63,    48,    58,    68,    47,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    13,   186,   180,    58,     4,    40,
-      47,   192,    58,    41,    64,    65,    40,     4,     5,     6,
-       7,     8,    66,    58,     4,   206,    60,   208,   212,    47,
-      60,    63,    60,     4,    62,    58,    63,    63,    63,     4,
-      68,    63,    63,    30,   225,    40,    63,    58,    58,    63,
-      58,   232,    31,    29,    41,   120,   237,   127,   303,   244,
-     192,    -1,   264,    -1,    -1,    -1,   247,   248,    -1,   250,
-     251,   255,   256,    60,    -1,    62,    -1,    64,    65,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     264,    -1,    -1,    -1,   275,    -1,    -1,    -1,    -1,     0,
-       1,    -1,    -1,     4,     5,    -1,     7,    -1,     9,    10,
-      11,    12,    13,    -1,    -1,   296,   297,   298,    19,    20,
-      21,    -1,    -1,    24,    25,    26,    -1,    28,   309,    -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,
-      -1,    -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,
-      10,    11,    -1,    -1,    -1,    -1,    41,    -1,    -1,     1,
-      -1,    -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,
-      -1,    -1,    14,    -1,    -1,    60,    18,    62,    38,    39,
-      22,    23,    -1,    68,    -1,    27,    -1,    29,    30,    -1,
-      50,    51,    52,    53,    54,    55,    56,    -1,    58,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    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,    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,
+     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,
+      -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,
+      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,    -1,    -1,    -1,    18,    -1,    -1,    -1,    22,
-      23,    -1,    -1,    -1,    27,    -1,    29,    30,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    -1,    62,    -1,    64,    65,    -1,    67,
       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,
+      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,
-      66,    67,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    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,    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,    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,
@@ -1233,23 +1238,6 @@ static const yytype_int16 yycheck[] =
       -1,     9,    10,    11,    12,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    -1,    58,    25,    26,    61,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,     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,    -1,    25,    26,    -1,    -1,
-      -1,    -1,    -1,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    -1,    58,
-      59,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    -1,
-      -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
       38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
       58,    59,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
@@ -1268,43 +1256,53 @@ static const yytype_int16 yycheck[] =
       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    -1,    58,    59,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    -1,    -1,
+      -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,
+      54,    55,    56,    -1,    58,    59,     9,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    58,    59,     9,    10,    11,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
+      -1,    -1,    -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,    -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,
+      -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,    -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
+      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
@@ -1332,17 +1330,17 @@ static const yytype_uint8 yystos[] =
       67,    90,    91,    92,    81,     1,    63,    66,    74,    13,
       73,    59,    59,    61,    84,     4,    62,    79,    80,    74,
        1,    74,    91,    91,     1,    74,    47,    42,    43,    45,
-       1,    97,    53,    86,    87,    86,    61,    86,    86,    97,
-       4,    92,    93,     1,     4,    60,    62,    81,    94,    95,
-      96,    40,    47,    58,    66,    74,    58,    63,    66,     4,
-      62,    89,    45,     4,    59,    61,    59,    20,    21,    85,
-      60,    60,    74,    74,    86,    47,    63,    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
+       1,    97,    53,    86,    87,    86,    61,    63,    86,    86,
+      97,     4,    92,    93,     1,     4,    60,    62,    81,    94,
+      95,    96,    40,    47,    58,    66,    74,    58,    63,    66,
+       4,    62,    89,    45,     4,    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
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1364,7 +1362,7 @@ static const yytype_uint8 yyr1[] =
       95,    95,    96,    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,    98,    98,    98
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1385,8 +1383,8 @@ static const yytype_uint8 yyr2[] =
        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,
-       1,     0,     1,     3,     3,     3,     3,     3,     1,     2,
-       1,     5,     3
+       1,     0,     1,     3,     3,     3,     3,     3,     1,     4,
+       2,     1,     5,     3
 };
 
 
@@ -1889,187 +1887,187 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
           case 4: /* IDENT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1893 "src/parser.c" /* yacc.c:1257  */
+#line 1891 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 5: /* FIELD  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1899 "src/parser.c" /* yacc.c:1257  */
+#line 1897 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 6: /* LITERAL  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1905 "src/parser.c" /* yacc.c:1257  */
+#line 1903 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 7: /* FORMAT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1911 "src/parser.c" /* yacc.c:1257  */
+#line 1909 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 42: /* QQSTRING_TEXT  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1917 "src/parser.c" /* yacc.c:1257  */
+#line 1915 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 71: /* Module  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1923 "src/parser.c" /* yacc.c:1257  */
+#line 1921 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 72: /* Imports  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1929 "src/parser.c" /* yacc.c:1257  */
+#line 1927 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 73: /* FuncDefs  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1935 "src/parser.c" /* yacc.c:1257  */
+#line 1933 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 74: /* Exp  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1941 "src/parser.c" /* yacc.c:1257  */
+#line 1939 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 75: /* Import  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1947 "src/parser.c" /* yacc.c:1257  */
+#line 1945 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 76: /* ImportWhat  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1953 "src/parser.c" /* yacc.c:1257  */
+#line 1951 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 77: /* ImportFrom  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1959 "src/parser.c" /* yacc.c:1257  */
+#line 1957 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 78: /* FuncDef  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1965 "src/parser.c" /* yacc.c:1257  */
+#line 1963 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 79: /* Params  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1971 "src/parser.c" /* yacc.c:1257  */
+#line 1969 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 80: /* Param  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1977 "src/parser.c" /* yacc.c:1257  */
+#line 1975 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 81: /* String  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1983 "src/parser.c" /* yacc.c:1257  */
+#line 1981 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 84: /* QQString  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1989 "src/parser.c" /* yacc.c:1257  */
+#line 1987 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 85: /* ElseBody  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1995 "src/parser.c" /* yacc.c:1257  */
+#line 1993 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 86: /* ExpD  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2001 "src/parser.c" /* yacc.c:1257  */
+#line 1999 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 87: /* Term  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2007 "src/parser.c" /* yacc.c:1257  */
+#line 2005 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 88: /* Args  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2013 "src/parser.c" /* yacc.c:1257  */
+#line 2011 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 89: /* Arg  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2019 "src/parser.c" /* yacc.c:1257  */
+#line 2017 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 90: /* RepPatterns  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2025 "src/parser.c" /* yacc.c:1257  */
+#line 2023 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 91: /* Patterns  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2031 "src/parser.c" /* yacc.c:1257  */
+#line 2029 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 92: /* Pattern  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2037 "src/parser.c" /* yacc.c:1257  */
+#line 2035 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 93: /* ArrayPats  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2043 "src/parser.c" /* yacc.c:1257  */
+#line 2041 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 94: /* ObjPats  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2049 "src/parser.c" /* yacc.c:1257  */
+#line 2047 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 95: /* ObjPat  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2055 "src/parser.c" /* yacc.c:1257  */
+#line 2053 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 96: /* Keyword  */
 #line 36 "src/parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 2061 "src/parser.c" /* yacc.c:1257  */
+#line 2059 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 97: /* MkDict  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2067 "src/parser.c" /* yacc.c:1257  */
+#line 2065 "src/parser.c" /* yacc.c:1257  */
         break;
 
     case 98: /* MkDictPair  */
 #line 37 "src/parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2073 "src/parser.c" /* yacc.c:1257  */
+#line 2071 "src/parser.c" /* yacc.c:1257  */
         break;
 
 
@@ -2365,7 +2363,7 @@ yyreduce:
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
 }
-#line 2369 "src/parser.c" /* yacc.c:1646  */
+#line 2367 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 3:
@@ -2373,7 +2371,7 @@ yyreduce:
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2377 "src/parser.c" /* yacc.c:1646  */
+#line 2375 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 4:
@@ -2381,7 +2379,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2385 "src/parser.c" /* yacc.c:1646  */
+#line 2383 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 5:
@@ -2395,7 +2393,7 @@ yyreduce:
     (yyval.blk) = gen_module((yyvsp[-1].blk));
   }
 }
-#line 2399 "src/parser.c" /* yacc.c:1646  */
+#line 2397 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 6:
@@ -2403,7 +2401,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2407 "src/parser.c" /* yacc.c:1646  */
+#line 2405 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 7:
@@ -2411,7 +2409,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2415 "src/parser.c" /* yacc.c:1646  */
+#line 2413 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -2419,7 +2417,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2423 "src/parser.c" /* yacc.c:1646  */
+#line 2421 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 9:
@@ -2427,7 +2425,7 @@ yyreduce:
     {
   (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2431 "src/parser.c" /* yacc.c:1646  */
+#line 2429 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 10:
@@ -2435,7 +2433,7 @@ yyreduce:
     {
   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2439 "src/parser.c" /* yacc.c:1646  */
+#line 2437 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 11:
@@ -2443,7 +2441,7 @@ yyreduce:
     {
   (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2447 "src/parser.c" /* yacc.c:1646  */
+#line 2445 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 12:
@@ -2451,7 +2449,7 @@ yyreduce:
     {
   (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2455 "src/parser.c" /* yacc.c:1646  */
+#line 2453 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
@@ -2459,7 +2457,7 @@ yyreduce:
     {
   (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2463 "src/parser.c" /* yacc.c:1646  */
+#line 2461 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
@@ -2467,7 +2465,7 @@ yyreduce:
     {
   (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
 }
-#line 2471 "src/parser.c" /* yacc.c:1646  */
+#line 2469 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 15:
@@ -2475,7 +2473,7 @@ yyreduce:
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2479 "src/parser.c" /* yacc.c:1646  */
+#line 2477 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 16:
@@ -2484,7 +2482,7 @@ yyreduce:
   FAIL((yyloc), "Possibly unterminated 'if' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2488 "src/parser.c" /* yacc.c:1646  */
+#line 2486 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 17:
@@ -2493,7 +2491,7 @@ yyreduce:
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4);
   (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk)));
 }
-#line 2497 "src/parser.c" /* yacc.c:1646  */
+#line 2495 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -2502,7 +2500,7 @@ yyreduce:
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK));
   (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
 }
-#line 2506 "src/parser.c" /* yacc.c:1646  */
+#line 2504 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -2511,7 +2509,7 @@ yyreduce:
   FAIL((yyloc), "Possibly unterminated 'try' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2515 "src/parser.c" /* yacc.c:1646  */
+#line 2513 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -2522,7 +2520,7 @@ yyreduce:
   jv_free((yyvsp[-2].literal));
   jv_free(v);
 }
-#line 2526 "src/parser.c" /* yacc.c:1646  */
+#line 2524 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -2530,7 +2528,7 @@ yyreduce:
     {
   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
 }
-#line 2534 "src/parser.c" /* yacc.c:1646  */
+#line 2532 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 22:
@@ -2538,7 +2536,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2542 "src/parser.c" /* yacc.c:1646  */
+#line 2540 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -2546,7 +2544,7 @@ yyreduce:
     {
   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2550 "src/parser.c" /* yacc.c:1646  */
+#line 2548 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -2554,7 +2552,7 @@ yyreduce:
     {
   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2558 "src/parser.c" /* yacc.c:1646  */
+#line 2556 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
@@ -2562,7 +2560,7 @@ yyreduce:
     {
   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2566 "src/parser.c" /* yacc.c:1646  */
+#line 2564 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 26:
@@ -2570,7 +2568,7 @@ yyreduce:
     {
   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2574 "src/parser.c" /* yacc.c:1646  */
+#line 2572 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
@@ -2578,7 +2576,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2582 "src/parser.c" /* yacc.c:1646  */
+#line 2580 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
@@ -2586,7 +2584,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2590 "src/parser.c" /* yacc.c:1646  */
+#line 2588 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
@@ -2594,7 +2592,7 @@ yyreduce:
     {
   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2598 "src/parser.c" /* yacc.c:1646  */
+#line 2596 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
@@ -2602,7 +2600,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2606 "src/parser.c" /* yacc.c:1646  */
+#line 2604 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
@@ -2610,7 +2608,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2614 "src/parser.c" /* yacc.c:1646  */
+#line 2612 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -2618,7 +2616,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2622 "src/parser.c" /* yacc.c:1646  */
+#line 2620 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 33:
@@ -2626,7 +2624,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2630 "src/parser.c" /* yacc.c:1646  */
+#line 2628 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
@@ -2634,7 +2632,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2638 "src/parser.c" /* yacc.c:1646  */
+#line 2636 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
@@ -2642,7 +2640,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2646 "src/parser.c" /* yacc.c:1646  */
+#line 2644 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
@@ -2650,7 +2648,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2654 "src/parser.c" /* yacc.c:1646  */
+#line 2652 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
@@ -2660,7 +2658,7 @@ yyreduce:
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Division by zero?");
 }
-#line 2664 "src/parser.c" /* yacc.c:1646  */
+#line 2662 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 38:
@@ -2670,7 +2668,7 @@ yyreduce:
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Remainder by zero?");
 }
-#line 2674 "src/parser.c" /* yacc.c:1646  */
+#line 2672 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 39:
@@ -2678,7 +2676,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2682 "src/parser.c" /* yacc.c:1646  */
+#line 2680 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 40:
@@ -2686,7 +2684,7 @@ yyreduce:
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2690 "src/parser.c" /* yacc.c:1646  */
+#line 2688 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 41:
@@ -2694,7 +2692,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
 }
-#line 2698 "src/parser.c" /* yacc.c:1646  */
+#line 2696 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 42:
@@ -2702,7 +2700,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
 }
-#line 2706 "src/parser.c" /* yacc.c:1646  */
+#line 2704 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 43:
@@ -2710,7 +2708,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
 }
-#line 2714 "src/parser.c" /* yacc.c:1646  */
+#line 2712 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 44:
@@ -2718,7 +2716,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
 }
-#line 2722 "src/parser.c" /* yacc.c:1646  */
+#line 2720 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
@@ -2726,7 +2724,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
 }
-#line 2730 "src/parser.c" /* yacc.c:1646  */
+#line 2728 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -2734,7 +2732,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
 }
-#line 2738 "src/parser.c" /* yacc.c:1646  */
+#line 2736 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -2742,7 +2740,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2746 "src/parser.c" /* yacc.c:1646  */
+#line 2744 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 48:
@@ -2750,7 +2748,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2754 "src/parser.c" /* yacc.c:1646  */
+#line 2752 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -2770,7 +2768,7 @@ yyreduce:
     (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
   }
 }
-#line 2774 "src/parser.c" /* yacc.c:1646  */
+#line 2772 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -2784,7 +2782,7 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2788 "src/parser.c" /* yacc.c:1646  */
+#line 2786 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 51:
@@ -2796,7 +2794,7 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2800 "src/parser.c" /* yacc.c:1646  */
+#line 2798 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -2807,7 +2805,7 @@ yyreduce:
   block_free((yyvsp[0].blk));
   jv_free(v);
 }
-#line 2811 "src/parser.c" /* yacc.c:1646  */
+#line 2809 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
@@ -2821,7 +2819,7 @@ yyreduce:
     (yyval.blk) = (yyvsp[0].blk);
   }
 }
-#line 2825 "src/parser.c" /* yacc.c:1646  */
+#line 2823 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 54:
@@ -2830,7 +2828,7 @@ yyreduce:
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 2834 "src/parser.c" /* yacc.c:1646  */
+#line 2832 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -2839,7 +2837,7 @@ yyreduce:
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-6].literal));
 }
-#line 2843 "src/parser.c" /* yacc.c:1646  */
+#line 2841 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 56:
@@ -2847,7 +2845,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2851 "src/parser.c" /* yacc.c:1646  */
+#line 2849 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 57:
@@ -2855,7 +2853,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2859 "src/parser.c" /* yacc.c:1646  */
+#line 2857 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 58:
@@ -2864,7 +2862,7 @@ yyreduce:
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2868 "src/parser.c" /* yacc.c:1646  */
+#line 2866 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 59:
@@ -2873,13 +2871,13 @@ yyreduce:
   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2877 "src/parser.c" /* yacc.c:1646  */
+#line 2875 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 60:
 #line 584 "src/parser.y" /* yacc.c:1646  */
     { (yyval.literal) = jv_string("text"); }
-#line 2883 "src/parser.c" /* yacc.c:1646  */
+#line 2881 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 61:
@@ -2888,13 +2886,13 @@ yyreduce:
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2892 "src/parser.c" /* yacc.c:1646  */
+#line 2890 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 62:
 #line 588 "src/parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[-1].literal); }
-#line 2898 "src/parser.c" /* yacc.c:1646  */
+#line 2896 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 63:
@@ -2903,7 +2901,7 @@ yyreduce:
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2907 "src/parser.c" /* yacc.c:1646  */
+#line 2905 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 64:
@@ -2911,7 +2909,7 @@ yyreduce:
     {
   (yyval.blk) = gen_const(jv_string(""));
 }
-#line 2915 "src/parser.c" /* yacc.c:1646  */
+#line 2913 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 65:
@@ -2919,7 +2917,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
 }
-#line 2923 "src/parser.c" /* yacc.c:1646  */
+#line 2921 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 66:
@@ -2927,7 +2925,7 @@ yyreduce:
     {
   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
 }
-#line 2931 "src/parser.c" /* yacc.c:1646  */
+#line 2929 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 67:
@@ -2935,7 +2933,7 @@ yyreduce:
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2939 "src/parser.c" /* yacc.c:1646  */
+#line 2937 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 68:
@@ -2943,7 +2941,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2947 "src/parser.c" /* yacc.c:1646  */
+#line 2945 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 69:
@@ -2951,7 +2949,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2955 "src/parser.c" /* yacc.c:1646  */
+#line 2953 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 70:
@@ -2959,7 +2957,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2963 "src/parser.c" /* yacc.c:1646  */
+#line 2961 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 71:
@@ -2967,7 +2965,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2971 "src/parser.c" /* yacc.c:1646  */
+#line 2969 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 72:
@@ -2975,7 +2973,7 @@ yyreduce:
     {
   (yyval.blk) = gen_noop();
 }
-#line 2979 "src/parser.c" /* yacc.c:1646  */
+#line 2977 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 73:
@@ -2983,7 +2981,7 @@ yyreduce:
     {
   (yyval.blk) = gen_call("recurse", gen_noop());
 }
-#line 2987 "src/parser.c" /* yacc.c:1646  */
+#line 2985 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 74:
@@ -2996,7 +2994,7 @@ yyreduce:
   jv_free(v);
   jv_free((yyvsp[0].literal));
 }
-#line 3000 "src/parser.c" /* yacc.c:1646  */
+#line 2998 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 75:
@@ -3005,7 +3003,7 @@ yyreduce:
   FAIL((yyloc), "break requires a label to break to");
   (yyval.blk) = gen_noop();
 }
-#line 3009 "src/parser.c" /* yacc.c:1646  */
+#line 3007 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 76:
@@ -3013,7 +3011,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
 }
-#line 3017 "src/parser.c" /* yacc.c:1646  */
+#line 3015 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 77:
@@ -3021,7 +3019,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
 }
-#line 3025 "src/parser.c" /* yacc.c:1646  */
+#line 3023 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 78:
@@ -3029,7 +3027,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3033 "src/parser.c" /* yacc.c:1646  */
+#line 3031 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 79:
@@ -3037,7 +3035,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
 }
-#line 3041 "src/parser.c" /* yacc.c:1646  */
+#line 3039 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 80:
@@ -3045,7 +3043,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
 }
-#line 3049 "src/parser.c" /* yacc.c:1646  */
+#line 3047 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 81:
@@ -3053,7 +3051,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
 }
-#line 3057 "src/parser.c" /* yacc.c:1646  */
+#line 3055 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 82:
@@ -3061,7 +3059,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3065 "src/parser.c" /* yacc.c:1646  */
+#line 3063 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 83:
@@ -3069,7 +3067,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
 }
-#line 3073 "src/parser.c" /* yacc.c:1646  */
+#line 3071 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 84:
@@ -3078,7 +3076,7 @@ yyreduce:
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3082 "src/parser.c" /* yacc.c:1646  */
+#line 3080 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 85:
@@ -3088,7 +3086,7 @@ yyreduce:
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3092 "src/parser.c" /* yacc.c:1646  */
+#line 3090 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 86:
@@ -3096,7 +3094,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
 }
-#line 3100 "src/parser.c" /* yacc.c:1646  */
+#line 3098 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 87:
@@ -3104,7 +3102,7 @@ yyreduce:
     {
   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3108 "src/parser.c" /* yacc.c:1646  */
+#line 3106 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 88:
@@ -3112,7 +3110,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
 }
-#line 3116 "src/parser.c" /* yacc.c:1646  */
+#line 3114 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 89:
@@ -3120,7 +3118,7 @@ yyreduce:
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
 }
-#line 3124 "src/parser.c" /* yacc.c:1646  */
+#line 3122 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 90:
@@ -3128,7 +3126,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3132 "src/parser.c" /* yacc.c:1646  */
+#line 3130 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 91:
@@ -3136,7 +3134,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
 }
-#line 3140 "src/parser.c" /* yacc.c:1646  */
+#line 3138 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 92:
@@ -3144,7 +3142,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3148 "src/parser.c" /* yacc.c:1646  */
+#line 3146 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 93:
@@ -3152,7 +3150,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
 }
-#line 3156 "src/parser.c" /* yacc.c:1646  */
+#line 3154 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 94:
@@ -3160,7 +3158,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
 }
-#line 3164 "src/parser.c" /* yacc.c:1646  */
+#line 3162 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 95:
@@ -3168,7 +3166,7 @@ yyreduce:
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
 }
-#line 3172 "src/parser.c" /* yacc.c:1646  */
+#line 3170 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 96:
@@ -3176,7 +3174,7 @@ yyreduce:
     {
   (yyval.blk) = gen_const((yyvsp[0].literal));
 }
-#line 3180 "src/parser.c" /* yacc.c:1646  */
+#line 3178 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 97:
@@ -3184,7 +3182,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3188 "src/parser.c" /* yacc.c:1646  */
+#line 3186 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 98:
@@ -3192,7 +3190,7 @@ yyreduce:
     {
   (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
 }
-#line 3196 "src/parser.c" /* yacc.c:1646  */
+#line 3194 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 99:
@@ -3200,7 +3198,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 3204 "src/parser.c" /* yacc.c:1646  */
+#line 3202 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 100:
@@ -3208,7 +3206,7 @@ yyreduce:
     {
   (yyval.blk) = gen_collect((yyvsp[-1].blk));
 }
-#line 3212 "src/parser.c" /* yacc.c:1646  */
+#line 3210 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 101:
@@ -3216,7 +3214,7 @@ yyreduce:
     {
   (yyval.blk) = gen_const(jv_array());
 }
-#line 3220 "src/parser.c" /* yacc.c:1646  */
+#line 3218 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 102:
@@ -3228,7 +3226,7 @@ yyreduce:
   else
     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3232 "src/parser.c" /* yacc.c:1646  */
+#line 3230 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 103:
@@ -3237,7 +3235,7 @@ yyreduce:
   (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 3241 "src/parser.c" /* yacc.c:1646  */
+#line 3239 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 104:
@@ -3246,7 +3244,7 @@ yyreduce:
   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
   jv_free((yyvsp[0].literal));
 }
-#line 3250 "src/parser.c" /* yacc.c:1646  */
+#line 3248 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 105:
@@ -3263,7 +3261,7 @@ yyreduce:
     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
   jv_free((yyvsp[0].literal));
 }
-#line 3267 "src/parser.c" /* yacc.c:1646  */
+#line 3265 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 106:
@@ -3273,31 +3271,31 @@ yyreduce:
   (yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 3277 "src/parser.c" /* yacc.c:1646  */
+#line 3275 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 107:
 #line 759 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3283 "src/parser.c" /* yacc.c:1646  */
+#line 3281 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 108:
 #line 760 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3289 "src/parser.c" /* yacc.c:1646  */
+#line 3287 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 109:
 #line 761 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[-3].blk); }
-#line 3295 "src/parser.c" /* yacc.c:1646  */
+#line 3293 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 110:
 #line 762 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3301 "src/parser.c" /* yacc.c:1646  */
+#line 3299 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 111:
@@ -3305,7 +3303,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3309 "src/parser.c" /* yacc.c:1646  */
+#line 3307 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 112:
@@ -3313,7 +3311,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3317 "src/parser.c" /* yacc.c:1646  */
+#line 3315 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 113:
@@ -3321,7 +3319,7 @@ yyreduce:
     {
   (yyval.blk) = gen_lambda((yyvsp[0].blk));
 }
-#line 3325 "src/parser.c" /* yacc.c:1646  */
+#line 3323 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 114:
@@ -3329,7 +3327,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk)));
 }
-#line 3333 "src/parser.c" /* yacc.c:1646  */
+#line 3331 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 115:
@@ -3337,7 +3335,7 @@ yyreduce:
     {
   (yyval.blk) = gen_destructure_alt((yyvsp[0].blk));
 }
-#line 3341 "src/parser.c" /* yacc.c:1646  */
+#line 3339 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 116:
@@ -3345,7 +3343,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3349 "src/parser.c" /* yacc.c:1646  */
+#line 3347 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 117:
@@ -3353,7 +3351,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3357 "src/parser.c" /* yacc.c:1646  */
+#line 3355 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 118:
@@ -3362,7 +3360,7 @@ yyreduce:
   (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 3366 "src/parser.c" /* yacc.c:1646  */
+#line 3364 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 119:
@@ -3370,7 +3368,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3374 "src/parser.c" /* yacc.c:1646  */
+#line 3372 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 120:
@@ -3378,7 +3376,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3382 "src/parser.c" /* yacc.c:1646  */
+#line 3380 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 121:
@@ -3386,7 +3384,7 @@ yyreduce:
     {
   (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk));
 }
-#line 3390 "src/parser.c" /* yacc.c:1646  */
+#line 3388 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 122:
@@ -3394,7 +3392,7 @@ yyreduce:
     {
   (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3398 "src/parser.c" /* yacc.c:1646  */
+#line 3396 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 123:
@@ -3402,7 +3400,7 @@ yyreduce:
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3406 "src/parser.c" /* yacc.c:1646  */
+#line 3404 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 124:
@@ -3410,7 +3408,7 @@ yyreduce:
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3414 "src/parser.c" /* yacc.c:1646  */
+#line 3412 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 125:
@@ -3418,7 +3416,7 @@ yyreduce:
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))));
 }
-#line 3422 "src/parser.c" /* yacc.c:1646  */
+#line 3420 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 126:
@@ -3426,7 +3424,7 @@ yyreduce:
     {
   (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 3430 "src/parser.c" /* yacc.c:1646  */
+#line 3428 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 127:
@@ -3434,7 +3432,7 @@ yyreduce:
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3438 "src/parser.c" /* yacc.c:1646  */
+#line 3436 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 128:
@@ -3442,7 +3440,7 @@ yyreduce:
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3446 "src/parser.c" /* yacc.c:1646  */
+#line 3444 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 129:
@@ -3450,7 +3448,7 @@ yyreduce:
     {
   (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3454 "src/parser.c" /* yacc.c:1646  */
+#line 3452 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 130:
@@ -3463,7 +3461,7 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk));
 }
-#line 3467 "src/parser.c" /* yacc.c:1646  */
+#line 3465 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 131:
@@ -3472,7 +3470,7 @@ yyreduce:
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3476 "src/parser.c" /* yacc.c:1646  */
+#line 3474 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 132:
@@ -3480,7 +3478,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("as");
 }
-#line 3484 "src/parser.c" /* yacc.c:1646  */
+#line 3482 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 133:
@@ -3488,7 +3486,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("def");
 }
-#line 3492 "src/parser.c" /* yacc.c:1646  */
+#line 3490 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 134:
@@ -3496,7 +3494,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("module");
 }
-#line 3500 "src/parser.c" /* yacc.c:1646  */
+#line 3498 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 135:
@@ -3504,7 +3502,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("import");
 }
-#line 3508 "src/parser.c" /* yacc.c:1646  */
+#line 3506 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 136:
@@ -3512,7 +3510,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("include");
 }
-#line 3516 "src/parser.c" /* yacc.c:1646  */
+#line 3514 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 137:
@@ -3520,7 +3518,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("if");
 }
-#line 3524 "src/parser.c" /* yacc.c:1646  */
+#line 3522 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 138:
@@ -3528,7 +3526,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("then");
 }
-#line 3532 "src/parser.c" /* yacc.c:1646  */
+#line 3530 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 139:
@@ -3536,7 +3534,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("else");
 }
-#line 3540 "src/parser.c" /* yacc.c:1646  */
+#line 3538 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 140:
@@ -3544,7 +3542,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("elif");
 }
-#line 3548 "src/parser.c" /* yacc.c:1646  */
+#line 3546 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 141:
@@ -3552,7 +3550,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("reduce");
 }
-#line 3556 "src/parser.c" /* yacc.c:1646  */
+#line 3554 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 142:
@@ -3560,7 +3558,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("foreach");
 }
-#line 3564 "src/parser.c" /* yacc.c:1646  */
+#line 3562 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 143:
@@ -3568,7 +3566,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("end");
 }
-#line 3572 "src/parser.c" /* yacc.c:1646  */
+#line 3570 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 144:
@@ -3576,7 +3574,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("and");
 }
-#line 3580 "src/parser.c" /* yacc.c:1646  */
+#line 3578 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 145:
@@ -3584,7 +3582,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("or");
 }
-#line 3588 "src/parser.c" /* yacc.c:1646  */
+#line 3586 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 146:
@@ -3592,7 +3590,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("try");
 }
-#line 3596 "src/parser.c" /* yacc.c:1646  */
+#line 3594 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 147:
@@ -3600,7 +3598,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("catch");
 }
-#line 3604 "src/parser.c" /* yacc.c:1646  */
+#line 3602 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 148:
@@ -3608,7 +3606,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("label");
 }
-#line 3612 "src/parser.c" /* yacc.c:1646  */
+#line 3610 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 149:
@@ -3616,7 +3614,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("break");
 }
-#line 3620 "src/parser.c" /* yacc.c:1646  */
+#line 3618 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 150:
@@ -3624,7 +3622,7 @@ yyreduce:
     {
   (yyval.literal) = jv_string("__loc__");
 }
-#line 3628 "src/parser.c" /* yacc.c:1646  */
+#line 3626 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 151:
@@ -3632,25 +3630,25 @@ yyreduce:
     {
   (yyval.blk)=gen_noop();
 }
-#line 3636 "src/parser.c" /* yacc.c:1646  */
+#line 3634 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 152:
 #line 913 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3642 "src/parser.c" /* yacc.c:1646  */
+#line 3640 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 153:
 #line 914 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
-#line 3648 "src/parser.c" /* yacc.c:1646  */
+#line 3646 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 154:
 #line 915 "src/parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3654 "src/parser.c" /* yacc.c:1646  */
+#line 3652 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 155:
@@ -3658,7 +3656,7 @@ yyreduce:
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
  }
-#line 3662 "src/parser.c" /* yacc.c:1646  */
+#line 3660 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 156:
@@ -3666,7 +3664,7 @@ yyreduce:
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
   }
-#line 3670 "src/parser.c" /* yacc.c:1646  */
+#line 3668 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 157:
@@ -3674,7 +3672,7 @@ yyreduce:
     {
   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
   }
-#line 3678 "src/parser.c" /* yacc.c:1646  */
+#line 3676 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 158:
@@ -3683,30 +3681,39 @@ yyreduce:
   (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 3687 "src/parser.c" /* yacc.c:1646  */
+#line 3685 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 159:
 #line 931 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
-                    gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
+  (yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))),
+                    (yyvsp[0].blk));
   }
-#line 3696 "src/parser.c" /* yacc.c:1646  */
+#line 3694 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 160:
 #line 935 "src/parser.y" /* yacc.c:1646  */
     {
-  (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
-                    gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
+  (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
+                    gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
   }
-#line 3705 "src/parser.c" /* yacc.c:1646  */
+#line 3703 "src/parser.c" /* yacc.c:1646  */
     break;
 
   case 161:
 #line 939 "src/parser.y" /* yacc.c:1646  */
     {
+  (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
+                    gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
+  }
+#line 3712 "src/parser.c" /* yacc.c:1646  */
+    break;
+
+  case 162:
+#line 943 "src/parser.y" /* yacc.c:1646  */
+    {
   jv msg = check_object_key((yyvsp[-3].blk));
   if (jv_is_valid(msg)) {
     FAIL((yyloc), jv_string_value(msg));
@@ -3714,20 +3721,20 @@ yyreduce:
   jv_free(msg);
   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
   }
-#line 3718 "src/parser.c" /* yacc.c:1646  */
+#line 3725 "src/parser.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 947 "src/parser.y" /* yacc.c:1646  */
+  case 163:
+#line 951 "src/parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "May need parentheses around object key expression");
   (yyval.blk) = (yyvsp[0].blk);
   }
-#line 3727 "src/parser.c" /* yacc.c:1646  */
+#line 3734 "src/parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3731 "src/parser.c" /* yacc.c:1646  */
+#line 3738 "src/parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3962,7 +3969,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 951 "src/parser.y" /* yacc.c:1906  */
+#line 955 "src/parser.y" /* yacc.c:1906  */
 
 
 int jq_parse(struct locfile* locations, block* answer) {
index 78782ddea43e43eff434fbba7c6eb1f7df06cdf8..2fb8187187e8b9c82f3b7e1863a3222daa995de9 100644 (file)
@@ -928,6 +928,10 @@ IDENT ':' ExpD {
   $$ = gen_dictpair($1, BLOCK(gen_op_simple(POP), gen_op_simple(DUP2),
                               gen_op_simple(DUP2), gen_op_simple(INDEX)));
   }
+| '$' IDENT ':' ExpD {
+  $$ = gen_dictpair(gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))),
+                    $4);
+  }
 | '$' IDENT {
   $$ = gen_dictpair(gen_const($2),
                     gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))));