]> granicus.if.org Git - jq/commitdiff
Fix assert fail on invalid import path (fix #899)
authorDavid Tolnay <dtolnay@gmail.com>
Wed, 12 Aug 2015 07:46:34 +0000 (00:46 -0700)
committerDavid Tolnay <dtolnay@gmail.com>
Fri, 14 Aug 2015 04:42:35 +0000 (21:42 -0700)
parser.c
parser.y
tests/jq.test

index 9500dc6ae5568ef2cb60fb2ff6a467090466a91f..1cc4adb46bd0c4a068902ab3accd4df1b7e0ebb4 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -328,6 +328,16 @@ static block constant_fold(block a, block b, int op) {
   if (!block_is_single(a) || !block_is_const(a) ||
       !block_is_single(b) || !block_is_const(b))
     return gen_noop();
+  if (op == '+') {
+    if (block_const_kind(a) == JV_KIND_NULL) {
+      block_free(a);
+      return b;
+    }
+    if (block_const_kind(b) == JV_KIND_NULL) {
+      block_free(b);
+      return a;
+    }
+  }
   if (block_const_kind(a) != block_const_kind(b))
     return gen_noop();
 
@@ -412,7 +422,7 @@ static block gen_update(block object, block val, int optype) {
 }
 
 
-#line 416 "parser.c" /* yacc.c:358  */
+#line 426 "parser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -656,16 +666,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  27
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1937
+#define YYLAST   1938
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  68
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  27
+#define YYNNTS  28
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  155
+#define YYNRULES  156
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  305
+#define YYNSTATES  306
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -716,22 +726,22 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   276,   276,   279,   284,   287,   297,   300,   305,   308,
-     313,   317,   321,   325,   329,   333,   336,   341,   345,   349,
-     354,   361,   365,   369,   373,   377,   381,   385,   389,   393,
-     397,   401,   405,   409,   413,   417,   421,   425,   431,   437,
-     441,   445,   449,   453,   457,   461,   465,   469,   474,   477,
-     494,   503,   510,   518,   523,   529,   532,   537,   542,   549,
-     549,   553,   553,   560,   563,   566,   572,   575,   580,   583,
-     586,   592,   595,   598,   606,   610,   613,   616,   619,   622,
-     625,   628,   631,   634,   638,   644,   647,   650,   653,   656,
-     659,   662,   665,   668,   671,   674,   677,   680,   683,   686,
-     689,   692,   699,   703,   707,   719,   724,   725,   726,   727,
-     730,   733,   738,   743,   747,   750,   755,   758,   763,   766,
-     771,   774,   777,   780,   783,   788,   791,   794,   797,   800,
-     803,   806,   809,   812,   815,   818,   821,   824,   827,   830,
-     833,   836,   839,   842,   847,   850,   851,   852,   855,   858,
-     861,   864,   868,   872,   876,   879
+       0,   286,   286,   289,   294,   297,   307,   310,   315,   318,
+     323,   327,   331,   335,   339,   343,   346,   351,   355,   359,
+     364,   371,   375,   379,   383,   387,   391,   395,   399,   403,
+     407,   411,   415,   419,   423,   427,   431,   435,   441,   447,
+     451,   455,   459,   463,   467,   471,   475,   479,   484,   487,
+     504,   513,   520,   528,   539,   544,   550,   553,   558,   563,
+     570,   570,   574,   574,   581,   584,   587,   593,   596,   601,
+     604,   607,   613,   616,   619,   627,   631,   634,   637,   640,
+     643,   646,   649,   652,   655,   659,   665,   668,   671,   674,
+     677,   680,   683,   686,   689,   692,   695,   698,   701,   704,
+     707,   710,   713,   720,   724,   728,   740,   745,   746,   747,
+     748,   751,   754,   759,   764,   768,   771,   776,   779,   784,
+     787,   792,   795,   798,   801,   804,   809,   812,   815,   818,
+     821,   824,   827,   830,   833,   836,   839,   842,   845,   848,
+     851,   854,   857,   860,   863,   868,   871,   872,   873,   876,
+     879,   882,   885,   889,   893,   897,   900
 };
 #endif
 
@@ -752,9 +762,9 @@ static const char *const yytname[] =
   "'-'", "'*'", "'/'", "'%'", "NONOPT", "'?'", "';'", "'('", "')'", "'$'",
   "':'", "'.'", "'['", "']'", "'{'", "'}'", "$accept", "TopLevel",
   "Module", "Imports", "FuncDefs", "Exp", "Import", "ImportWhat",
-  "FuncDef", "Params", "Param", "String", "@1", "@2", "QQString",
-  "ElseBody", "ExpD", "Term", "Args", "Arg", "Pattern", "ArrayPats",
-  "ObjPats", "ObjPat", "Keyword", "MkDict", "MkDictPair", YY_NULLPTR
+  "ImportFrom", "FuncDef", "Params", "Param", "String", "@1", "@2",
+  "QQString", "ElseBody", "ExpD", "Term", "Args", "Arg", "Pattern",
+  "ArrayPats", "ObjPats", "ObjPat", "Keyword", "MkDict", "MkDictPair", YY_NULLPTR
 };
 #endif
 
@@ -773,51 +783,51 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -145
+#define YYPACT_NINF -180
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-145)))
+  (!!((Yystate) == (-180)))
 
-#define YYTABLE_NINF -145
+#define YYTABLE_NINF -146
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-145)))
+  (!!((Yytable_value) == (-146)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      -2,   735,    26,    43,   -20,   -17,  -145,     3,  -145,    44,
-     735,   778,   778,   735,   -10,     2,  -145,   735,   463,    11,
-     273,   436,   338,  1281,   735,  -145,     6,  -145,    -3,    -3,
-     735,    43,   645,   735,  -145,  -145,   -21,  1630,     9,    48,
-      34,    64,  -145,    67,  -145,     1,    19,  1116,  -145,  -145,
-    -145,   119,     3,    65,    56,  -145,   917,   -37,    61,  -145,
-    -145,  -145,  -145,  -145,  -145,  -145,  -145,  -145,  -145,  -145,
-    -145,  -145,  -145,  -145,  -145,  -145,  -145,  -145,   527,   121,
-      68,    71,    69,    87,   735,   735,   735,   735,   735,   735,
-     735,   735,   735,   735,   735,   735,   735,   735,   735,   735,
-     735,   735,   735,   735,   735,   735,   735,   735,  -145,  -145,
-    1794,    78,   -14,    -3,   147,   124,  -145,  -145,  1794,   735,
-    -145,  -145,  1331,  1794,    16,  -145,  -145,    14,   735,   554,
-     -14,   -14,   618,    92,  -145,    23,  -145,  -145,  -145,  -145,
-    -145,  -145,   394,  -145,   772,    79,  1149,  -145,   772,   772,
-    -145,   394,  1860,   183,   183,  1827,   333,  1880,  1860,  1860,
-    1860,  1860,  1860,  1860,   183,   183,  1794,  1827,  1860,   183,
-     183,     1,     1,    84,    84,    84,  -145,   138,   -14,   836,
-      97,    89,    85,   735,   100,   868,    53,  -145,  -145,   735,
-    -145,    75,  -145,   145,    20,  -145,  1381,  -145,  1581,    99,
-     101,  -145,  -145,   735,  -145,   735,  -145,   112,  -145,   772,
-     116,    18,   102,   104,   116,   116,  -145,  -145,  -145,   -19,
-     105,   735,   164,   109,   -23,  -145,   110,   735,  -145,  -145,
-     966,  -145,   708,   118,  -145,   169,  -145,  -145,  -145,    14,
-     117,  -145,   735,   735,  -145,   735,   735,  1794,  1663,  -145,
-     772,   772,   772,   -14,  -145,   -14,  1182,  -145,   -14,   836,
-    -145,   -14,  1794,   123,   126,  1015,  -145,  -145,  -145,   735,
-    1712,  1761,  1431,  1481,  -145,   116,   116,   116,  -145,  -145,
-     127,  -145,  -145,  -145,  -145,  -145,   128,  1531,  -145,   735,
-     735,   735,   -14,  -145,  -145,  1581,  1215,  1064,  -145,  -145,
-    -145,   735,  -145,  1248,  -145
+      27,   736,    13,    51,    -5,    -8,  -180,    23,  -180,    67,
+     736,   779,   779,   736,    15,     3,  -180,   736,   464,    20,
+     274,   437,   339,  1282,   736,  -180,     6,  -180,     8,     8,
+     736,    51,   646,   736,  -180,  -180,    -7,  1631,     9,    52,
+      46,    74,  -180,    75,  -180,   -10,    22,  1117,  -180,  -180,
+    -180,   109,    23,    55,    49,  -180,   918,   -37,    61,  -180,
+    -180,  -180,  -180,  -180,  -180,  -180,  -180,  -180,  -180,  -180,
+    -180,  -180,  -180,  -180,  -180,  -180,  -180,  -180,   528,   113,
+      64,    69,    68,    87,   736,   736,   736,   736,   736,   736,
+     736,   736,   736,   736,   736,   736,   736,   736,   736,   736,
+     736,   736,   736,   736,   736,   736,   736,   736,  -180,  -180,
+    1795,    79,   -25,     8,   148,   124,  -180,  -180,  -180,  1795,
+     736,  -180,  -180,  1332,  1795,   -20,  -180,  -180,    14,   736,
+     555,   -25,   -25,   619,    92,  -180,    18,  -180,  -180,  -180,
+    -180,  -180,  -180,   395,  -180,   773,    82,  1150,  -180,   773,
+     773,  -180,   395,  1861,   184,   184,  1828,   334,  1881,  1861,
+    1861,  1861,  1861,  1861,  1861,   184,   184,  1795,  1828,  1861,
+     184,   184,   -10,   -10,    83,    83,    83,  -180,   135,   -25,
+     837,    97,    90,    85,   736,    94,   869,    19,  -180,  -180,
+     736,  -180,    80,  -180,   140,    -2,  -180,  1382,  -180,  1582,
+      99,   100,  -180,  -180,   736,  -180,   736,  -180,   114,  -180,
+     773,   117,    56,    98,   103,   117,   117,  -180,  -180,  -180,
+     -12,   105,   736,   164,   107,   -21,  -180,   110,   736,  -180,
+    -180,   967,  -180,   709,   116,  -180,   170,  -180,  -180,  -180,
+      14,   118,  -180,   736,   736,  -180,   736,   736,  1795,  1664,
+    -180,   773,   773,   773,   -25,  -180,   -25,  1183,  -180,   -25,
+     837,  -180,   -25,  1795,   119,   122,  1016,  -180,  -180,  -180,
+     736,  1713,  1762,  1432,  1482,  -180,   117,   117,   117,  -180,
+    -180,   120,  -180,  -180,  -180,  -180,  -180,   127,  1532,  -180,
+     736,   736,   736,   -25,  -180,  -180,  1582,  1216,  1065,  -180,
+    -180,  -180,   736,  -180,  1249,  -180
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -825,53 +835,53 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,     0,     0,     6,   104,    80,    95,    97,    72,     0,
-       0,     0,     0,     0,     0,     0,    59,     0,     0,     0,
-       0,     0,     0,     0,     0,    96,    47,     1,     0,     0,
-       8,     6,     0,     0,    76,    61,     0,     0,     0,     0,
-      18,     0,    74,     0,    63,    32,     0,     0,   103,   102,
-      83,     0,     0,    82,     0,   100,     0,     0,   153,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,     0,     0,
-     151,     0,     0,   145,     0,     0,     0,     0,     0,     0,
+       4,     0,     0,     6,   105,    81,    96,    98,    73,     0,
+       0,     0,     0,     0,     0,     0,    60,     0,     0,     0,
+       0,     0,     0,     0,     0,    97,    47,     1,     0,     0,
+       8,     6,     0,     0,    77,    62,     0,     0,     0,     0,
+      18,     0,    75,     0,    64,    32,     0,     0,   104,   103,
+      84,     0,     0,    83,     0,   101,     0,     0,   154,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,     0,     0,
+     152,     0,     0,   146,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    21,     5,
-      10,    79,     0,     0,     0,     0,    52,     3,     2,     8,
-       7,    48,     0,   112,     0,   110,    63,     0,     0,     0,
-       0,     0,     0,     0,    73,     0,   106,    98,    84,    78,
-     107,    99,     0,   109,     0,     0,     0,   152,     0,     0,
-     101,     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,    75,     0,     0,     0,
-       0,    81,     0,     0,    88,     0,     0,     9,    49,     0,
-     105,     0,    58,     0,     0,    55,     0,    16,     0,     0,
-       0,    19,    17,     0,    64,     0,    60,     0,   147,     0,
-     148,    70,     0,     0,   150,   149,   146,   113,   116,     0,
-       0,     0,     0,     0,     0,   118,     0,     0,    77,   108,
-       0,    87,     0,    86,    51,     0,   111,    62,    57,     0,
-       0,    53,     0,     0,    15,     0,     0,    20,     0,    69,
-       0,     0,     0,     0,   114,     0,     0,   120,     0,     0,
-     115,     0,    11,    94,    93,     0,    85,    50,    56,     0,
-       0,     0,     0,     0,    65,    68,   155,   154,   117,   121,
-       0,   123,   119,   122,    91,    90,    92,     0,    67,     0,
-       0,     0,     0,    89,    54,     0,     0,     0,   124,    66,
-      12,     0,    14,     0,    13
+      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,   110,     0,     0,     0,   153,     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,    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,   148,
+       0,   149,    71,     0,     0,   151,   150,   147,   114,   117,
+       0,     0,     0,     0,     0,     0,   119,     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,     0,   115,     0,     0,   121,     0,
+       0,   116,     0,    11,    95,    94,     0,    86,    50,    57,
+       0,     0,     0,     0,     0,    66,    69,   156,   155,   118,
+     122,     0,   124,   120,   123,    92,    91,    93,     0,    68,
+       0,     0,     0,     0,    90,    55,     0,     0,     0,   125,
+      67,    12,     0,    14,     0,    13
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -145,  -145,  -145,   150,    59,    -1,  -145,  -145,    -9,  -145,
-     -53,     5,  -145,  -145,    66,  -105,  -143,    -4,  -145,     7,
-    -129,  -145,  -145,   -68,  -144,  -106,  -145
+    -180,  -180,  -180,   150,    66,    -1,  -180,  -180,   158,    -9,
+    -180,   -50,     5,  -180,  -180,    65,  -105,  -144,    -4,  -180,
+       7,  -129,  -180,  -180,   -67,  -179,  -115,  -180
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,    30,   117,   110,    31,    32,    24,   194,
-     195,    25,    44,   126,   135,   244,   210,    26,   124,   125,
-     180,   219,   224,   225,    81,    82,    83
+      -1,     2,     3,    30,   118,   110,    31,    32,   115,    24,
+     195,   196,    25,    44,   127,   136,   245,   211,    26,   125,
+     126,   181,   220,   225,   226,    81,    82,    83
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -879,298 +889,303 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      23,   199,   200,    42,    52,   214,   215,    38,    39,    37,
-     142,   111,    40,     1,   111,    48,    45,    47,   192,   112,
-      56,   119,   130,   111,   259,    53,    27,    80,   253,   118,
-     143,   122,   123,   115,   116,   226,   208,    16,   127,    33,
-      34,   128,    49,    35,   260,   216,   254,   177,    36,   218,
-     178,    41,   179,   111,   105,   106,   107,   234,   108,    28,
-      29,   131,   132,    43,   204,   205,   249,   206,   133,   113,
-     114,   134,   113,   114,   189,   193,   190,   146,   239,   136,
-     240,   113,   114,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   275,   276,   277,
-     119,   113,   114,   185,   235,   226,   204,   205,   181,   237,
-     138,   140,   139,   144,   278,   147,   279,   196,   198,   281,
-     148,   202,   283,   149,   151,   176,   150,   186,   203,   212,
-     211,   108,   217,   227,   211,   211,   228,    80,   182,   238,
-     229,     4,     5,     6,     7,     8,    80,   231,   245,   142,
-     246,     9,   250,   298,   251,    10,   252,   255,   257,    11,
-      12,   258,   261,   267,    13,   266,    14,    15,   187,   269,
-     284,   120,   230,   285,   223,   293,   268,    16,   123,   292,
-     299,   282,   191,  -145,  -145,     0,   236,     0,     0,    17,
-       0,     0,   247,     0,   248,   211,    18,     0,    19,   183,
-      20,    21,   184,    22,     0,     0,     0,     0,     0,     0,
-     256,  -145,  -145,     0,     0,     0,   262,     0,     0,     0,
-       0,   265,  -145,  -145,   103,   104,   105,   106,   107,     0,
-     108,   270,   271,     0,   272,   273,   211,   211,   211,     0,
+      23,   227,   200,   201,    42,   215,   216,    38,    39,    37,
+     143,   111,    40,    27,   111,    52,    45,    47,   193,   112,
+      56,   120,   131,   235,    48,    53,   260,    80,   209,   119,
+     144,   123,   124,   116,   116,   254,   178,   217,   190,   179,
+     191,   180,     1,   105,   106,   107,   261,   108,    16,    34,
+     219,    49,   128,   255,    33,   129,   240,   111,   241,   205,
+     206,   111,   207,    35,    43,   132,   250,    28,    29,   113,
+     114,    36,   113,   114,   133,   194,    41,   147,   134,   135,
+     236,   227,   137,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   276,   277,   278,
+     139,   120,   140,   186,   141,   113,   114,   148,   182,   113,
+     114,   205,   206,   145,   238,   279,   149,   280,   197,   199,
+     282,   150,   203,   284,   152,   151,   177,   187,   204,   218,
+     108,   212,   213,   228,   239,   212,   212,   229,    80,   183,
+     230,   232,     4,     5,     6,     7,     8,    80,   246,   247,
+     252,   143,     9,   251,   299,   253,    10,   256,   258,   259,
+      11,    12,   262,   267,   268,    13,   285,    14,    15,   286,
+     270,   121,   293,   231,   294,   224,   188,   117,    16,   124,
+     269,   300,   192,   283,  -146,  -146,     0,   237,     0,     0,
+      17,     0,     0,   248,     0,   249,   212,    18,     0,    19,
+     184,    20,    21,   185,    22,     0,     0,     0,     0,     0,
+       0,   257,  -146,  -146,     0,     0,     0,   263,     0,     0,
+       0,     0,   266,  -146,  -146,   103,   104,   105,   106,   107,
+       0,   108,   271,   272,     0,   273,   274,   212,   212,   212,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   223,     0,     0,     0,   287,     0,
-       0,     0,     0,   -71,    50,     0,     0,    51,   -71,     0,
-      52,     0,   -71,   -71,   -71,   -71,   -71,     0,   295,   296,
-     297,     0,   -71,   -71,   -71,     0,     0,   -71,   -71,   -71,
-     303,   -71,     0,     0,     0,   -71,   -71,   -71,   -71,   -71,
-     -71,   -71,   -71,    16,     0,     0,   -71,     0,     0,   -71,
-     -71,   -71,   -71,   -71,   -71,   -71,   -71,   -71,   -71,     0,
-     -71,   -71,     0,   -71,     0,   -71,   -71,   -71,   -71,    57,
-     -71,     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,    16,     0,
-       0,     0,   101,   102,   103,   104,   105,   106,   107,     0,
-     108,     0,     0,     0,     0,   207,     0,    78,    58,    79,
-       0,    52,     0,     0,     0,  -144,     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,    16,     0,     0,    54,     0,     0,
-       4,     5,     6,     7,     8,     0,     0,     0,     0,     0,
-       9,     0,     0,    78,    10,    79,     0,     0,    11,    12,
-       0,  -144,     0,    13,    46,    14,    15,     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,    55,    22,    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,   145,    22,
+       0,     0,     0,     0,     0,   224,     0,     0,     0,   288,
+       0,     0,     0,     0,   -72,    50,     0,     0,    51,   -72,
+       0,    52,     0,   -72,   -72,   -72,   -72,   -72,     0,   296,
+     297,   298,     0,   -72,   -72,   -72,     0,     0,   -72,   -72,
+     -72,   304,   -72,     0,     0,     0,   -72,   -72,   -72,   -72,
+     -72,   -72,   -72,   -72,    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,    16,
+       0,     0,     0,   101,   102,   103,   104,   105,   106,   107,
+       0,   108,     0,     0,     0,     0,   208,     0,    78,    58,
+      79,     0,    52,     0,     0,     0,  -145,     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,    16,     0,     0,    54,     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,   197,    14,    15,     4,     5,
+       0,     9,     0,     0,    78,    10,    79,     0,     0,    11,
+      12,     0,  -145,     0,    13,    46,    14,    15,     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,    16,     0,     0,     0,     0,     0,
+      20,    21,    55,    22,    16,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
-       0,     0,     0,    18,     0,    19,     0,    20,    21,   201,
+       0,     0,     0,    18,     0,    19,     0,    20,    21,   146,
       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,     4,
+      11,    12,     0,     0,     0,    13,   198,    14,    15,     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,    16,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       0,     0,     0,   121,    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,     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,   264,    22,    16,     4,     5,     6,     7,
-       8,     0,     4,     5,     6,     7,     8,    17,     0,     0,
        0,     0,     0,     0,    18,     0,    19,     0,    20,    21,
-       0,    22,    15,     0,     0,     0,     0,     0,    15,     0,
-       0,     0,    16,     0,     0,     0,     0,     0,    16,     0,
-       0,     0,     0,     0,   209,     0,     0,     0,     0,     0,
-       0,    18,     0,    19,     0,    20,    21,    18,    22,    19,
-     220,    20,    21,    52,    22,     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,    16,    84,    85,    86,
-      87,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    88,    89,   221,     0,   222,     0,     0,
+     202,    22,     0,     4,     5,     6,     7,     8,     0,     0,
+       0,     0,     0,     9,     0,     0,     0,    10,     0,     0,
+       0,    11,    12,     0,     0,     0,    13,     0,    14,    15,
+       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,    16,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+       0,     0,     0,     0,   122,    18,     0,    19,     0,    20,
+      21,     0,    22,     4,     5,     6,     7,     8,     0,     0,
+       0,     0,     0,     9,     0,     0,     0,    10,     0,     0,
+       0,    11,    12,     0,     0,     0,    13,     0,    14,    15,
+       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,   265,    22,    16,     4,     5,     6,
+       7,     8,     0,     4,     5,     6,     7,     8,    17,     0,
+       0,     0,     0,     0,     0,    18,     0,    19,     0,    20,
+      21,     0,    22,    15,     0,     0,     0,     0,     0,    15,
+       0,     0,     0,    16,     0,     0,     0,     0,     0,    16,
+       0,     0,     0,     0,     0,   210,     0,     0,     0,     0,
+       0,     0,    18,     0,    19,     0,    20,    21,    18,    22,
+      19,   221,    20,    21,    52,    22,     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,    16,    84,    85,
+      86,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    88,    89,   222,     0,   223,     0,
+       0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
+       0,     0,     0,     0,     0,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,     0,   108,    84,    85,    86,
+      87,   233,     0,     0,   234,     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,    98,    99,   100,   101,   102,   103,
      104,   105,   106,   107,     0,   108,    84,    85,    86,    87,
-     232,     0,     0,   233,     0,     0,     0,     0,     0,     0,
+       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,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,     0,   108,    84,    85,    86,    87,     0,
-       0,     0,   141,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   264,     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,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,     0,   108,    84,    85,    86,    87,     0,     0,
-       0,   263,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   287,     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,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,     0,   108,    84,    85,    86,    87,     0,     0,     0,
-     286,     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,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-       0,   108,   301,     0,   302,    84,    85,    86,    87,     0,
+     107,     0,   108,   302,     0,   303,    84,    85,    86,    87,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    88,    89,     0,     0,     0,     0,     0,    90,    91,
+       0,     0,    88,    89,     0,     0,     0,     0,     0,    90,
+      91,    92,    93,    94,    95,    96,    97,     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,    84,    85,    86,    87,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,     0,   108,    88,    89,
+     214,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     0,     0,    84,    85,    86,    87,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,     0,
+     108,    88,    89,   281,     0,     0,     0,     0,    90,    91,
       92,    93,    94,    95,    96,    97,     0,     0,    84,    85,
       86,    87,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,     0,   108,    88,    89,   137,     0,     0,     0,
+     106,   107,     0,   108,    88,    89,   301,     0,     0,     0,
        0,    90,    91,    92,    93,    94,    95,    96,    97,     0,
        0,    84,    85,    86,    87,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,     0,   108,    88,    89,   213,
+     103,   104,   105,   106,   107,     0,   108,    88,    89,   305,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,    84,    85,    86,    87,    98,    99,
+      96,    97,     0,     0,     0,     0,     0,     0,    98,    99,
      100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
-      88,    89,   280,     0,     0,     0,     0,    90,    91,    92,
-      93,    94,    95,    96,    97,     0,     0,    84,    85,    86,
-      87,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,     0,   108,    88,    89,   300,     0,     0,     0,     0,
-      90,    91,    92,    93,    94,    95,    96,    97,     0,     0,
-      84,    85,    86,    87,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,     0,   108,    88,    89,   304,     0,
-       0,     0,     0,    90,    91,    92,    93,    94,    95,    96,
-      97,     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,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,   188,
-      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,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,   241,
-      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,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,   290,
-      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,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,   291,
-      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,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,     0,   108,   294,
-      84,    85,    86,    87,     0,     0,     0,     0,     0,     0,
-       0,   242,   243,     0,     0,     0,    88,    89,     0,     0,
-       0,     0,     0,    90,    91,    92,    93,    94,    95,    96,
-      97,     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,   129,
-       0,     0,     0,     0,     0,    88,    89,     0,     0,     0,
-       0,     0,    90,    91,    92,    93,    94,    95,    96,    97,
-       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,   274,     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,   288,    88,    89,     0,
+     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,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     189,    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,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     242,    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,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     291,    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,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     292,    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,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
+     295,    84,    85,    86,    87,     0,     0,     0,     0,     0,
+       0,     0,   243,   244,     0,     0,     0,    88,    89,     0,
        0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
       96,    97,     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,
-     289,     0,     0,     0,     0,     0,    88,    89,     0,     0,
+     130,     0,     0,     0,     0,     0,    88,    89,     0,     0,
        0,     0,     0,    90,    91,    92,    93,    94,    95,    96,
       97,     0,     0,    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,    84,    85,    86,    87,
+      94,    95,    96,    97,     0,     0,     0,   275,     0,     0,
       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,  -145,
-      85,    86,     0,     0,     0,   100,   101,   102,   103,   104,
-     105,   106,   107,     0,   108,    88,    89,     0,     0,     0,
-      85,    86,  -145,  -145,  -145,  -145,  -145,  -145,    96,    97,
-       0,     0,     0,     0,     0,    88,     0,     0,  -145,   101,
-     102,   103,   104,   105,   106,   107,     0,   108,    96,    97,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   101,
-     102,   103,   104,   105,   106,   107,     0,   108
+       0,   108,    84,    85,    86,    87,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   289,    88,    89,
+       0,     0,     0,     0,     0,    90,    91,    92,    93,    94,
+      95,    96,    97,     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,   290,     0,     0,     0,     0,     0,    88,    89,     0,
+       0,     0,     0,     0,    90,    91,    92,    93,    94,    95,
+      96,    97,     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,    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,
+    -146,    85,    86,     0,     0,     0,   100,   101,   102,   103,
+     104,   105,   106,   107,     0,   108,    88,    89,     0,     0,
+       0,    85,    86,  -146,  -146,  -146,  -146,  -146,  -146,    96,
+      97,     0,     0,     0,     0,     0,    88,     0,     0,  -146,
+     101,   102,   103,   104,   105,   106,   107,     0,   108,    96,
+      97,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     101,   102,   103,   104,   105,   106,   107,     0,   108
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,   130,   131,     1,     7,   148,   149,    11,    12,    10,
-      47,     5,    13,    15,     5,     4,    17,    18,     4,    13,
-      21,    30,    13,     5,    47,    20,     0,    22,    47,    30,
-      67,    32,    33,    28,    29,   179,   142,    40,    59,    59,
-      57,    62,    31,    40,    67,   151,    65,    61,     4,   178,
-      64,    61,    66,     5,    53,    54,    55,     4,    57,    16,
-      17,    13,    28,    61,    41,    42,   209,    44,     4,    63,
-      64,     4,    63,    64,    58,    61,    60,    78,    58,    60,
-      60,    63,    64,    84,    85,    86,    87,    88,    89,    90,
+       1,   180,   131,   132,     1,   149,   150,    11,    12,    10,
+      47,     5,    13,     0,     5,     7,    17,    18,     4,    13,
+      21,    30,    13,     4,     4,    20,    47,    22,   143,    30,
+      67,    32,    33,    28,    29,    47,    61,   152,    58,    64,
+      60,    66,    15,    53,    54,    55,    67,    57,    40,    57,
+     179,    31,    59,    65,    59,    62,    58,     5,    60,    41,
+      42,     5,    44,    40,    61,    13,   210,    16,    17,    63,
+      64,     4,    63,    64,    28,    61,    61,    78,     4,     4,
+      61,   260,    60,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   250,   251,   252,
-     119,    63,    64,   114,    61,   259,    41,    42,   113,    44,
-       1,    65,    57,    62,   253,     4,   255,   128,   129,   258,
-      62,   132,   261,    62,    47,    57,    67,    13,    46,    60,
-     144,    57,     4,    46,   148,   149,    57,   142,     1,     4,
-      65,     4,     5,     6,     7,     8,   151,    57,    59,    47,
-      59,    14,    46,   292,    62,    18,    62,    62,     4,    22,
-      23,    62,    62,     4,    27,    57,    29,    30,   119,    62,
-      57,    31,   183,    57,   179,    57,   239,    40,   189,    62,
-     295,   259,   126,    10,    11,    -1,   189,    -1,    -1,    52,
-      -1,    -1,   203,    -1,   205,   209,    59,    -1,    61,    62,
-      63,    64,    65,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-     221,    38,    39,    -1,    -1,    -1,   227,    -1,    -1,    -1,
-      -1,   232,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,   242,   243,    -1,   245,   246,   250,   251,   252,    -1,
+     101,   102,   103,   104,   105,   106,   107,   251,   252,   253,
+       1,   120,    57,   114,    65,    63,    64,     4,   113,    63,
+      64,    41,    42,    62,    44,   254,    62,   256,   129,   130,
+     259,    62,   133,   262,    47,    67,    57,    13,    46,     4,
+      57,   145,    60,    46,     4,   149,   150,    57,   143,     1,
+      65,    57,     4,     5,     6,     7,     8,   152,    59,    59,
+      62,    47,    14,    46,   293,    62,    18,    62,     4,    62,
+      22,    23,    62,    57,     4,    27,    57,    29,    30,    57,
+      62,    31,    62,   184,    57,   180,   120,    29,    40,   190,
+     240,   296,   127,   260,    10,    11,    -1,   190,    -1,    -1,
+      52,    -1,    -1,   204,    -1,   206,   210,    59,    -1,    61,
+      62,    63,    64,    65,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,   222,    38,    39,    -1,    -1,    -1,   228,    -1,    -1,
+      -1,    -1,   233,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,   243,   244,    -1,   246,   247,   251,   252,   253,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   259,    -1,    -1,    -1,   269,    -1,
-      -1,    -1,    -1,     0,     1,    -1,    -1,     4,     5,    -1,
-       7,    -1,     9,    10,    11,    12,    13,    -1,   289,   290,
-     291,    -1,    19,    20,    21,    -1,    -1,    24,    25,    26,
-     301,    28,    -1,    -1,    -1,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,    58,    -1,    60,    -1,    62,    63,    64,    65,     1,
-      67,    -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,    40,    -1,
-      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,    -1,    -1,    -1,    -1,     1,    -1,    59,     4,    61,
-      -1,     7,    -1,    -1,    -1,    67,    -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,    40,    -1,    -1,     1,    -1,    -1,
-       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
-      14,    -1,    -1,    59,    18,    61,    -1,    -1,    22,    23,
-      -1,    67,    -1,    27,     1,    29,    30,     4,     5,     6,
-       7,     8,    -1,    -1,    -1,    -1,    40,    14,    -1,    -1,
-      -1,    18,    -1,    -1,    -1,    22,    23,    -1,    52,    -1,
-      27,    -1,    29,    30,    -1,    59,    -1,    61,    -1,    63,
-      64,    65,    66,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,
-      -1,    -1,    59,    -1,    61,    -1,    63,    64,     1,    66,
+      -1,    -1,    -1,    -1,    -1,   260,    -1,    -1,    -1,   270,
+      -1,    -1,    -1,    -1,     0,     1,    -1,    -1,     4,     5,
+      -1,     7,    -1,     9,    10,    11,    12,    13,    -1,   290,
+     291,   292,    -1,    19,    20,    21,    -1,    -1,    24,    25,
+      26,   302,    28,    -1,    -1,    -1,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    -1,    60,    -1,    62,    63,    64,    65,
+       1,    67,    -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,    40,
+      -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    -1,    -1,    -1,    -1,     1,    -1,    59,     4,
+      61,    -1,     7,    -1,    -1,    -1,    67,    -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,    40,    -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,     4,     5,
+      -1,    14,    -1,    -1,    59,    18,    61,    -1,    -1,    22,
+      23,    -1,    67,    -1,    27,     1,    29,    30,     4,     5,
        6,     7,     8,    -1,    -1,    -1,    -1,    40,    14,    -1,
       -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    52,
       -1,    27,    -1,    29,    30,    -1,    59,    -1,    61,    -1,
-      63,    64,    -1,    66,    40,    -1,    -1,    -1,    -1,    -1,
+      63,    64,    65,    66,    40,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,
       -1,    -1,    -1,    59,    -1,    61,    -1,    63,    64,     1,
       66,    -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,     4,
+      22,    23,    -1,    -1,    -1,    27,     1,    29,    30,     4,
        5,     6,     7,     8,    -1,    -1,    -1,    -1,    40,    14,
       -1,    -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,
       52,    -1,    27,    -1,    29,    30,    -1,    59,    -1,    61,
       -1,    63,    64,    -1,    66,    40,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,
-      -1,    -1,    -1,    58,    59,    -1,    61,    -1,    63,    64,
-      -1,    66,     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,     4,
-       5,     6,     7,     8,    -1,    -1,    -1,    -1,    40,    14,
-      -1,    -1,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,
-      52,    -1,    27,    -1,    29,    30,    -1,    59,    -1,    61,
-      -1,    63,    64,    65,    66,    40,     4,     5,     6,     7,
-       8,    -1,     4,     5,     6,     7,     8,    52,    -1,    -1,
       -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    63,    64,
-      -1,    66,    30,    -1,    -1,    -1,    -1,    -1,    30,    -1,
-      -1,    -1,    40,    -1,    -1,    -1,    -1,    -1,    40,    -1,
-      -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,    -1,
-      -1,    59,    -1,    61,    -1,    63,    64,    59,    66,    61,
-       4,    63,    64,     7,    66,    -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,    40,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    59,    -1,    61,    -1,    -1,
+       1,    66,    -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,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    40,
+      14,    -1,    -1,    -1,    18,    -1,    -1,    -1,    22,    23,
+      -1,    52,    -1,    27,    -1,    29,    30,    -1,    59,    -1,
+      61,    -1,    63,    64,    -1,    66,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,
+      -1,    -1,    -1,    -1,    58,    59,    -1,    61,    -1,    63,
+      64,    -1,    66,     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,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    40,
+      14,    -1,    -1,    -1,    18,    -1,    -1,    -1,    22,    23,
+      -1,    52,    -1,    27,    -1,    29,    30,    -1,    59,    -1,
+      61,    -1,    63,    64,    65,    66,    40,     4,     5,     6,
+       7,     8,    -1,     4,     5,     6,     7,     8,    52,    -1,
+      -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    63,
+      64,    -1,    66,    30,    -1,    -1,    -1,    -1,    -1,    30,
+      -1,    -1,    -1,    40,    -1,    -1,    -1,    -1,    -1,    40,
+      -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,
+      -1,    -1,    59,    -1,    61,    -1,    63,    64,    59,    66,
+      61,     4,    63,    64,     7,    66,    -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,    40,     9,    10,
+      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    59,    -1,    61,    -1,
+      -1,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    -1,    57,     9,    10,    11,
+      12,    62,    -1,    -1,    65,    -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,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    -1,    57,     9,    10,    11,    12,
-      62,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    65,    -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,    46,    47,    48,    49,    50,    51,    52,
@@ -1184,14 +1199,19 @@ static const yytype_int16 yycheck[] =
       25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,
       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,     9,    10,    11,    12,    -1,    -1,    -1,
-      65,    -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,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    58,    -1,    60,     9,    10,    11,    12,    -1,
+      55,    -1,    57,    58,    -1,    60,     9,    10,    11,    12,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,
+      -1,    -1,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,     9,
+      10,    11,    12,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    25,    26,    60,    -1,    -1,
+      -1,    -1,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,     9,    10,    11,    12,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    -1,    57,    25,    26,
+      60,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,     9,    10,    11,    12,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    25,    26,    60,    -1,    -1,    -1,    -1,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,     9,    10,
       11,    12,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    -1,    57,    25,    26,    60,    -1,    -1,    -1,
@@ -1199,58 +1219,35 @@ static const yytype_int16 yycheck[] =
       -1,     9,    10,    11,    12,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    -1,    57,    25,    26,    60,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,     9,    10,    11,    12,    46,    47,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      25,    26,    60,    -1,    -1,    -1,    -1,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,     9,    10,    11,
-      12,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    25,    26,    60,    -1,    -1,    -1,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-       9,    10,    11,    12,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    -1,    57,    25,    26,    60,    -1,
-      -1,    -1,    -1,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-       9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    20,    21,    -1,    -1,    -1,    25,    26,    -1,    -1,
-      -1,    -1,    -1,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,     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,     9,    10,    11,    12,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    25,    26,
-      -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    -1,
+      58,     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,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,     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,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,     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,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,     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,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,     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,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    20,    21,    -1,    -1,    -1,    25,    26,    -1,
       -1,    -1,    -1,    -1,    32,    33,    34,    35,    36,    37,
       38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
@@ -1260,17 +1257,30 @@ static const yytype_int16 yycheck[] =
       39,    -1,    -1,     9,    10,    11,    12,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    -1,    57,    25,
       26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,     9,    10,    11,    12,
+      36,    37,    38,    39,    -1,    -1,    -1,    43,    -1,    -1,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    25,    26,    -1,    -1,    -1,    -1,    -1,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,     9,
-      10,    11,    -1,    -1,    -1,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    25,    26,    -1,    -1,    -1,
-      10,    11,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    25,    -1,    -1,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57
+      -1,    57,     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,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,     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,     9,    10,    11,    12,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      25,    26,    -1,    -1,    -1,    -1,    -1,    32,    33,    34,
+      35,    36,    37,    38,    39,    -1,    -1,     9,    10,    11,
+      12,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    57,    25,    26,    -1,    -1,    -1,    -1,    -1,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+       9,    10,    11,    -1,    -1,    -1,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    25,    26,    -1,    -1,
+      -1,    10,    11,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    25,    -1,    -1,    48,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1279,35 +1289,35 @@ static const yytype_uint8 yystos[] =
 {
        0,    15,    69,    70,     4,     5,     6,     7,     8,    14,
       18,    22,    23,    27,    29,    30,    40,    52,    59,    61,
-      63,    64,    66,    73,    76,    79,    85,     0,    16,    17,
-      71,    74,    75,    59,    57,    40,     4,    73,    85,    85,
-      73,    61,     1,    61,    80,    73,     1,    73,     4,    31,
-       1,     4,     7,    79,     1,    65,    73,     1,     4,    13,
+      63,    64,    66,    73,    77,    80,    86,     0,    16,    17,
+      71,    74,    75,    59,    57,    40,     4,    73,    86,    86,
+      73,    61,     1,    61,    81,    73,     1,    73,     4,    31,
+       1,     4,     7,    80,     1,    65,    73,     1,     4,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    59,    61,
-      79,    92,    93,    94,     9,    10,    11,    12,    25,    26,
+      80,    93,    94,    95,     9,    10,    11,    12,    25,    26,
       32,    33,    34,    35,    36,    37,    38,    39,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    57,    58,
-      73,     5,    13,    63,    64,    79,    79,    72,    73,    76,
-      71,    58,    73,    73,    86,    87,    81,    59,    62,    19,
-      13,    13,    28,     4,     4,    82,    60,    60,     1,    57,
-      65,    65,    47,    67,    62,     1,    73,     4,    62,    62,
-      67,    47,    73,    73,    73,    73,    73,    73,    73,    73,
+      73,     5,    13,    63,    64,    76,    80,    76,    72,    73,
+      77,    71,    58,    73,    73,    87,    88,    82,    59,    62,
+      19,    13,    13,    28,     4,     4,    83,    60,    60,     1,
+      57,    65,    65,    47,    67,    62,     1,    73,     4,    62,
+      62,    67,    47,    73,    73,    73,    73,    73,    73,    73,
       73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
-      73,    73,    73,    73,    73,    73,    57,    61,    64,    66,
-      88,    79,     1,    62,    65,    73,    13,    72,    58,    58,
-      60,    82,     4,    61,    77,    78,    73,     1,    73,    88,
-      88,     1,    73,    46,    41,    42,    44,     1,    93,    52,
-      84,    85,    60,    60,    84,    84,    93,     4,    88,    89,
-       4,    59,    61,    79,    90,    91,    92,    46,    57,    65,
-      73,    57,    62,    65,     4,    61,    87,    44,     4,    58,
-      60,    58,    20,    21,    83,    59,    59,    73,    73,    84,
-      46,    62,    62,    47,    65,    62,    73,     4,    62,    47,
-      67,    62,    73,    65,    65,    73,    57,     4,    78,    62,
-      73,    73,    73,    73,    43,    84,    84,    84,    88,    88,
-      60,    88,    91,    88,    57,    57,    65,    73,    24,    19,
-      58,    58,    62,    57,    58,    73,    73,    73,    88,    83,
-      60,    58,    60,    73,    60
+      73,    73,    73,    73,    73,    73,    73,    57,    61,    64,
+      66,    89,    80,     1,    62,    65,    73,    13,    72,    58,
+      58,    60,    83,     4,    61,    78,    79,    73,     1,    73,
+      89,    89,     1,    73,    46,    41,    42,    44,     1,    94,
+      52,    85,    86,    60,    60,    85,    85,    94,     4,    89,
+      90,     4,    59,    61,    80,    91,    92,    93,    46,    57,
+      65,    73,    57,    62,    65,     4,    61,    88,    44,     4,
+      58,    60,    58,    20,    21,    84,    59,    59,    73,    73,
+      85,    46,    62,    62,    47,    65,    62,    73,     4,    62,
+      47,    67,    62,    73,    65,    65,    73,    57,     4,    79,
+      62,    73,    73,    73,    73,    43,    85,    85,    85,    89,
+      89,    60,    89,    92,    89,    57,    57,    65,    73,    24,
+      19,    58,    58,    62,    57,    58,    73,    73,    73,    89,
+      84,    60,    58,    60,    73,    60
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1318,17 +1328,17 @@ static const yytype_uint8 yyr1[] =
       73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
       73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
       73,    73,    73,    73,    73,    73,    73,    73,    74,    74,
-      75,    75,    75,    76,    76,    77,    77,    78,    78,    80,
-      79,    81,    79,    82,    82,    82,    83,    83,    84,    84,
-      84,    85,    85,    85,    85,    85,    85,    85,    85,    85,
-      85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
-      85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
-      85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
-      86,    86,    87,    88,    88,    88,    89,    89,    90,    90,
-      91,    91,    91,    91,    91,    92,    92,    92,    92,    92,
-      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
-      92,    92,    92,    92,    93,    93,    93,    93,    94,    94,
-      94,    94,    94,    94,    94,    94
+      75,    75,    75,    76,    77,    77,    78,    78,    79,    79,
+      81,    80,    82,    80,    83,    83,    83,    84,    84,    85,
+      85,    85,    86,    86,    86,    86,    86,    86,    86,    86,
+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
+      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
+      86,    87,    87,    88,    89,    89,    89,    90,    90,    91,
+      91,    92,    92,    92,    92,    92,    93,    93,    93,    93,
+      93,    93,    93,    93,    93,    93,    93,    93,    93,    93,
+      93,    93,    93,    93,    93,    94,    94,    94,    94,    95,
+      95,    95,    95,    95,    95,    95,    95
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1339,17 +1349,17 @@ static const yytype_uint8 yyr2[] =
        5,     2,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     2,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     1,     2,     3,
-       5,     4,     2,     5,     8,     1,     3,     2,     1,     0,
-       4,     0,     5,     0,     2,     4,     5,     3,     3,     2,
-       1,     1,     1,     3,     2,     3,     2,     4,     3,     2,
-       1,     3,     2,     2,     3,     5,     4,     4,     3,     7,
-       6,     6,     6,     5,     5,     1,     1,     1,     3,     3,
-       2,     3,     2,     2,     1,     4,     3,     3,     4,     3,
-       1,     3,     1,     2,     3,     3,     1,     3,     1,     3,
-       2,     3,     3,     3,     5,     1,     1,     1,     1,     1,
+       5,     4,     2,     1,     5,     8,     1,     3,     2,     1,
+       0,     4,     0,     5,     0,     2,     4,     5,     3,     3,
+       2,     1,     1,     1,     3,     2,     3,     2,     4,     3,
+       2,     1,     3,     2,     2,     3,     5,     4,     4,     3,
+       7,     6,     6,     6,     5,     5,     1,     1,     1,     3,
+       3,     2,     3,     2,     2,     1,     4,     3,     3,     4,
+       3,     1,     3,     1,     2,     3,     3,     1,     3,     1,
+       3,     2,     3,     3,     3,     5,     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,     5
+       1,     1,     1,     1,     1,     0,     1,     3,     3,     3,
+       3,     3,     1,     2,     1,     5,     5
 };
 
 
@@ -1852,169 +1862,175 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
           case 4: /* IDENT  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1856 "parser.c" /* yacc.c:1257  */
+#line 1866 "parser.c" /* yacc.c:1257  */
         break;
 
     case 5: /* FIELD  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1862 "parser.c" /* yacc.c:1257  */
+#line 1872 "parser.c" /* yacc.c:1257  */
         break;
 
     case 6: /* LITERAL  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1868 "parser.c" /* yacc.c:1257  */
+#line 1878 "parser.c" /* yacc.c:1257  */
         break;
 
     case 7: /* FORMAT  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1874 "parser.c" /* yacc.c:1257  */
+#line 1884 "parser.c" /* yacc.c:1257  */
         break;
 
     case 41: /* QQSTRING_TEXT  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1880 "parser.c" /* yacc.c:1257  */
+#line 1890 "parser.c" /* yacc.c:1257  */
         break;
 
     case 70: /* Module  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1886 "parser.c" /* yacc.c:1257  */
+#line 1896 "parser.c" /* yacc.c:1257  */
         break;
 
     case 71: /* Imports  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1892 "parser.c" /* yacc.c:1257  */
+#line 1902 "parser.c" /* yacc.c:1257  */
         break;
 
     case 72: /* FuncDefs  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1898 "parser.c" /* yacc.c:1257  */
+#line 1908 "parser.c" /* yacc.c:1257  */
         break;
 
     case 73: /* Exp  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1904 "parser.c" /* yacc.c:1257  */
+#line 1914 "parser.c" /* yacc.c:1257  */
         break;
 
     case 74: /* Import  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1910 "parser.c" /* yacc.c:1257  */
+#line 1920 "parser.c" /* yacc.c:1257  */
         break;
 
     case 75: /* ImportWhat  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1916 "parser.c" /* yacc.c:1257  */
+#line 1926 "parser.c" /* yacc.c:1257  */
+        break;
+
+    case 76: /* ImportFrom  */
+#line 37 "parser.y" /* yacc.c:1257  */
+      { block_free(((*yyvaluep).blk)); }
+#line 1932 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 76: /* FuncDef  */
+    case 77: /* FuncDef  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1922 "parser.c" /* yacc.c:1257  */
+#line 1938 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 77: /* Params  */
+    case 78: /* Params  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1928 "parser.c" /* yacc.c:1257  */
+#line 1944 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 78: /* Param  */
+    case 79: /* Param  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1934 "parser.c" /* yacc.c:1257  */
+#line 1950 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 79: /* String  */
+    case 80: /* String  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1940 "parser.c" /* yacc.c:1257  */
+#line 1956 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 82: /* QQString  */
+    case 83: /* QQString  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1946 "parser.c" /* yacc.c:1257  */
+#line 1962 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 83: /* ElseBody  */
+    case 84: /* ElseBody  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1952 "parser.c" /* yacc.c:1257  */
+#line 1968 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 84: /* ExpD  */
+    case 85: /* ExpD  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1958 "parser.c" /* yacc.c:1257  */
+#line 1974 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 85: /* Term  */
+    case 86: /* Term  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1964 "parser.c" /* yacc.c:1257  */
+#line 1980 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 86: /* Args  */
+    case 87: /* Args  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1970 "parser.c" /* yacc.c:1257  */
+#line 1986 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 87: /* Arg  */
+    case 88: /* Arg  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1976 "parser.c" /* yacc.c:1257  */
+#line 1992 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 88: /* Pattern  */
+    case 89: /* Pattern  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1982 "parser.c" /* yacc.c:1257  */
+#line 1998 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 89: /* ArrayPats  */
+    case 90: /* ArrayPats  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1988 "parser.c" /* yacc.c:1257  */
+#line 2004 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 90: /* ObjPats  */
+    case 91: /* ObjPats  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1994 "parser.c" /* yacc.c:1257  */
+#line 2010 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 91: /* ObjPat  */
+    case 92: /* ObjPat  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2000 "parser.c" /* yacc.c:1257  */
+#line 2016 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 92: /* Keyword  */
+    case 93: /* Keyword  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 2006 "parser.c" /* yacc.c:1257  */
+#line 2022 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 93: /* MkDict  */
+    case 94: /* MkDict  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2012 "parser.c" /* yacc.c:1257  */
+#line 2028 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 94: /* MkDictPair  */
+    case 95: /* MkDictPair  */
 #line 37 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 2018 "parser.c" /* yacc.c:1257  */
+#line 2034 "parser.c" /* yacc.c:1257  */
         break;
 
 
@@ -2306,31 +2322,31 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 276 "parser.y" /* yacc.c:1646  */
+#line 286 "parser.y" /* yacc.c:1646  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
 }
-#line 2314 "parser.c" /* yacc.c:1646  */
+#line 2330 "parser.c" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 279 "parser.y" /* yacc.c:1646  */
+#line 289 "parser.y" /* yacc.c:1646  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2322 "parser.c" /* yacc.c:1646  */
+#line 2338 "parser.c" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 284 "parser.y" /* yacc.c:1646  */
+#line 294 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2330 "parser.c" /* yacc.c:1646  */
+#line 2346 "parser.c" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 287 "parser.y" /* yacc.c:1646  */
+#line 297 "parser.y" /* yacc.c:1646  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant");
@@ -2339,366 +2355,366 @@ yyreduce:
     (yyval.blk) = gen_module((yyvsp[-1].blk));
   }
 }
-#line 2343 "parser.c" /* yacc.c:1646  */
+#line 2359 "parser.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 297 "parser.y" /* yacc.c:1646  */
+#line 307 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2351 "parser.c" /* yacc.c:1646  */
+#line 2367 "parser.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 300 "parser.y" /* yacc.c:1646  */
+#line 310 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2359 "parser.c" /* yacc.c:1646  */
+#line 2375 "parser.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 305 "parser.y" /* yacc.c:1646  */
+#line 315 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2367 "parser.c" /* yacc.c:1646  */
+#line 2383 "parser.c" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 308 "parser.y" /* yacc.c:1646  */
+#line 318 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2375 "parser.c" /* yacc.c:1646  */
+#line 2391 "parser.c" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 313 "parser.y" /* yacc.c:1646  */
+#line 323 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2383 "parser.c" /* yacc.c:1646  */
+#line 2399 "parser.c" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 317 "parser.y" /* yacc.c:1646  */
+#line 327 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2391 "parser.c" /* yacc.c:1646  */
+#line 2407 "parser.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 321 "parser.y" /* yacc.c:1646  */
+#line 331 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2399 "parser.c" /* yacc.c:1646  */
+#line 2415 "parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 325 "parser.y" /* yacc.c:1646  */
+#line 335 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2407 "parser.c" /* yacc.c:1646  */
+#line 2423 "parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 329 "parser.y" /* yacc.c:1646  */
+#line 339 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
 }
-#line 2415 "parser.c" /* yacc.c:1646  */
+#line 2431 "parser.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 333 "parser.y" /* yacc.c:1646  */
+#line 343 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2423 "parser.c" /* yacc.c:1646  */
+#line 2439 "parser.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 336 "parser.y" /* yacc.c:1646  */
+#line 346 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "Possibly unterminated 'if' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2432 "parser.c" /* yacc.c:1646  */
+#line 2448 "parser.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 341 "parser.y" /* yacc.c:1646  */
+#line 351 "parser.y" /* yacc.c:1646  */
     {
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4);
   (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk)));
 }
-#line 2441 "parser.c" /* yacc.c:1646  */
+#line 2457 "parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 345 "parser.y" /* yacc.c:1646  */
+#line 355 "parser.y" /* yacc.c:1646  */
     {
   //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK));
   (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
 }
-#line 2450 "parser.c" /* yacc.c:1646  */
+#line 2466 "parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 349 "parser.y" /* yacc.c:1646  */
+#line 359 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "Possibly unterminated 'try' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2459 "parser.c" /* yacc.c:1646  */
+#line 2475 "parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 354 "parser.y" /* yacc.c:1646  */
+#line 364 "parser.y" /* yacc.c:1646  */
     {
   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal)));
   (yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk)));
   jv_free((yyvsp[-2].literal));
   jv_free(v);
 }
-#line 2470 "parser.c" /* yacc.c:1646  */
+#line 2486 "parser.c" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 361 "parser.y" /* yacc.c:1646  */
+#line 371 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
 }
-#line 2478 "parser.c" /* yacc.c:1646  */
+#line 2494 "parser.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 365 "parser.y" /* yacc.c:1646  */
+#line 375 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2486 "parser.c" /* yacc.c:1646  */
+#line 2502 "parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 369 "parser.y" /* yacc.c:1646  */
+#line 379 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2494 "parser.c" /* yacc.c:1646  */
+#line 2510 "parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 373 "parser.y" /* yacc.c:1646  */
+#line 383 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2502 "parser.c" /* yacc.c:1646  */
+#line 2518 "parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 377 "parser.y" /* yacc.c:1646  */
+#line 387 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2510 "parser.c" /* yacc.c:1646  */
+#line 2526 "parser.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 381 "parser.y" /* yacc.c:1646  */
+#line 391 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2518 "parser.c" /* yacc.c:1646  */
+#line 2534 "parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 385 "parser.y" /* yacc.c:1646  */
+#line 395 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2526 "parser.c" /* yacc.c:1646  */
+#line 2542 "parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 389 "parser.y" /* yacc.c:1646  */
+#line 399 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2534 "parser.c" /* yacc.c:1646  */
+#line 2550 "parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 393 "parser.y" /* yacc.c:1646  */
+#line 403 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2542 "parser.c" /* yacc.c:1646  */
+#line 2558 "parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 397 "parser.y" /* yacc.c:1646  */
+#line 407 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2550 "parser.c" /* yacc.c:1646  */
+#line 2566 "parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 401 "parser.y" /* yacc.c:1646  */
+#line 411 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2558 "parser.c" /* yacc.c:1646  */
+#line 2574 "parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 405 "parser.y" /* yacc.c:1646  */
+#line 415 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2566 "parser.c" /* yacc.c:1646  */
+#line 2582 "parser.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 409 "parser.y" /* yacc.c:1646  */
+#line 419 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2574 "parser.c" /* yacc.c:1646  */
+#line 2590 "parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 413 "parser.y" /* yacc.c:1646  */
+#line 423 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2582 "parser.c" /* yacc.c:1646  */
+#line 2598 "parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 417 "parser.y" /* yacc.c:1646  */
+#line 427 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2590 "parser.c" /* yacc.c:1646  */
+#line 2606 "parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 421 "parser.y" /* yacc.c:1646  */
+#line 431 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2598 "parser.c" /* yacc.c:1646  */
+#line 2614 "parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 425 "parser.y" /* yacc.c:1646  */
+#line 435 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/');
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Division by zero?");
 }
-#line 2608 "parser.c" /* yacc.c:1646  */
+#line 2624 "parser.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 431 "parser.y" /* yacc.c:1646  */
+#line 441 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%');
   if (block_is_const_inf((yyval.blk)))
     FAIL((yyloc), "Remainder by zero?");
 }
-#line 2618 "parser.c" /* yacc.c:1646  */
+#line 2634 "parser.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 437 "parser.y" /* yacc.c:1646  */
+#line 447 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2626 "parser.c" /* yacc.c:1646  */
+#line 2642 "parser.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 441 "parser.y" /* yacc.c:1646  */
+#line 451 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2634 "parser.c" /* yacc.c:1646  */
+#line 2650 "parser.c" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 445 "parser.y" /* yacc.c:1646  */
+#line 455 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
 }
-#line 2642 "parser.c" /* yacc.c:1646  */
+#line 2658 "parser.c" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 449 "parser.y" /* yacc.c:1646  */
+#line 459 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
 }
-#line 2650 "parser.c" /* yacc.c:1646  */
+#line 2666 "parser.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 453 "parser.y" /* yacc.c:1646  */
+#line 463 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
 }
-#line 2658 "parser.c" /* yacc.c:1646  */
+#line 2674 "parser.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 457 "parser.y" /* yacc.c:1646  */
+#line 467 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
 }
-#line 2666 "parser.c" /* yacc.c:1646  */
+#line 2682 "parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 461 "parser.y" /* yacc.c:1646  */
+#line 471 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
 }
-#line 2674 "parser.c" /* yacc.c:1646  */
+#line 2690 "parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 465 "parser.y" /* yacc.c:1646  */
+#line 475 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
 }
-#line 2682 "parser.c" /* yacc.c:1646  */
+#line 2698 "parser.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 469 "parser.y" /* yacc.c:1646  */
+#line 479 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2690 "parser.c" /* yacc.c:1646  */
+#line 2706 "parser.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 474 "parser.y" /* yacc.c:1646  */
+#line 484 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2698 "parser.c" /* yacc.c:1646  */
+#line 2714 "parser.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 477 "parser.y" /* yacc.c:1646  */
+#line 487 "parser.y" /* yacc.c:1646  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant");
@@ -2714,11 +2730,11 @@ yyreduce:
     (yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
   }
 }
-#line 2718 "parser.c" /* yacc.c:1646  */
+#line 2734 "parser.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 494 "parser.y" /* yacc.c:1646  */
+#line 504 "parser.y" /* yacc.c:1646  */
     {
   jv v = block_const((yyvsp[-3].blk));
   // XXX Make gen_import take only blocks and the int is_data so we
@@ -2728,11 +2744,11 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2732 "parser.c" /* yacc.c:1646  */
+#line 2748 "parser.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 503 "parser.y" /* yacc.c:1646  */
+#line 513 "parser.y" /* yacc.c:1646  */
     {
   jv v = block_const((yyvsp[-2].blk));
   (yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 0);
@@ -2740,184 +2756,198 @@ yyreduce:
   jv_free((yyvsp[0].literal));
   jv_free(v);
 }
-#line 2744 "parser.c" /* yacc.c:1646  */
+#line 2760 "parser.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 510 "parser.y" /* yacc.c:1646  */
+#line 520 "parser.y" /* yacc.c:1646  */
     {
   jv v = block_const((yyvsp[0].blk));
   (yyval.blk) = gen_import(jv_string_value(v), NULL, 0);
   block_free((yyvsp[0].blk));
   jv_free(v);
 }
-#line 2755 "parser.c" /* yacc.c:1646  */
+#line 2771 "parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 518 "parser.y" /* yacc.c:1646  */
+#line 528 "parser.y" /* yacc.c:1646  */
+    {
+  if (!block_is_const((yyvsp[0].blk))) {
+    FAIL((yyloc), "Import path must be constant");
+    (yyval.blk) = gen_const(jv_string(""));
+    block_free((yyvsp[0].blk));
+  } else {
+    (yyval.blk) = (yyvsp[0].blk);
+  }
+}
+#line 2785 "parser.c" /* yacc.c:1646  */
+    break;
+
+  case 54:
+#line 539 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 2764 "parser.c" /* yacc.c:1646  */
+#line 2794 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 523 "parser.y" /* yacc.c:1646  */
+  case 55:
+#line 544 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-6].literal));
 }
-#line 2773 "parser.c" /* yacc.c:1646  */
+#line 2803 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 529 "parser.y" /* yacc.c:1646  */
+  case 56:
+#line 550 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2781 "parser.c" /* yacc.c:1646  */
+#line 2811 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 532 "parser.y" /* yacc.c:1646  */
+  case 57:
+#line 553 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2789 "parser.c" /* yacc.c:1646  */
+#line 2819 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 537 "parser.y" /* yacc.c:1646  */
+  case 58:
+#line 558 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2798 "parser.c" /* yacc.c:1646  */
+#line 2828 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 542 "parser.y" /* yacc.c:1646  */
+  case 59:
+#line 563 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2807 "parser.c" /* yacc.c:1646  */
+#line 2837 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 549 "parser.y" /* yacc.c:1646  */
+  case 60:
+#line 570 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = jv_string("text"); }
-#line 2813 "parser.c" /* yacc.c:1646  */
+#line 2843 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 549 "parser.y" /* yacc.c:1646  */
+  case 61:
+#line 570 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2822 "parser.c" /* yacc.c:1646  */
+#line 2852 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 553 "parser.y" /* yacc.c:1646  */
+  case 62:
+#line 574 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[-1].literal); }
-#line 2828 "parser.c" /* yacc.c:1646  */
+#line 2858 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 553 "parser.y" /* yacc.c:1646  */
+  case 63:
+#line 574 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2837 "parser.c" /* yacc.c:1646  */
+#line 2867 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 560 "parser.y" /* yacc.c:1646  */
+  case 64:
+#line 581 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_const(jv_string(""));
 }
-#line 2845 "parser.c" /* yacc.c:1646  */
+#line 2875 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 563 "parser.y" /* yacc.c:1646  */
+  case 65:
+#line 584 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
 }
-#line 2853 "parser.c" /* yacc.c:1646  */
+#line 2883 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 566 "parser.y" /* yacc.c:1646  */
+  case 66:
+#line 587 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
 }
-#line 2861 "parser.c" /* yacc.c:1646  */
+#line 2891 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 572 "parser.y" /* yacc.c:1646  */
+  case 67:
+#line 593 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2869 "parser.c" /* yacc.c:1646  */
+#line 2899 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 67:
-#line 575 "parser.y" /* yacc.c:1646  */
+  case 68:
+#line 596 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2877 "parser.c" /* yacc.c:1646  */
+#line 2907 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 580 "parser.y" /* yacc.c:1646  */
+  case 69:
+#line 601 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2885 "parser.c" /* yacc.c:1646  */
+#line 2915 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 583 "parser.y" /* yacc.c:1646  */
+  case 70:
+#line 604 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2893 "parser.c" /* yacc.c:1646  */
+#line 2923 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 586 "parser.y" /* yacc.c:1646  */
+  case 71:
+#line 607 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2901 "parser.c" /* yacc.c:1646  */
+#line 2931 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 71:
-#line 592 "parser.y" /* yacc.c:1646  */
+  case 72:
+#line 613 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2909 "parser.c" /* yacc.c:1646  */
+#line 2939 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 72:
-#line 595 "parser.y" /* yacc.c:1646  */
+  case 73:
+#line 616 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("recurse", gen_noop());
 }
-#line 2917 "parser.c" /* yacc.c:1646  */
+#line 2947 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 73:
-#line 598 "parser.y" /* yacc.c:1646  */
+  case 74:
+#line 619 "parser.y" /* yacc.c:1646  */
     {
   jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal)));     // impossible symbol
   (yyval.blk) = gen_location((yyloc), locations,
@@ -2926,231 +2956,231 @@ yyreduce:
   jv_free(v);
   jv_free((yyvsp[0].literal));
 }
-#line 2930 "parser.c" /* yacc.c:1646  */
+#line 2960 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 606 "parser.y" /* yacc.c:1646  */
+  case 75:
+#line 627 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "break requires a label to break to");
   (yyval.blk) = gen_noop();
 }
-#line 2939 "parser.c" /* yacc.c:1646  */
+#line 2969 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 75:
-#line 610 "parser.y" /* yacc.c:1646  */
+  case 76:
+#line 631 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
 }
-#line 2947 "parser.c" /* yacc.c:1646  */
+#line 2977 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 76:
-#line 613 "parser.y" /* yacc.c:1646  */
+  case 77:
+#line 634 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
 }
-#line 2955 "parser.c" /* yacc.c:1646  */
+#line 2985 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 77:
-#line 616 "parser.y" /* yacc.c:1646  */
+  case 78:
+#line 637 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2963 "parser.c" /* yacc.c:1646  */
+#line 2993 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 619 "parser.y" /* yacc.c:1646  */
+  case 79:
+#line 640 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
 }
-#line 2971 "parser.c" /* yacc.c:1646  */
+#line 3001 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 622 "parser.y" /* yacc.c:1646  */
+  case 80:
+#line 643 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
 }
-#line 2979 "parser.c" /* yacc.c:1646  */
+#line 3009 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 625 "parser.y" /* yacc.c:1646  */
+  case 81:
+#line 646 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
 }
-#line 2987 "parser.c" /* yacc.c:1646  */
+#line 3017 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 628 "parser.y" /* yacc.c:1646  */
+  case 82:
+#line 649 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2995 "parser.c" /* yacc.c:1646  */
+#line 3025 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 631 "parser.y" /* yacc.c:1646  */
+  case 83:
+#line 652 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
 }
-#line 3003 "parser.c" /* yacc.c:1646  */
+#line 3033 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 634 "parser.y" /* yacc.c:1646  */
+  case 84:
+#line 655 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3012 "parser.c" /* yacc.c:1646  */
+#line 3042 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 638 "parser.y" /* yacc.c:1646  */
+  case 85:
+#line 659 "parser.y" /* yacc.c:1646  */
     {
   jv_free((yyvsp[-1].literal));
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 3022 "parser.c" /* yacc.c:1646  */
+#line 3052 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 644 "parser.y" /* yacc.c:1646  */
+  case 86:
+#line 665 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
 }
-#line 3030 "parser.c" /* yacc.c:1646  */
+#line 3060 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 647 "parser.y" /* yacc.c:1646  */
+  case 87:
+#line 668 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 3038 "parser.c" /* yacc.c:1646  */
+#line 3068 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 650 "parser.y" /* yacc.c:1646  */
+  case 88:
+#line 671 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
 }
-#line 3046 "parser.c" /* yacc.c:1646  */
+#line 3076 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 653 "parser.y" /* yacc.c:1646  */
+  case 89:
+#line 674 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
 }
-#line 3054 "parser.c" /* yacc.c:1646  */
+#line 3084 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 656 "parser.y" /* yacc.c:1646  */
+  case 90:
+#line 677 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3062 "parser.c" /* yacc.c:1646  */
+#line 3092 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 659 "parser.y" /* yacc.c:1646  */
+  case 91:
+#line 680 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
 }
-#line 3070 "parser.c" /* yacc.c:1646  */
+#line 3100 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 662 "parser.y" /* yacc.c:1646  */
+  case 92:
+#line 683 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 3078 "parser.c" /* yacc.c:1646  */
+#line 3108 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 665 "parser.y" /* yacc.c:1646  */
+  case 93:
+#line 686 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
 }
-#line 3086 "parser.c" /* yacc.c:1646  */
+#line 3116 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 668 "parser.y" /* yacc.c:1646  */
+  case 94:
+#line 689 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
 }
-#line 3094 "parser.c" /* yacc.c:1646  */
+#line 3124 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 671 "parser.y" /* yacc.c:1646  */
+  case 95:
+#line 692 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
 }
-#line 3102 "parser.c" /* yacc.c:1646  */
+#line 3132 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 674 "parser.y" /* yacc.c:1646  */
+  case 96:
+#line 695 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_const((yyvsp[0].literal));
 }
-#line 3110 "parser.c" /* yacc.c:1646  */
+#line 3140 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 677 "parser.y" /* yacc.c:1646  */
+  case 97:
+#line 698 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3118 "parser.c" /* yacc.c:1646  */
+#line 3148 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 680 "parser.y" /* yacc.c:1646  */
+  case 98:
+#line 701 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
 }
-#line 3126 "parser.c" /* yacc.c:1646  */
+#line 3156 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 683 "parser.y" /* yacc.c:1646  */
+  case 99:
+#line 704 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 3134 "parser.c" /* yacc.c:1646  */
+#line 3164 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 686 "parser.y" /* yacc.c:1646  */
+  case 100:
+#line 707 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_collect((yyvsp[-1].blk));
 }
-#line 3142 "parser.c" /* yacc.c:1646  */
+#line 3172 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 689 "parser.y" /* yacc.c:1646  */
+  case 101:
+#line 710 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_const(jv_array());
 }
-#line 3150 "parser.c" /* yacc.c:1646  */
+#line 3180 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 692 "parser.y" /* yacc.c:1646  */
+  case 102:
+#line 713 "parser.y" /* yacc.c:1646  */
     {
   block o = gen_const_object((yyvsp[-1].blk));
   if (o.first != NULL)
@@ -3158,29 +3188,29 @@ yyreduce:
   else
     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3162 "parser.c" /* yacc.c:1646  */
+#line 3192 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 699 "parser.y" /* yacc.c:1646  */
+  case 103:
+#line 720 "parser.y" /* yacc.c:1646  */
     {
   (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 3171 "parser.c" /* yacc.c:1646  */
+#line 3201 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 703 "parser.y" /* yacc.c:1646  */
+  case 104:
+#line 724 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
   jv_free((yyvsp[0].literal));
 }
-#line 3180 "parser.c" /* yacc.c:1646  */
+#line 3210 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 707 "parser.y" /* yacc.c:1646  */
+  case 105:
+#line 728 "parser.y" /* yacc.c:1646  */
     {
   const char *s = jv_string_value((yyvsp[0].literal));
   if (strcmp(s, "false") == 0)
@@ -3193,409 +3223,409 @@ yyreduce:
     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
   jv_free((yyvsp[0].literal));
 }
-#line 3197 "parser.c" /* yacc.c:1646  */
+#line 3227 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 719 "parser.y" /* yacc.c:1646  */
+  case 106:
+#line 740 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call(jv_string_value((yyvsp[-3].literal)), (yyvsp[-1].blk));
   (yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk));
   jv_free((yyvsp[-3].literal));
 }
-#line 3207 "parser.c" /* yacc.c:1646  */
+#line 3237 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 724 "parser.y" /* yacc.c:1646  */
+  case 107:
+#line 745 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3213 "parser.c" /* yacc.c:1646  */
+#line 3243 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 725 "parser.y" /* yacc.c:1646  */
+  case 108:
+#line 746 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3219 "parser.c" /* yacc.c:1646  */
+#line 3249 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 726 "parser.y" /* yacc.c:1646  */
+  case 109:
+#line 747 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[-3].blk); }
-#line 3225 "parser.c" /* yacc.c:1646  */
+#line 3255 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 727 "parser.y" /* yacc.c:1646  */
+  case 110:
+#line 748 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3231 "parser.c" /* yacc.c:1646  */
+#line 3261 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 730 "parser.y" /* yacc.c:1646  */
+  case 111:
+#line 751 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3239 "parser.c" /* yacc.c:1646  */
+#line 3269 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 733 "parser.y" /* yacc.c:1646  */
+  case 112:
+#line 754 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3247 "parser.c" /* yacc.c:1646  */
+#line 3277 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 738 "parser.y" /* yacc.c:1646  */
+  case 113:
+#line 759 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_lambda((yyvsp[0].blk));
 }
-#line 3255 "parser.c" /* yacc.c:1646  */
+#line 3285 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 743 "parser.y" /* yacc.c:1646  */
+  case 114:
+#line 764 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 3264 "parser.c" /* yacc.c:1646  */
+#line 3294 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 747 "parser.y" /* yacc.c:1646  */
+  case 115:
+#line 768 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3272 "parser.c" /* yacc.c:1646  */
+#line 3302 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 750 "parser.y" /* yacc.c:1646  */
+  case 116:
+#line 771 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3280 "parser.c" /* yacc.c:1646  */
+#line 3310 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 755 "parser.y" /* yacc.c:1646  */
+  case 117:
+#line 776 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk));
 }
-#line 3288 "parser.c" /* yacc.c:1646  */
+#line 3318 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 758 "parser.y" /* yacc.c:1646  */
+  case 118:
+#line 779 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3296 "parser.c" /* yacc.c:1646  */
+#line 3326 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 763 "parser.y" /* yacc.c:1646  */
+  case 119:
+#line 784 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3304 "parser.c" /* yacc.c:1646  */
+#line 3334 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 766 "parser.y" /* yacc.c:1646  */
+  case 120:
+#line 787 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3312 "parser.c" /* yacc.c:1646  */
+#line 3342 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 771 "parser.y" /* yacc.c:1646  */
+  case 121:
+#line 792 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))));
 }
-#line 3320 "parser.c" /* yacc.c:1646  */
+#line 3350 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 774 "parser.y" /* yacc.c:1646  */
+  case 122:
+#line 795 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3328 "parser.c" /* yacc.c:1646  */
+#line 3358 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 777 "parser.y" /* yacc.c:1646  */
+  case 123:
+#line 798 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
 }
-#line 3336 "parser.c" /* yacc.c:1646  */
+#line 3366 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 780 "parser.y" /* yacc.c:1646  */
+  case 124:
+#line 801 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3344 "parser.c" /* yacc.c:1646  */
+#line 3374 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 783 "parser.y" /* yacc.c:1646  */
+  case 125:
+#line 804 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk));
 }
-#line 3352 "parser.c" /* yacc.c:1646  */
+#line 3382 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 788 "parser.y" /* yacc.c:1646  */
+  case 126:
+#line 809 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("as");
 }
-#line 3360 "parser.c" /* yacc.c:1646  */
+#line 3390 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 791 "parser.y" /* yacc.c:1646  */
+  case 127:
+#line 812 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("def");
 }
-#line 3368 "parser.c" /* yacc.c:1646  */
+#line 3398 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 794 "parser.y" /* yacc.c:1646  */
+  case 128:
+#line 815 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("module");
 }
-#line 3376 "parser.c" /* yacc.c:1646  */
+#line 3406 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 797 "parser.y" /* yacc.c:1646  */
+  case 129:
+#line 818 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("import");
 }
-#line 3384 "parser.c" /* yacc.c:1646  */
+#line 3414 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 800 "parser.y" /* yacc.c:1646  */
+  case 130:
+#line 821 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("include");
 }
-#line 3392 "parser.c" /* yacc.c:1646  */
+#line 3422 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 803 "parser.y" /* yacc.c:1646  */
+  case 131:
+#line 824 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("if");
 }
-#line 3400 "parser.c" /* yacc.c:1646  */
+#line 3430 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 806 "parser.y" /* yacc.c:1646  */
+  case 132:
+#line 827 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("then");
 }
-#line 3408 "parser.c" /* yacc.c:1646  */
+#line 3438 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 809 "parser.y" /* yacc.c:1646  */
+  case 133:
+#line 830 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("else");
 }
-#line 3416 "parser.c" /* yacc.c:1646  */
+#line 3446 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 812 "parser.y" /* yacc.c:1646  */
+  case 134:
+#line 833 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("elif");
 }
-#line 3424 "parser.c" /* yacc.c:1646  */
+#line 3454 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 815 "parser.y" /* yacc.c:1646  */
+  case 135:
+#line 836 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("reduce");
 }
-#line 3432 "parser.c" /* yacc.c:1646  */
+#line 3462 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 818 "parser.y" /* yacc.c:1646  */
+  case 136:
+#line 839 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("foreach");
 }
-#line 3440 "parser.c" /* yacc.c:1646  */
+#line 3470 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 821 "parser.y" /* yacc.c:1646  */
+  case 137:
+#line 842 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("end");
 }
-#line 3448 "parser.c" /* yacc.c:1646  */
+#line 3478 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 824 "parser.y" /* yacc.c:1646  */
+  case 138:
+#line 845 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("and");
 }
-#line 3456 "parser.c" /* yacc.c:1646  */
+#line 3486 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 827 "parser.y" /* yacc.c:1646  */
+  case 139:
+#line 848 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("or");
 }
-#line 3464 "parser.c" /* yacc.c:1646  */
+#line 3494 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 830 "parser.y" /* yacc.c:1646  */
+  case 140:
+#line 851 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("try");
 }
-#line 3472 "parser.c" /* yacc.c:1646  */
+#line 3502 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 833 "parser.y" /* yacc.c:1646  */
+  case 141:
+#line 854 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("catch");
 }
-#line 3480 "parser.c" /* yacc.c:1646  */
+#line 3510 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 836 "parser.y" /* yacc.c:1646  */
+  case 142:
+#line 857 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("label");
 }
-#line 3488 "parser.c" /* yacc.c:1646  */
+#line 3518 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 142:
-#line 839 "parser.y" /* yacc.c:1646  */
+  case 143:
+#line 860 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("break");
 }
-#line 3496 "parser.c" /* yacc.c:1646  */
+#line 3526 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 143:
-#line 842 "parser.y" /* yacc.c:1646  */
+  case 144:
+#line 863 "parser.y" /* yacc.c:1646  */
     {
   (yyval.literal) = jv_string("__loc__");
 }
-#line 3504 "parser.c" /* yacc.c:1646  */
+#line 3534 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 144:
-#line 847 "parser.y" /* yacc.c:1646  */
+  case 145:
+#line 868 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk)=gen_noop();
 }
-#line 3512 "parser.c" /* yacc.c:1646  */
+#line 3542 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 850 "parser.y" /* yacc.c:1646  */
+  case 146:
+#line 871 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3518 "parser.c" /* yacc.c:1646  */
+#line 3548 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 146:
-#line 851 "parser.y" /* yacc.c:1646  */
+  case 147:
+#line 872 "parser.y" /* yacc.c:1646  */
     { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
-#line 3524 "parser.c" /* yacc.c:1646  */
+#line 3554 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 852 "parser.y" /* yacc.c:1646  */
+  case 148:
+#line 873 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3530 "parser.c" /* yacc.c:1646  */
+#line 3560 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 148:
-#line 855 "parser.y" /* yacc.c:1646  */
+  case 149:
+#line 876 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
  }
-#line 3538 "parser.c" /* yacc.c:1646  */
+#line 3568 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 858 "parser.y" /* yacc.c:1646  */
+  case 150:
+#line 879 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
   }
-#line 3546 "parser.c" /* yacc.c:1646  */
+#line 3576 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 861 "parser.y" /* yacc.c:1646  */
+  case 151:
+#line 882 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
   }
-#line 3554 "parser.c" /* yacc.c:1646  */
+#line 3584 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 864 "parser.y" /* yacc.c:1646  */
+  case 152:
+#line 885 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[0].blk), BLOCK(gen_op_simple(POP), gen_op_simple(DUP2),
                               gen_op_simple(DUP2), gen_op_simple(INDEX)));
   }
-#line 3563 "parser.c" /* yacc.c:1646  */
+#line 3593 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 868 "parser.y" /* yacc.c:1646  */
+  case 153:
+#line 889 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
                     gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
   }
-#line 3572 "parser.c" /* yacc.c:1646  */
+#line 3602 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 872 "parser.y" /* yacc.c:1646  */
+  case 154:
+#line 893 "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 3581 "parser.c" /* yacc.c:1646  */
+#line 3611 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 876 "parser.y" /* yacc.c:1646  */
+  case 155:
+#line 897 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
   }
-#line 3589 "parser.c" /* yacc.c:1646  */
+#line 3619 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 879 "parser.y" /* yacc.c:1646  */
+  case 156:
+#line 900 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3595 "parser.c" /* yacc.c:1646  */
+#line 3625 "parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3599 "parser.c" /* yacc.c:1646  */
+#line 3629 "parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3830,7 +3860,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 880 "parser.y" /* yacc.c:1906  */
+#line 901 "parser.y" /* yacc.c:1906  */
 
 
 int jq_parse(struct locfile* locations, block* answer) {
index 45009c29959bc7df42e25fb9936530137a6532ca..2b30cb68868d409f969a7e100de7c84c4e453772 100644 (file)
--- a/parser.y
+++ b/parser.y
@@ -112,7 +112,7 @@ struct lexer_param;
 
 
 %type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString String
-%type <blk> FuncDef FuncDefs Import Imports ImportWhat Param Params
+%type <blk> FuncDef FuncDefs Import Imports ImportWhat ImportFrom Param Params
 %type <blk> Arg Args Module Pattern ArrayPats ObjPats ObjPat
 %type <literal> Keyword
 %{
@@ -186,6 +186,16 @@ static block constant_fold(block a, block b, int op) {
   if (!block_is_single(a) || !block_is_const(a) ||
       !block_is_single(b) || !block_is_const(b))
     return gen_noop();
+  if (op == '+') {
+    if (block_const_kind(a) == JV_KIND_NULL) {
+      block_free(a);
+      return b;
+    }
+    if (block_const_kind(b) == JV_KIND_NULL) {
+      block_free(b);
+      return a;
+    }
+  }
   if (block_const_kind(a) != block_const_kind(b))
     return gen_noop();
 
@@ -491,7 +501,7 @@ ImportWhat Exp ';' {
 }
 
 ImportWhat:
-"import" String "as" '$' IDENT {
+"import" ImportFrom "as" '$' IDENT {
   jv v = block_const($2);
   // XXX Make gen_import take only blocks and the int is_data so we
   // don't have to free so much stuff here
@@ -500,20 +510,31 @@ ImportWhat:
   jv_free($5);
   jv_free(v);
 } |
-"import" String "as" IDENT {
+"import" ImportFrom "as" IDENT {
   jv v = block_const($2);
   $$ = gen_import(jv_string_value(v), jv_string_value($4), 0);
   block_free($2);
   jv_free($4);
   jv_free(v);
 } |
-"include" String {
+"include" ImportFrom {
   jv v = block_const($2);
   $$ = gen_import(jv_string_value(v), NULL, 0);
   block_free($2);
   jv_free(v);
 }
 
+ImportFrom:
+String {
+  if (!block_is_const($1)) {
+    FAIL(@$, "Import path must be constant");
+    $$ = gen_const(jv_string(""));
+    block_free($1);
+  } else {
+    $$ = $1;
+  }
+}
+
 FuncDef:
 "def" IDENT ':' Exp ';' {
   $$ = gen_function(jv_string_value($2), gen_noop(), $4);
index e93729db1b9ebe7a1c818362714fc7671ea82356..e92be31efb43692b9770f10b72a8266058b0be61 100644 (file)
@@ -1189,6 +1189,14 @@ jq: error: Module metadata must be constant at <top-level>, line 1:
 include "a" []; 0
 jq: error: Module metadata must be an object at <top-level>, line 1:
 
+%%FAIL
+include "\ "; 0
+jq: error: Invalid escape at line 1, column 4 (while parsing '"\ "') at <top-level>, line 1:
+
+%%FAIL
+include "\(a)"; 0
+jq: error: Import path must be constant at <top-level>, line 1:
+
 modulemeta
 "c"
 {"whatever":null,"deps":[{"as":"foo","is_data":false,"relpath":"a"},{"search":"./","as":"d","is_data":false,"relpath":"d"},{"search":"./","as":"d2","is_data":false,"relpath":"d"},{"search":"./../lib/jq","as":"e","is_data":false,"relpath":"e"},{"search":"./../lib/jq","as":"f","is_data":false,"relpath":"f"},{"as":"d","is_data":true,"relpath":"data"}]}