]> granicus.if.org Git - jq/commitdiff
Add `$__loc__` (fix #740)
authorNicolas Williams <nico@cryptonector.com>
Mon, 30 Mar 2015 20:55:54 +0000 (15:55 -0500)
committerNicolas Williams <nico@cryptonector.com>
Tue, 31 Mar 2015 03:36:04 +0000 (22:36 -0500)
docs/content/3.manual/manual.yml
lexer.c
lexer.h
lexer.l
locfile.c
locfile.h
parser.c
parser.h
parser.y
tests/all.test

index 1041f2ca3122caf4d4f1572d9146f721a414b98f..931aeb98f4e774e808648714f153e8c3759c68bb 100644 (file)
@@ -804,6 +804,18 @@ sections:
           null and objects would, but with the given message as the
           error's value.
 
+      - title: "`$__loc__`"
+        body: |
+
+          Produces an object with a "file" key and a "line" key, with
+          the filename and line number where `$__loc__` occurs, as
+          values.
+
+        examples:
+          - program: 'try error("\($__loc__)") catch .'
+            input: 'null'
+            output: ['"{\"file\":\"<top-level>\",\"line\":1}"']
+
       - title: "`map(x)`, `map_values(x)`"
         body: |
 
diff --git a/lexer.c b/lexer.c
index 7350fe5978429ef4c2f517014e8726c9010bc791..c71dc234e17aa0218902c2f8a76f83691dccc0e7 100644 (file)
--- a/lexer.c
+++ b/lexer.c
@@ -358,8 +358,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 47
-#define YY_END_OF_BUFFER 48
+#define YY_NUM_RULES 48
+#define YY_END_OF_BUFFER 49
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -367,23 +367,24 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[141] =
+static yyconst flex_int16_t yy_accept[148] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   48,   46,   45,   45,   46,   37,    1,   32,
-       32,   33,   34,   32,   32,   32,   32,   32,   36,   32,
-       32,   32,   46,   43,   43,   43,   43,   43,   43,   43,
-       43,   43,   43,   43,   43,   43,   32,   41,   41,   39,
-       42,   45,    2,    1,   27,   25,   23,   24,   31,   36,
-       44,   44,   17,   26,    0,   29,    3,   30,   35,   43,
-        0,   43,    4,   43,   43,   43,   43,   43,   43,    8,
-       43,   43,   43,   13,   43,   43,   43,   22,   41,   40,
-       38,   40,   44,    0,   36,   28,   36,    0,   12,   43,
-
-       43,    7,   43,   43,   14,   43,   43,   43,   43,   43,
-       43,   18,    0,   40,   43,   43,   43,   11,   10,   43,
-       43,   43,   43,   43,    9,   40,   21,   19,   43,   43,
-       20,   43,   43,   40,   43,    5,    6,   15,   16,    0
+        0,    0,   49,   47,   46,   46,   47,   38,    1,   33,
+       33,   34,   35,   33,   33,   33,   33,   33,   37,   33,
+       33,   33,   47,   44,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   33,   42,   42,
+       40,   43,   46,    2,    1,   28,   26,   24,   25,   32,
+       37,   45,   45,   17,   27,    0,   30,    3,   31,   36,
+       44,    0,   44,   44,    4,   44,   44,   44,   44,   44,
+       44,    8,   44,   44,   44,   13,   44,   44,   44,   23,
+       42,   41,   39,   41,   45,    0,   37,   29,   37,    0,
+
+       44,   12,   44,   44,    7,   44,   44,   14,   44,   44,
+       44,   44,   44,   44,   18,    0,   41,   44,   44,   44,
+       44,   11,   10,   44,   44,   44,   44,   44,    9,   41,
+       44,   21,   19,   44,   44,   20,   44,   44,   41,   44,
+       44,    5,    6,   15,   22,   16,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -428,130 +429,132 @@ static yyconst flex_int32_t yy_meta[54] =
         1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[154] =
+static yyconst flex_int16_t yy_base[161] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       51,   52,  293,  294,   57,   59,  270,  294,    0,  294,
-      269,  294,  294,  268,  267,  266,   47,   47,   50,  265,
-      264,  263,    0,  265,   48,   51,   52,   37,   53,   56,
-       66,   57,   60,   59,   63,   68,  261,    0,    0,  294,
-       78,   90,  294,    0,  294,  294,  294,  294,   93,   94,
-        0,  100,  260,  294,  104,  294,  294,  294,    0,  262,
-      259,   88,  255,   97,   83,  105,  106,  109,  113,  251,
-      107,  115,  116,  248,  119,  120,  117,  294,    0,  234,
-      294,  231,    0,  240,  228,  294,  223,    0,  218,  118,
-
-      121,  213,  124,  122,  211,  127,  128,  130,  138,  141,
-      143,  208,  154,  196,  196,  149,  146,  183,  182,  150,
-      151,  152,  154,  157,  181,  165,  169,  166,  158,  156,
-      164,  160,  162,  149,  161,  155,   82,   79,   71,  294,
-      204,  213,  219,  224,  229,  238,  247,  252,  257,  259,
-      264,  268,  272
+       51,   52,  306,  307,   57,   59,  283,  307,    0,  307,
+      282,  307,  307,  281,  280,  279,   47,   47,   50,  278,
+      277,  276,    0,  278,   48,   51,   53,   52,   37,   59,
+       57,   66,   56,   63,   68,   70,   71,  274,    0,    0,
+      307,   81,   90,  307,    0,  307,  307,  307,  307,   95,
+      100,    0,   97,  273,  307,  106,  307,  307,  307,    0,
+      275,  274,   85,  104,  273,  101,   77,  109,  110,  113,
+      114,  272,  116,  119,  115,  271,  121,  122,  123,  307,
+        0,  258,  307,  254,    0,  261,  258,  307,  254,    0,
+
+      124,  250,  132,  125,  248,  126,  134,  236,  135,  128,
+      143,  136,  146,  147,  231,  157,  217,  222,  150,  156,
+      155,  220,  217,  157,  158,  159,  161,  163,  215,  195,
+      167,  193,  192,  169,  162,  188,  172,  173,  176,  168,
+      175,  182,  164,   86,   78,   76,  307,  213,  222,  228,
+      233,  238,  247,  256,  261,  266,  268,  273,  277,  281
     } ;
 
-static yyconst flex_int16_t yy_def[154] =
+static yyconst flex_int16_t yy_def[161] =
     {   0,
-      140,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-      141,  141,  140,  140,  140,  140,  140,  140,  142,  140,
-      140,  140,  140,  140,  140,  140,  143,  140,  140,  140,
-      140,  140,  144,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  140,  146,  146,  140,
-      147,  140,  140,  142,  140,  140,  140,  140,  140,  140,
-      148,  148,  140,  140,  140,  140,  140,  140,  144,  145,
-      140,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  140,  146,  140,
-      140,  149,  148,  140,  148,  140,  140,  150,  145,  145,
-
-      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
-      145,  145,  147,  151,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  152,  145,  145,  145,  145,
-      145,  145,  145,  153,  145,  145,  145,  145,  145,    0,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140
+      147,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+      148,  148,  147,  147,  147,  147,  147,  147,  149,  147,
+      147,  147,  147,  147,  147,  147,  150,  147,  147,  147,
+      147,  147,  151,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  147,  153,  153,
+      147,  154,  147,  147,  149,  147,  147,  147,  147,  147,
+      147,  155,  155,  147,  147,  147,  147,  147,  147,  151,
+      152,  147,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  147,
+      153,  147,  147,  156,  155,  147,  155,  147,  147,  157,
+
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  152,  152,  152,  152,  154,  158,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  159,
+      152,  152,  152,  152,  152,  152,  152,  152,  160,  152,
+      152,  152,  152,  152,  152,  152,    0,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147
     } ;
 
-static yyconst flex_int16_t yy_nxt[348] =
+static yyconst flex_int16_t yy_nxt[361] =
     {   0,
        14,   15,   16,   14,   17,   18,   19,   20,   21,   22,
        23,   24,   25,   20,   26,   27,   28,   29,   20,   20,
        30,   31,   32,   20,   33,   34,   34,   22,   14,   23,
-       34,   35,   36,   37,   38,   39,   40,   34,   41,   34,
-       42,   43,   34,   44,   34,   45,   34,   46,   34,   34,
-       22,   47,   23,   49,   49,   71,   50,   50,   52,   52,
-       52,   52,   59,   63,   60,   60,   71,   60,   64,   71,
-       71,   71,   76,   62,   71,   71,   65,   71,   71,   51,
-       51,   71,   62,   75,   71,   65,   71,   91,   82,   71,
-       72,   52,   52,   77,   73,   78,   74,   71,   85,   79,
-
-       71,   71,   80,   83,   84,   86,   71,   81,   60,   60,
-       60,   60,   94,   87,   94,   71,   94,   95,   94,   65,
-       65,   97,   99,   71,   71,   71,   92,   71,   65,   65,
-      101,   71,  100,   71,   71,   71,   71,   71,   71,   71,
-       71,  102,   71,  105,  103,   71,   71,  108,   71,  116,
-      109,  107,  104,  110,  117,  111,   71,  119,  106,   71,
-      118,   71,  120,  140,   71,  122,  112,   71,   71,   71,
-       71,  121,   71,   71,   71,   71,   71,  113,   71,   71,
-       71,  129,   71,  128,   71,  125,  123,   71,  127,  124,
-      133,  135,  131,  113,  132,  137,  130,  138,  139,   71,
-
-       71,   71,   92,  136,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   54,   71,   54,   54,   54,   54,   54,
-       54,   54,   61,   61,  113,   61,   71,   61,   69,   71,
-       69,   71,   69,   70,   70,   70,   71,   70,   89,   89,
-       97,   89,   89,   89,   89,   95,   89,   90,   90,   90,
-       90,   90,   90,   90,   90,   90,   93,   97,   93,  113,
-       93,  114,  113,  114,  114,  115,   71,  115,  126,   71,
-      126,  126,  134,   71,  134,  134,   90,   98,   90,   90,
-       71,   96,   88,   71,   68,   67,   66,   58,   57,   56,
-       55,   53,  140,   13,  140,  140,  140,  140,  140,  140,
-
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140
+       35,   36,   37,   38,   39,   40,   41,   34,   42,   34,
+       43,   44,   34,   45,   34,   46,   34,   47,   34,   34,
+       22,   48,   23,   50,   50,   72,   51,   51,   53,   53,
+       53,   53,   60,   64,   61,   61,   72,   61,   65,   72,
+       72,   72,   78,   63,   72,   72,   66,   72,   73,   52,
+       52,   72,   63,   77,   72,   66,   72,   84,   72,   72,
+       93,   53,   53,   74,   72,   72,   72,   75,   76,   79,
+
+       81,   80,   82,   72,   72,   87,   85,   83,   88,   96,
+       61,   96,   61,   86,   97,   61,   89,   61,   96,   72,
+       96,   66,   72,   99,  104,  101,   66,   72,   72,   94,
+       66,   72,   72,   72,   72,   66,  103,   72,  102,   72,
+       72,   72,   72,   72,   72,  105,   72,  108,  106,  112,
+       72,  111,   72,   72,   72,  113,  107,  114,  121,  109,
+      110,   72,  122,  120,   72,   72,  147,  119,   72,  123,
+      124,  125,  115,   72,   72,   72,   72,   72,  126,   72,
+       72,   72,   72,  131,  127,   72,   72,   72,  134,  129,
+       72,   72,  133,   72,  128,  132,  138,  140,  145,  136,
+
+       72,  137,  141,  135,  116,   94,   72,  143,  144,  142,
+       72,   72,  146,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   55,  116,   55,   55,   55,   55,   55,   55,
+       55,   62,   62,   72,   62,   72,   62,   70,   72,   70,
+       72,   70,   71,   71,   71,  116,   71,   91,   91,   72,
+       91,   91,   91,   91,   72,   91,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   95,   72,   95,   72,   95,
+      117,   99,  117,  117,  118,   97,  118,  130,   99,  130,
+      130,  139,  116,  139,  139,   92,  116,   92,   92,   72,
+       72,   72,  100,   72,   98,   90,   72,   69,   68,   67,
+
+       59,   58,   57,   56,   54,  147,   13,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147
     } ;
 
-static yyconst flex_int16_t yy_chk[348] =
+static yyconst flex_int16_t yy_chk[361] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,   11,   12,   38,   11,   12,   15,   15,
+        1,    1,    1,   11,   12,   39,   11,   12,   15,   15,
        16,   16,   27,   28,   27,   29,   35,   29,   28,   36,
-       37,   39,   38,   27,   40,   42,   29,   44,   43,   11,
-       12,   45,   27,   37,   41,   29,   46,   51,   42,  139,
-       35,   52,   52,   39,   35,   39,   36,  138,   45,   40,
-
-      137,   75,   41,   43,   44,   46,   72,   41,   59,   60,
-       59,   60,   62,   46,   62,   74,   65,   62,   65,   59,
-       60,   65,   72,   76,   77,   81,   51,   78,   59,   60,
-       75,   79,   74,   82,   83,   87,  100,   85,   86,  101,
-      104,   76,  103,   78,   77,  106,  107,   82,  108,  100,
-       83,   81,   77,   85,  101,   86,  109,  104,   79,  110,
-      103,  111,  106,  113,  117,  108,   87,  116,  120,  121,
-      122,  107,  123,  136,  130,  124,  129,  134,  132,  135,
-      133,  120,  131,  117,  128,  111,  109,  127,  116,  110,
-      124,  129,  122,  126,  123,  132,  121,  133,  135,  125,
-
-      119,  118,  113,  130,  141,  141,  141,  141,  141,  141,
-      141,  141,  141,  142,  115,  142,  142,  142,  142,  142,
-      142,  142,  143,  143,  114,  143,  112,  143,  144,  105,
-      144,  102,  144,  145,  145,  145,   99,  145,  146,  146,
-       97,  146,  146,  146,  146,   95,  146,  147,  147,  147,
-      147,  147,  147,  147,  147,  147,  148,   94,  148,   92,
-      148,  149,   90,  149,  149,  150,   84,  150,  151,   80,
-      151,  151,  152,   73,  152,  152,  153,   71,  153,  153,
-       70,   63,   47,   34,   32,   31,   30,   26,   25,   24,
-       21,   17,   13,  140,  140,  140,  140,  140,  140,  140,
-
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140
+       38,   37,   39,   27,   43,   41,   29,   40,   35,   11,
+       12,   44,   27,   38,   42,   29,   45,   43,   46,   47,
+       52,   53,   53,   36,  146,   77,  145,   36,   37,   40,
+
+       41,   40,   42,   73,  144,   46,   44,   42,   47,   63,
+       60,   63,   60,   45,   63,   61,   47,   61,   66,   76,
+       66,   60,   74,   66,   77,   73,   61,   78,   79,   52,
+       60,   80,   81,   85,   83,   61,   76,   84,   74,   87,
+       88,   89,  101,  104,  106,   78,  110,   80,   79,   85,
+      103,   84,  107,  109,  112,   87,   79,   88,  104,   81,
+       83,  111,  106,  103,  113,  114,  116,  101,  119,  107,
+      109,  110,   89,  121,  120,  124,  125,  126,  111,  127,
+      135,  128,  143,  119,  112,  131,  140,  134,  124,  114,
+      137,  138,  121,  141,  113,  120,  128,  131,  140,  126,
+
+      142,  127,  134,  125,  139,  116,  136,  137,  138,  135,
+      133,  132,  141,  148,  148,  148,  148,  148,  148,  148,
+      148,  148,  149,  130,  149,  149,  149,  149,  149,  149,
+      149,  150,  150,  129,  150,  123,  150,  151,  122,  151,
+      118,  151,  152,  152,  152,  117,  152,  153,  153,  115,
+      153,  153,  153,  153,  108,  153,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  155,  105,  155,  102,  155,
+      156,   99,  156,  156,  157,   97,  157,  158,   96,  158,
+      158,  159,   94,  159,  159,  160,   92,  160,  160,   86,
+       82,   75,   72,   71,   64,   48,   34,   32,   31,   30,
+
+       26,   25,   24,   21,   17,   13,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -587,7 +590,7 @@ struct lexer_param;
   static int enter(int opening, int state, yyscan_t yyscanner);
   static int try_exit(int closing, int state, yyscan_t yyscanner);
 #define YY_NO_INPUT 1
-#line 591 "lexer.c"
+#line 594 "lexer.c"
 
 #define INITIAL 0
 #define IN_PAREN 1
@@ -843,7 +846,7 @@ YY_DECL
 #line 38 "lexer.l"
 
 
-#line 847 "lexer.c"
+#line 850 "lexer.c"
 
     yylval = yylval_param;
 
@@ -900,13 +903,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 141 )
+                               if ( yy_current_state >= 148 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 294 );
+               while ( yy_base[yy_current_state] != 307 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1038,114 +1041,119 @@ YY_RULE_SETUP
 case 22:
 YY_RULE_SETUP
 #line 62 "lexer.l"
-{ return SETPIPE; }
+{ return LOC; }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 63 "lexer.l"
-{ return SETPLUS; }
+{ return SETPIPE; }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 64 "lexer.l"
-{ return SETMINUS; }
+{ return SETPLUS; }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 65 "lexer.l"
-{ return SETMULT; }
+{ return SETMINUS; }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 66 "lexer.l"
-{ return SETDIV; }
+{ return SETMULT; }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 67 "lexer.l"
-{ return SETMOD; }
+{ return SETDIV; }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 68 "lexer.l"
-{ return SETDEFINEDOR; }
+{ return SETMOD; }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 69 "lexer.l"
-{ return LESSEQ; }
+{ return SETDEFINEDOR; }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 70 "lexer.l"
-{ return GREATEREQ; }
+{ return LESSEQ; }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 71 "lexer.l"
-{ return REC; }
+{ return GREATEREQ; }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 72 "lexer.l"
-{ return yytext[0];}
+{ return REC; }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 74 "lexer.l"
+#line 73 "lexer.l"
+{ return yytext[0];}
+       YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 75 "lexer.l"
 {
   return enter(yytext[0], YY_START, yyscanner);
 }
        YY_BREAK
-case 34:
+case 35:
 YY_RULE_SETUP
-#line 78 "lexer.l"
+#line 79 "lexer.l"
 {
   return try_exit(yytext[0], YY_START, yyscanner);
 }
        YY_BREAK
-case 35:
+case 36:
 YY_RULE_SETUP
-#line 82 "lexer.l"
+#line 83 "lexer.l"
 {
   yylval->literal = jv_string_sized(yytext + 1, yyleng - 1); return FORMAT;
 }
        YY_BREAK
-case 36:
+case 37:
 YY_RULE_SETUP
-#line 86 "lexer.l"
+#line 87 "lexer.l"
 { 
    yylval->literal = jv_parse_sized(yytext, yyleng); return LITERAL; 
 }
        YY_BREAK
-case 37:
+case 38:
 YY_RULE_SETUP
-#line 90 "lexer.l"
+#line 91 "lexer.l"
 {
   yy_push_state(IN_QQSTRING, yyscanner);
   return QQSTRING_START;
 }
        YY_BREAK
 
-case 38:
+case 39:
 YY_RULE_SETUP
-#line 96 "lexer.l"
+#line 97 "lexer.l"
 {
     return enter(QQSTRING_INTERP_START, YY_START, yyscanner);
   }
        YY_BREAK
-case 39:
+case 40:
 YY_RULE_SETUP
-#line 99 "lexer.l"
+#line 100 "lexer.l"
 {
     yy_pop_state(yyscanner);
     return QQSTRING_END;
   }
        YY_BREAK
-case 40:
-/* rule 40 can match eol */
+case 41:
+/* rule 41 can match eol */
 YY_RULE_SETUP
-#line 103 "lexer.l"
+#line 104 "lexer.l"
 {
     /* pass escapes to the json parser */
     jv escapes = jv_string_fmt("\"%.*s\"", (int)yyleng, yytext);
@@ -1154,50 +1162,50 @@ YY_RULE_SETUP
     return QQSTRING_TEXT;
   }
        YY_BREAK
-case 41:
-/* rule 41 can match eol */
+case 42:
+/* rule 42 can match eol */
 YY_RULE_SETUP
-#line 110 "lexer.l"
+#line 111 "lexer.l"
 {
     yylval->literal = jv_string_sized(yytext, yyleng);
     return QQSTRING_TEXT;
   }
        YY_BREAK
-case 42:
+case 43:
 YY_RULE_SETUP
-#line 114 "lexer.l"
+#line 115 "lexer.l"
 {
     return INVALID_CHARACTER;
   }
        YY_BREAK
 
-case 43:
+case 44:
 YY_RULE_SETUP
-#line 120 "lexer.l"
+#line 121 "lexer.l"
 { yylval->literal = jv_string(yytext); return IDENT;}
        YY_BREAK
-case 44:
+case 45:
 YY_RULE_SETUP
-#line 121 "lexer.l"
+#line 122 "lexer.l"
 { yylval->literal = jv_string(yytext+1); return FIELD;}
        YY_BREAK
-case 45:
-/* rule 45 can match eol */
+case 46:
+/* rule 46 can match eol */
 YY_RULE_SETUP
-#line 123 "lexer.l"
+#line 124 "lexer.l"
 {}
        YY_BREAK
-case 46:
+case 47:
 YY_RULE_SETUP
-#line 125 "lexer.l"
+#line 126 "lexer.l"
 { return INVALID_CHARACTER; }
        YY_BREAK
-case 47:
+case 48:
 YY_RULE_SETUP
-#line 127 "lexer.l"
+#line 128 "lexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1201 "lexer.c"
+#line 1209 "lexer.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(IN_PAREN):
 case YY_STATE_EOF(IN_BRACKET):
@@ -1496,7 +1504,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 141 )
+                       if ( yy_current_state >= 148 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1525,11 +1533,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 141 )
+               if ( yy_current_state >= 148 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 140);
+       yy_is_jam = (yy_current_state == 147);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2361,7 +2369,7 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 127 "lexer.l"
+#line 128 "lexer.l"
 
 
 /* perhaps these should be calls... */
diff --git a/lexer.h b/lexer.h
index 36b63351e34a84f7b00ac77f76c758bde629711e..9e0ecef8e50dabb3356efd96c9340cd58f07a8f1 100644 (file)
--- a/lexer.h
+++ b/lexer.h
@@ -354,7 +354,7 @@ extern int jq_yylex \
 #undef YY_DECL
 #endif
 
-#line 127 "lexer.l"
+#line 128 "lexer.l"
 
 
 #line 361 "lexer.h"
diff --git a/lexer.l b/lexer.l
index bde11fb9ae6d985f0b1fa0a3a947b00ec238871e..98ea9167b2899de93066439bd8ee278923c3a588 100644 (file)
--- a/lexer.l
+++ b/lexer.l
@@ -59,6 +59,7 @@ struct lexer_param;
 "catch" { return CATCH; }
 "label" { return LABEL; }
 "break" { return BREAK; }
+"__loc__" { return LOC; }
 "|=" { return SETPIPE; }
 "+=" { return SETPLUS; }
 "-=" { return SETMINUS; }
index 7753d901275ac98a4205e25edaa5da83b7d021e9..97bb3482d9c15c2fc612274cbdccbe7f5f490c2a 100644 (file)
--- a/locfile.c
+++ b/locfile.c
@@ -47,7 +47,7 @@ void locfile_free(struct locfile* l) {
   }
 }
 
-static int locfile_get_line(struct locfile* l, int pos) {
+int locfile_get_line(struct locfile* l, int pos) {
   assert(pos < l->length);
   int line = 1;
   while (l->linemap[line] <= pos) line++;   // == if pos at start (before, never ==, because pos never on \n)
index 8c1416989d6fa6f86e3abf0e59b45beaa284da64..a7801916cc0726d6e0acd517a1d967e87278d62c 100644 (file)
--- a/locfile.h
+++ b/locfile.h
@@ -22,6 +22,7 @@ struct locfile {
 
 struct locfile* locfile_init(jq_state *, const char *, const char *, int);
 struct locfile* locfile_retain(struct locfile *);
+int locfile_get_line(struct locfile *, int);
 void locfile_free(struct locfile *);
 void locfile_locate(struct locfile *, location, const char *, ...);
 
index 2c9774284d0fc137a7dbb25484d9e17590b40dc1..48547ab758958121aa734e734a5716f7ad88bdcd 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -154,19 +154,20 @@ struct lexer_param;
     CATCH = 282,
     LABEL = 283,
     BREAK = 284,
-    SETPIPE = 285,
-    SETPLUS = 286,
-    SETMINUS = 287,
-    SETMULT = 288,
-    SETDIV = 289,
-    SETDEFINEDOR = 290,
-    LESSEQ = 291,
-    GREATEREQ = 292,
-    QQSTRING_START = 293,
-    QQSTRING_TEXT = 294,
-    QQSTRING_INTERP_START = 295,
-    QQSTRING_INTERP_END = 296,
-    QQSTRING_END = 297
+    LOC = 285,
+    SETPIPE = 286,
+    SETPLUS = 287,
+    SETMINUS = 288,
+    SETMULT = 289,
+    SETDIV = 290,
+    SETDEFINEDOR = 291,
+    LESSEQ = 292,
+    GREATEREQ = 293,
+    QQSTRING_START = 294,
+    QQSTRING_TEXT = 295,
+    QQSTRING_INTERP_START = 296,
+    QQSTRING_INTERP_END = 297,
+    QQSTRING_END = 298
   };
 #endif
 /* Tokens.  */
@@ -197,19 +198,20 @@ struct lexer_param;
 #define CATCH 282
 #define LABEL 283
 #define BREAK 284
-#define SETPIPE 285
-#define SETPLUS 286
-#define SETMINUS 287
-#define SETMULT 288
-#define SETDIV 289
-#define SETDEFINEDOR 290
-#define LESSEQ 291
-#define GREATEREQ 292
-#define QQSTRING_START 293
-#define QQSTRING_TEXT 294
-#define QQSTRING_INTERP_START 295
-#define QQSTRING_INTERP_END 296
-#define QQSTRING_END 297
+#define LOC 285
+#define SETPIPE 286
+#define SETPLUS 287
+#define SETMINUS 288
+#define SETMULT 289
+#define SETDIV 290
+#define SETDEFINEDOR 291
+#define LESSEQ 292
+#define GREATEREQ 293
+#define QQSTRING_START 294
+#define QQSTRING_TEXT 295
+#define QQSTRING_INTERP_START 296
+#define QQSTRING_INTERP_END 297
+#define QQSTRING_END 298
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -221,7 +223,7 @@ union YYSTYPE
   jv literal;
   block blk;
 
-#line 225 "parser.c" /* yacc.c:355  */
+#line 227 "parser.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -248,7 +250,7 @@ int yyparse (block* answer, int* errors, struct locfile* locations, struct lexer
 #endif /* !YY_YY_PARSER_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 110 "parser.y" /* yacc.c:358  */
+#line 111 "parser.y" /* yacc.c:358  */
 
 #include "lexer.h"
 struct lexer_param {
@@ -404,7 +406,7 @@ static block gen_update(block object, block val, int optype) {
 }
 
 
-#line 408 "parser.c" /* yacc.c:358  */
+#line 410 "parser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -648,21 +650,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  27
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1845
+#define YYLAST   1753
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  64
+#define YYNTOKENS  65
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  21
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  120
+#define YYNRULES  121
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  253
+#define YYNSTATES  254
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   297
+#define YYMAXUTOK   298
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -674,16 +676,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,    55,    52,     2,     2,
-      56,    57,    50,    48,    44,    49,    59,    51,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    58,    54,
-      46,    45,    47,    53,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,    56,    53,     2,     2,
+      57,    58,    51,    49,    45,    50,    60,    52,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    59,    55,
+      47,    46,    48,    54,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    60,     2,    61,     2,     2,     2,     2,     2,     2,
+       2,    61,     2,    62,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    62,    43,    63,     2,     2,     2,     2,
+       2,     2,     2,    63,    44,    64,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -700,26 +702,26 @@ static const yytype_uint8 yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42
+      35,    36,    37,    38,    39,    40,    41,    42,    43
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   268,   268,   271,   276,   279,   289,   292,   297,   300,
-     305,   309,   314,   319,   324,   329,   332,   337,   341,   345,
-     350,   362,   366,   370,   374,   378,   382,   386,   390,   394,
-     398,   402,   406,   410,   414,   418,   422,   426,   430,   434,
-     438,   442,   446,   450,   454,   458,   462,   466,   471,   480,
-     487,   499,   513,   518,   524,   527,   532,   537,   544,   544,
-     548,   548,   555,   558,   561,   567,   570,   575,   578,   581,
-     587,   590,   593,   601,   605,   608,   611,   614,   617,   620,
-     623,   626,   629,   633,   639,   642,   645,   648,   651,   654,
-     657,   660,   663,   666,   669,   672,   675,   678,   681,   684,
-     687,   694,   698,   710,   715,   716,   717,   718,   721,   724,
-     729,   734,   737,   738,   739,   742,   745,   748,   752,   756,
-     759
+       0,   269,   269,   272,   277,   280,   290,   293,   298,   301,
+     306,   310,   315,   320,   325,   330,   333,   338,   342,   346,
+     351,   363,   367,   371,   375,   379,   383,   387,   391,   395,
+     399,   403,   407,   411,   415,   419,   423,   427,   431,   435,
+     439,   443,   447,   451,   455,   459,   463,   467,   472,   481,
+     488,   500,   514,   519,   525,   528,   533,   538,   545,   545,
+     549,   549,   556,   559,   562,   568,   571,   576,   579,   582,
+     588,   591,   594,   602,   606,   609,   612,   615,   618,   621,
+     624,   627,   630,   634,   640,   643,   646,   649,   652,   655,
+     658,   661,   664,   667,   670,   673,   676,   679,   682,   685,
+     688,   695,   699,   703,   715,   720,   721,   722,   723,   726,
+     729,   734,   739,   742,   743,   744,   747,   750,   753,   757,
+     761,   764
 };
 #endif
 
@@ -733,14 +735,14 @@ static const char *const yytname[] =
   "\"as\"", "\"def\"", "\"module\"", "\"import\"", "\"if\"", "\"then\"",
   "\"else\"", "\"elif\"", "\"reduce\"", "\"foreach\"", "\"end\"",
   "\"and\"", "\"or\"", "\"try\"", "\"catch\"", "\"label\"", "\"break\"",
-  "\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"//=\"", "\"<=\"",
-  "\">=\"", "QQSTRING_START", "QQSTRING_TEXT", "QQSTRING_INTERP_START",
-  "QQSTRING_INTERP_END", "QQSTRING_END", "'|'", "','", "'='", "'<'", "'>'",
-  "'+'", "'-'", "'*'", "'/'", "'%'", "'?'", "';'", "'$'", "'('", "')'",
-  "':'", "'.'", "'['", "']'", "'{'", "'}'", "$accept", "TopLevel",
-  "Module", "Imports", "FuncDefs", "Exp", "Import", "FuncDef", "Params",
-  "Param", "String", "@1", "@2", "QQString", "ElseBody", "ExpD", "Term",
-  "Args", "Arg", "MkDict", "MkDictPair", YY_NULLPTR
+  "\"__loc__\"", "\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"",
+  "\"//=\"", "\"<=\"", "\">=\"", "QQSTRING_START", "QQSTRING_TEXT",
+  "QQSTRING_INTERP_START", "QQSTRING_INTERP_END", "QQSTRING_END", "'|'",
+  "','", "'='", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'?'",
+  "';'", "'$'", "'('", "')'", "':'", "'.'", "'['", "']'", "'{'", "'}'",
+  "$accept", "TopLevel", "Module", "Imports", "FuncDefs", "Exp", "Import",
+  "FuncDef", "Params", "Param", "String", "@1", "@2", "QQString",
+  "ElseBody", "ExpD", "Term", "Args", "Arg", "MkDict", "MkDictPair", YY_NULLPTR
 };
 #endif
 
@@ -753,52 +755,52 @@ static const yytype_uint16 yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   124,    44,    61,    60,    62,    43,    45,
-      42,    47,    37,    63,    59,    36,    40,    41,    58,    46,
-      91,    93,   123,   125
+     295,   296,   297,   298,   124,    44,    61,    60,    62,    43,
+      45,    42,    47,    37,    63,    59,    36,    40,    41,    58,
+      46,    91,    93,   123,   125
 };
 # endif
 
-#define YYPACT_NINF -97
+#define YYPACT_NINF -121
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-97)))
+  (!!((Yystate) == (-121)))
 
-#define YYTABLE_NINF -112
+#define YYTABLE_NINF -113
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-112)))
+  (!!((Yytable_value) == (-113)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-       9,   769,    14,    15,   -23,   -18,   -97,     1,   -97,    47,
-     769,   452,   452,   769,   -19,    28,   -97,   769,    50,   412,
-     227,   350,    49,  1151,   769,   -97,    -2,   -97,     0,   769,
-      15,   769,   -97,   -97,   -54,  1518,    32,    35,    72,    98,
-     -97,    99,   -97,    56,   -97,    58,  1031,   -97,   112,     1,
-      63,    60,   -97,   847,   -36,    70,   472,    71,    67,    87,
-     769,   769,   769,   769,   769,   769,   769,   769,   769,   769,
-     769,   769,   769,   769,   769,   769,   769,   769,   769,   769,
-     769,   769,   769,   769,   -97,   -97,  1668,    80,    79,     0,
-     288,   123,   -97,  1668,   769,   -97,  1668,   -44,   -97,   -97,
-      -3,   769,   532,    82,    83,   592,   100,   -97,     2,   -97,
-     -97,   -97,   -97,   -97,   -97,    89,   -97,   154,    84,  1061,
-     154,   -97,    89,  1728,  1774,  1774,  1698,  1792,  1746,  1728,
-    1728,  1728,  1728,  1728,  1728,  1774,  1774,  1668,  1698,  1728,
-    1774,  1774,    56,    56,    95,    95,    95,   -97,   138,    96,
-      90,   769,   101,   802,    30,   -97,   769,   -97,     7,   -97,
-     149,   -32,   -97,  1197,   -97,  1473,   153,   159,   -97,   -97,
-     769,   -97,   769,   -97,   120,   -97,   154,   122,    38,   108,
-     110,   122,   -97,   129,   -97,   -97,   892,   -97,   118,   128,
-     651,   171,   -97,   -97,   -97,    -3,   124,   -97,   769,   769,
-     -97,   130,   132,  1668,  1548,   -97,   154,   154,   154,   769,
-     131,   137,   937,   -97,   -97,  1243,   710,   -97,   769,  1593,
-    1638,   769,   769,   -97,   122,   122,   122,  1668,   -97,   -97,
-     140,   -97,   -97,  1289,  1335,   -97,   769,  1381,  1427,   -97,
-     -97,   -97,  1473,   769,   769,   -97,  1091,   982,   -97,   769,
-     -97,  1121,   -97
+       7,   698,     8,    15,   -25,   -40,  -121,     5,  -121,    31,
+     698,   533,   533,   698,    40,    28,  -121,   698,     3,   379,
+     228,   316,    91,  1090,   698,  -121,    -2,  -121,    -3,   698,
+      15,   698,  -121,  -121,    -7,  1465,   108,   114,    24,    49,
+    -121,    50,  -121,   -14,  -121,  -121,    41,   966,  -121,    54,
+       5,    60,    55,  -121,   778,   -43,    57,   405,    61,    58,
+      78,   698,   698,   698,   698,   698,   698,   698,   698,   698,
+     698,   698,   698,   698,   698,   698,   698,   698,   698,   698,
+     698,   698,   698,   698,   698,  -121,  -121,  1619,    70,    69,
+      -3,   290,   113,  -121,  1619,   698,  -121,  1619,   -45,  -121,
+    -121,    30,   698,   466,    72,    73,   492,    89,  -121,     2,
+    -121,  -121,  -121,  -121,  -121,  -121,    93,  -121,   102,    76,
+     997,   102,  -121,    93,  1681,   935,   935,  1650,  1699,   129,
+    1681,  1681,  1681,  1681,  1681,  1681,   935,   935,  1619,  1650,
+    1681,   935,   935,   -14,   -14,    81,    81,    81,  -121,   132,
+      83,    80,   698,    84,   732,    37,  -121,   698,  -121,     6,
+    -121,   139,   -31,  -121,  1137,  -121,  1419,   140,   141,  -121,
+    -121,   698,  -121,   698,  -121,   101,  -121,   102,   103,    43,
+      90,    95,   103,  -121,   116,  -121,  -121,   824,  -121,   552,
+     107,   578,   160,  -121,  -121,  -121,    30,   125,  -121,   698,
+     698,  -121,   128,   130,  1619,  1496,  -121,   102,   102,   102,
+     698,   119,   135,   870,  -121,  -121,  1184,   638,  -121,   698,
+    1542,  1588,   698,   698,  -121,   103,   103,   103,  1619,  -121,
+    -121,   137,  -121,  -121,  1231,  1278,  -121,   698,  1325,  1372,
+    -121,  -121,  -121,  1419,   698,   698,  -121,  1028,   916,  -121,
+     698,  -121,  1059,  -121
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -806,48 +808,48 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,     0,     0,     6,   102,    79,    94,    96,    71,     0,
+       4,     0,     0,     6,   103,    79,    94,    96,    71,     0,
        0,     0,     0,     0,     0,     0,    58,     0,     0,     0,
        0,     0,     0,     0,     0,    95,    47,     1,     0,     8,
        6,     0,    75,    60,     0,     0,     0,     0,    18,     0,
-      73,     0,    62,    32,   101,     0,     0,    82,     0,     0,
-      81,     0,    99,     0,     0,   118,     0,   117,     0,   112,
+      73,     0,    62,    32,   102,   101,     0,     0,    82,     0,
+       0,    81,     0,    99,     0,     0,   119,     0,   118,     0,
+     113,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        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,    78,     0,     0,
-       0,     0,     3,     2,     8,     7,   110,     0,   108,    62,
-       0,     0,     0,     0,     0,     0,     0,    72,     0,   104,
-      97,    83,    77,   105,    98,     0,   107,     0,     0,     0,
-       0,   100,     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,    74,     0,    80,
-       0,     0,    87,     0,     0,     9,     0,   103,     0,    57,
-       0,     0,    54,     0,    16,     0,     0,     0,    19,    17,
-       0,    63,     0,    59,     0,   114,     0,   115,    69,     0,
-       0,   116,   113,     0,    76,   106,     0,    86,     0,    85,
-       0,     0,   109,    61,    56,     0,     0,    52,     0,     0,
-      15,     0,     0,    20,     0,    68,     0,     0,     0,     0,
-      93,    92,     0,    84,    49,     0,     0,    55,     0,     0,
-       0,     0,     0,    64,    67,   120,   119,    11,    90,    89,
-      91,    50,    48,     0,     0,    66,     0,     0,     0,    88,
-      51,    53,     0,     0,     0,    65,     0,     0,    12,     0,
-      14,     0,    13
+       0,     0,     0,     0,     0,    21,     5,    10,    78,     0,
+       0,     0,     0,     3,     2,     8,     7,   111,     0,   109,
+      62,     0,     0,     0,     0,     0,     0,     0,    72,     0,
+     105,    97,    83,    77,   106,    98,     0,   108,     0,     0,
+       0,     0,   100,     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,    74,     0,
+      80,     0,     0,    87,     0,     0,     9,     0,   104,     0,
+      57,     0,     0,    54,     0,    16,     0,     0,     0,    19,
+      17,     0,    63,     0,    59,     0,   115,     0,   116,    69,
+       0,     0,   117,   114,     0,    76,   107,     0,    86,     0,
+      85,     0,     0,   110,    61,    56,     0,     0,    52,     0,
+       0,    15,     0,     0,    20,     0,    68,     0,     0,     0,
+       0,    93,    92,     0,    84,    49,     0,     0,    55,     0,
+       0,     0,     0,     0,    64,    67,   121,   120,    11,    90,
+      89,    91,    50,    48,     0,     0,    66,     0,     0,     0,
+      88,    51,    53,     0,     0,     0,    65,     0,     0,    12,
+       0,    14,     0,    13
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -97,   -97,   -97,   146,    91,    -1,   -97,    -8,   -97,    -4,
-      -5,   -97,   -97,    97,   -48,   -88,    -6,   -97,    39,   -96,
-     -97
+    -121,  -121,  -121,   156,    97,    -1,  -121,    -4,  -121,     0,
+      -5,  -121,  -121,    94,   -50,  -120,    -6,  -121,    38,   -97,
+    -121
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,    29,    92,    86,    30,    24,   161,   162,
-      25,    42,    99,   108,   200,   177,    26,    97,    98,    58,
-      59
+      -1,     2,     3,    29,    93,    87,    30,    24,   162,   163,
+      25,    42,   100,   109,   201,   178,    26,    98,    99,    59,
+      60
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -855,430 +857,412 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      23,   159,   100,    87,   101,    36,    37,    49,   115,    35,
-     156,    88,    38,   157,    27,    50,    43,    57,    46,   175,
-      53,    94,   195,    91,     1,   196,   182,   116,    93,    40,
-      96,    28,   181,    31,   190,    32,    39,    87,    16,    33,
-      87,   171,   172,    87,   173,   103,   171,   172,   104,   193,
-      54,    34,   160,    55,    44,   119,    49,    89,    90,   123,
+      23,   182,   116,    88,    50,    36,    37,    44,    27,    35,
+     157,    89,    38,   158,    32,    51,    43,    58,    47,   176,
+      54,   117,     1,    92,   196,    95,   183,   197,    94,    40,
+      97,    28,    31,    45,   160,    34,    16,    82,    83,    84,
+      85,   191,   172,   173,    33,   174,   172,   173,    88,   194,
+     101,   106,   102,   107,   108,   112,   120,   206,    90,    91,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
      134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,    41,   149,   191,    94,    16,   205,   153,
-     174,    89,    90,    55,    89,    90,    49,    89,    90,   105,
-     163,   165,   106,   107,   169,    56,    81,    82,    83,    84,
-      57,   178,  -111,   111,   178,   109,   112,    57,   224,   225,
-     226,   113,     4,     5,     6,     7,     8,    16,   117,   120,
-     121,   122,     9,   147,   148,    10,   154,   166,   167,    11,
-      12,   179,   183,   170,    13,    56,    14,    15,    84,   184,
-     186,   185,  -111,   194,   187,    96,    16,   201,     4,     5,
-       6,     7,     8,   202,   115,   206,   207,    17,   208,   203,
-     178,   204,   209,    18,    19,   216,    95,    20,    21,   211,
-      22,   213,   218,    15,   228,   155,   221,   212,   222,   215,
-     229,   217,    16,   239,   245,   192,   158,   219,   220,     0,
-     178,   178,   178,   176,     0,     0,     0,     0,   227,    18,
-      19,     0,     0,    20,    21,   233,    22,   234,     0,     0,
-     237,   238,     0,     0,     0,     0,     0,   -70,    47,     0,
-       0,    48,   -70,     0,    49,   242,   -70,   -70,   -70,   -70,
-     -70,     0,   246,   247,     0,   -70,   -70,   -70,   251,     0,
-     -70,   -70,   -70,     0,   -70,     0,     0,   -70,   -70,   -70,
-     -70,   -70,   -70,   -70,   -70,    16,     0,     0,   -70,     0,
-     -70,   -70,   -70,   -70,   -70,   -70,   -70,   -70,   -70,   -70,
-     -70,   -70,     0,     0,   -70,   -70,   -70,   -70,   -70,   150,
-     -70,     0,     4,     5,     6,     7,     8,     0,     0,     0,
-       0,     0,     9,     0,     0,    10,     0,     0,     0,    11,
-      12,     0,     0,     0,    13,     0,    14,    15,     0,     0,
-       0,     0,     0,     0,     0,     0,    16,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       0,     0,     0,    18,    19,     0,   151,    20,    21,   152,
-      22,    51,     0,     0,     4,     5,     6,     7,     8,     0,
+     144,   145,   146,   147,    41,   150,   161,   225,   226,   227,
+     154,    95,    55,   192,   175,    56,    39,    56,    50,   110,
+      50,   164,   166,    90,    91,   170,     4,     5,     6,     7,
+       8,    58,   179,    88,   113,   179,   118,   114,    58,    88,
+     121,   104,   122,   123,   148,   149,   155,   105,   167,   168,
+      16,    15,    16,   171,   180,    85,   184,   185,   188,    62,
+      63,    16,   186,   195,   202,   203,   116,   207,    57,   208,
+      57,   187,   177,    65,   209,  -112,    97,  -112,    18,    19,
+     210,   214,    20,    21,   217,    22,    73,    74,    90,    91,
+     204,   179,   205,   229,    90,    91,    78,    79,    80,    81,
+      82,    83,    84,    85,   219,   222,    96,   223,   213,   230,
+     216,   240,   156,   246,   159,   193,   218,     0,   220,   221,
+       0,   179,   179,   179,     0,     0,     0,     0,     0,   228,
+       0,     0,     0,     0,     0,     0,   234,     0,   235,     0,
+       0,   238,   239,     0,     0,     0,     0,     0,   -70,    48,
+       0,     0,    49,   -70,     0,    50,   243,   -70,   -70,   -70,
+     -70,   -70,     0,   247,   248,     0,   -70,   -70,   -70,   252,
+       0,   -70,   -70,   -70,     0,   -70,     0,     0,     0,   -70,
+     -70,   -70,   -70,   -70,   -70,   -70,   -70,    16,     0,     0,
+     -70,     0,   -70,   -70,   -70,   -70,   -70,   -70,   -70,   -70,
+     -70,   -70,   -70,   -70,     0,     0,   -70,   -70,   -70,   -70,
+     -70,   151,   -70,     0,     4,     5,     6,     7,     8,     0,
        0,     0,     0,     0,     9,     0,     0,    10,     0,     0,
-       0,    11,    12,     0,     0,     0,    13,     0,    14,    15,
-       0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-       0,     0,     0,     0,     0,    18,    19,     0,     0,    20,
-      21,    52,    22,    45,     0,     0,     4,     5,     6,     7,
-       8,     0,     0,     0,     0,     0,     9,     0,     0,    10,
-       0,     0,     0,    11,    12,     0,     0,     0,    13,     0,
-      14,    15,     0,     0,     0,     0,     0,     0,     0,     0,
-      16,     0,     0,     0,     0,     0,     4,     5,     6,     7,
-       8,    17,     0,     0,     0,     0,     0,    18,    19,     0,
-       0,    20,    21,   118,    22,     0,     4,     5,     6,     7,
-       8,    15,     0,     0,     0,     0,     9,     0,     0,    10,
-      16,     0,     0,    11,    12,     0,     0,     0,    13,     0,
-      14,    15,     0,     0,     0,     0,     0,    18,    19,     0,
-      16,    20,    21,     0,    22,     0,     0,     0,     0,     0,
-       0,    17,     0,     0,     0,     0,     0,    18,    19,     0,
-       0,    20,    21,   164,    22,     0,     4,     5,     6,     7,
-       8,     0,     0,     0,     0,     0,     9,     0,     0,    10,
-       0,     0,     0,    11,    12,     0,     0,     0,    13,     0,
-      14,    15,     0,     0,     0,     0,     0,     0,     0,     0,
-      16,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    17,     0,     0,     0,     0,     0,    18,    19,     0,
-       0,    20,    21,   168,    22,     0,     4,     5,     6,     7,
-       8,     0,     0,     0,     0,     0,     9,     0,     0,    10,
-       0,     0,     0,    11,    12,     0,     0,     0,    13,     0,
-      14,    15,     0,     0,     0,     0,     0,     0,     0,     0,
-      16,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    17,     0,     0,     0,     0,     0,    18,    19,     0,
-       0,    20,    21,     0,    22,     4,     5,     6,     7,     8,
-       0,     0,     0,     0,     0,     9,     0,     0,    10,     0,
-       0,     0,    11,    12,     0,     0,     0,    13,     0,    14,
-      15,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      17,     0,     0,     0,     0,   214,    18,    19,     0,     0,
-      20,    21,     0,    22,     4,     5,     6,     7,     8,     0,
-       0,     0,     0,     0,     9,     0,     0,    10,     0,     0,
-       0,    11,    12,     0,     0,     0,    13,     0,    14,    15,
-       0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-       0,     0,     0,     0,   232,    18,    19,     0,     0,    20,
-      21,     0,    22,     4,     5,     6,     7,     8,     0,     0,
+       0,    11,    12,     0,     0,     0,    13,    52,    14,    15,
+       4,     5,     6,     7,     8,     0,     0,     0,     0,    16,
+       9,     0,     0,    10,     0,     0,     0,    11,    12,     0,
+      17,     0,    13,     0,    14,    15,    18,    19,     0,   152,
+      20,    21,   153,    22,     0,    16,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
+       0,     0,    18,    19,     0,     0,    20,    21,    53,    22,
+      46,     0,     0,     4,     5,     6,     7,     8,     0,     0,
        0,     0,     0,     9,     0,     0,    10,     0,     0,     0,
-      11,    12,     0,     0,     0,    13,     0,    14,    15,     0,
+      11,    12,     0,     0,     0,    13,   119,    14,    15,     4,
+       5,     6,     7,     8,     0,     0,     0,     0,    16,     9,
+       0,     0,    10,     0,     0,     0,    11,    12,     0,    17,
+       0,    13,     0,    14,    15,    18,    19,     0,     0,    20,
+      21,     0,    22,     0,    16,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    17,     0,     0,     0,     0,
+       0,    18,    19,     0,     0,    20,    21,   165,    22,     0,
+       4,     5,     6,     7,     8,     0,     0,     0,     0,     0,
+       9,     0,     0,    10,     0,     0,     0,    11,    12,     0,
+       0,     0,    13,   169,    14,    15,     4,     5,     6,     7,
+       8,     0,     0,     0,     0,    16,     9,     0,     0,    10,
+       0,     0,     0,    11,    12,     0,    17,     0,    13,     0,
+      14,    15,    18,    19,     0,     0,    20,    21,     0,    22,
+       0,    16,     0,     0,     0,     0,     0,     4,     5,     6,
+       7,     8,    17,     0,     0,     0,     0,     0,    18,    19,
+       0,     0,    20,    21,     0,    22,     4,     5,     6,     7,
+       8,     0,    15,     0,     0,     0,     9,     0,     0,    10,
+       0,     0,    16,    11,    12,     0,     0,     0,    13,     0,
+      14,    15,     4,     5,     6,     7,     8,     0,     0,    18,
+      19,    16,     9,    20,    21,    10,    22,     0,     0,    11,
+      12,     0,    17,     0,    13,     0,    14,    15,    18,    19,
+       0,     0,    20,    21,   212,    22,     0,    16,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+       0,     0,     0,   215,    18,    19,     0,     0,    20,    21,
+       0,    22,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     9,     0,     0,    10,     0,     0,     0,    11,
+      12,     0,     0,     0,    13,     0,    14,    15,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
-       0,    60,    61,    62,    63,     0,     0,     0,    17,     0,
-       0,     0,     0,     0,    18,    19,    64,    65,    20,    21,
-       0,    22,    66,    67,    68,    69,    70,    71,    72,    73,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    60,    61,    62,    63,
-     188,     0,     0,   189,     0,     0,     0,     0,     0,     0,
-       0,    64,    65,     0,     0,     0,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,     0,     0,     0,     0,     0,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    60,    61,    62,    63,     0,     0,     0,   114,     0,
-       0,     0,     0,     0,     0,     0,    64,    65,     0,     0,
-       0,     0,    66,    67,    68,    69,    70,    71,    72,    73,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    60,    61,    62,    63,
-       0,     0,     0,   210,     0,     0,     0,     0,     0,     0,
-       0,    64,    65,     0,     0,     0,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,     0,     0,     0,     0,     0,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    60,    61,    62,    63,     0,     0,     0,   230,     0,
-       0,     0,     0,     0,     0,     0,    64,    65,     0,     0,
-       0,     0,    66,    67,    68,    69,    70,    71,    72,    73,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,   249,     0,     0,   250,
-      60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    64,    65,     0,     0,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-      60,    61,    62,    63,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    64,    65,     0,   110,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-      60,    61,    62,    63,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    64,    65,     0,   180,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-      60,    61,    62,    63,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    64,    65,     0,   248,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-      60,    61,    62,    63,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    64,    65,     0,   252,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-       0,     0,     0,     0,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    60,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    64,    65,     0,     0,     0,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,     0,     0,     0,     0,     0,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,   197,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    64,    65,     0,
-       0,     0,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,     0,     0,     0,     0,     0,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,   231,    60,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    64,    65,     0,     0,     0,     0,    66,
-      67,    68,    69,    70,    71,    72,    73,     0,     0,     0,
-       0,     0,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,   240,    60,    61,    62,    63,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    64,
-      65,     0,     0,     0,     0,    66,    67,    68,    69,    70,
-      71,    72,    73,     0,     0,     0,     0,     0,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,   241,
-      60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    64,    65,     0,     0,     0,
-       0,    66,    67,    68,    69,    70,    71,    72,    73,     0,
-       0,     0,     0,     0,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,   243,    60,    61,    62,    63,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+       0,     0,     0,   233,    18,    19,     0,     0,    20,    21,
+       0,    22,     4,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     9,     0,     0,    10,     0,     0,     0,    11,
+      12,     0,     0,     0,    13,     0,    14,    15,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
+       0,    61,    62,    63,    64,     0,     0,     0,    17,     0,
+       0,     0,     0,     0,    18,    19,    65,    66,    20,    21,
+       0,    22,     0,    67,    68,    69,    70,    71,    72,    73,
+      74,     0,     0,     0,     0,     0,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    61,    62,    63,
+      64,   189,     0,     0,   190,     0,     0,     0,     0,     0,
+       0,     0,    65,    66,     0,     0,     0,     0,     0,    67,
+      68,    69,    70,    71,    72,    73,    74,     0,     0,     0,
+       0,     0,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    61,    62,    63,    64,     0,     0,     0,
+     115,     0,     0,     0,     0,     0,     0,     0,    65,    66,
+       0,     0,     0,     0,     0,    67,    68,    69,    70,    71,
+      72,    73,    74,     0,     0,     0,     0,     0,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    61,
+      62,    63,    64,     0,     0,     0,   211,     0,     0,     0,
+       0,     0,     0,     0,    65,    66,     0,     0,     0,     0,
+       0,    67,    68,    69,    70,    71,    72,    73,    74,     0,
+       0,     0,     0,     0,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    61,    62,    63,    64,     0,
+       0,     0,   231,     0,     0,     0,     0,     0,     0,     0,
+      65,    66,     0,     0,     0,  -113,  -113,    67,    68,    69,
+      70,    71,    72,    73,    74,     0,     0,     0,     0,     0,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,   250,  -113,  -113,   251,    61,    62,    63,    64,     0,
+       0,     0,  -113,  -113,    80,    81,    82,    83,    84,    85,
+      65,    66,     0,     0,     0,     0,     0,    67,    68,    69,
+      70,    71,    72,    73,    74,     0,    61,    62,    63,    64,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    65,    66,     0,   111,     0,     0,     0,    67,    68,
+      69,    70,    71,    72,    73,    74,     0,    61,    62,    63,
+      64,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    65,    66,     0,   181,     0,     0,     0,    67,
+      68,    69,    70,    71,    72,    73,    74,     0,    61,    62,
+      63,    64,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    65,    66,     0,   249,     0,     0,     0,
+      67,    68,    69,    70,    71,    72,    73,    74,     0,    61,
+      62,    63,    64,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    65,    66,     0,   253,     0,     0,
+       0,    67,    68,    69,    70,    71,    72,    73,    74,     0,
+       0,     0,     0,     0,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    61,    62,    63,    64,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    64,    65,     0,     0,     0,     0,    66,    67,    68,
-      69,    70,    71,    72,    73,     0,     0,     0,     0,     0,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,   244,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,   198,   199,     0,     0,     0,    64,    65,     0,
-       0,     0,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,     0,     0,     0,     0,     0,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    60,    61,    62,
-      63,     0,     0,     0,     0,     0,   102,     0,     0,     0,
-       0,     0,    64,    65,     0,     0,     0,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,     0,    60,    61,    62,
-      63,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    64,    65,     0,     0,     0,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,     0,     0,     0,   223,
-       0,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   235,    64,    65,     0,
-       0,     0,     0,    66,    67,    68,    69,    70,    71,    72,
-      73,     0,     0,     0,     0,     0,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    60,    61,    62,
-      63,     0,     0,     0,     0,     0,   236,     0,     0,     0,
-       0,     0,    64,    65,     0,     0,     0,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,     0,    60,    61,    62,
-      63,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    64,    65,     0,     0,     0,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,     0,    60,    61,    62,
-      63,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    64,    65,     0,     0,     0,     0,    66,    67,
-      68,    69,    70,    71,    72,    73,     0,  -112,    61,    62,
-       0,     0,     0,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    64,    65,     0,     0,    61,    62,  -112,  -112,
-    -112,  -112,  -112,  -112,    72,    73,     0,     0,     0,     0,
-      64,     0,     0,  -112,    77,    78,    79,    80,    81,    82,
-      83,    84,    72,    73,  -112,  -112,     0,     0,     0,     0,
-       0,     0,    77,    78,    79,    80,    81,    82,    83,    84,
-       0,     0,    61,    62,     0,     0,     0,     0,     0,     0,
-    -112,  -112,     0,     0,     0,     0,     0,     0,     0,     0,
-    -112,  -112,    79,    80,    81,    82,    83,    84,    72,    73,
-       0,     0,     0,     0,     0,     0,     0,     0,    77,    78,
-      79,    80,    81,    82,    83,    84
+       0,    65,    66,     0,     0,     0,     0,     0,    67,    68,
+      69,    70,    71,    72,    73,    74,     0,     0,     0,     0,
+       0,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,   198,    61,    62,    63,    64,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    65,    66,
+       0,     0,     0,     0,     0,    67,    68,    69,    70,    71,
+      72,    73,    74,     0,     0,     0,     0,     0,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,   232,
+      61,    62,    63,    64,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    65,    66,     0,     0,     0,
+       0,     0,    67,    68,    69,    70,    71,    72,    73,    74,
+       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,   241,    61,    62,    63,
+      64,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    65,    66,     0,     0,     0,     0,     0,    67,
+      68,    69,    70,    71,    72,    73,    74,     0,     0,     0,
+       0,     0,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,   242,    61,    62,    63,    64,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    65,
+      66,     0,     0,     0,     0,     0,    67,    68,    69,    70,
+      71,    72,    73,    74,     0,     0,     0,     0,     0,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+     244,    61,    62,    63,    64,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    65,    66,     0,     0,
+       0,     0,     0,    67,    68,    69,    70,    71,    72,    73,
+      74,     0,     0,     0,     0,     0,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,   245,    61,    62,
+      63,    64,     0,     0,     0,     0,     0,     0,   199,   200,
+       0,     0,     0,    65,    66,     0,     0,     0,     0,     0,
+      67,    68,    69,    70,    71,    72,    73,    74,     0,     0,
+       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    61,    62,    63,    64,     0,     0,
+       0,     0,     0,   103,     0,     0,     0,     0,     0,    65,
+      66,     0,     0,     0,     0,     0,    67,    68,    69,    70,
+      71,    72,    73,    74,     0,    61,    62,    63,    64,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      65,    66,     0,     0,     0,     0,     0,    67,    68,    69,
+      70,    71,    72,    73,    74,     0,     0,     0,   224,     0,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    61,    62,    63,    64,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   236,    65,    66,     0,     0,
+       0,     0,     0,    67,    68,    69,    70,    71,    72,    73,
+      74,     0,     0,     0,     0,     0,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    61,    62,    63,
+      64,     0,     0,     0,     0,     0,   237,     0,     0,     0,
+       0,     0,    65,    66,     0,     0,     0,     0,     0,    67,
+      68,    69,    70,    71,    72,    73,    74,     0,    61,    62,
+      63,    64,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    65,    66,     0,     0,     0,     0,     0,
+      67,    68,    69,    70,    71,    72,    73,    74,     0,    61,
+      62,    63,    64,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    65,    66,     0,     0,     0,     0,
+       0,    67,    68,    69,    70,    71,    72,    73,    74,     0,
+    -113,    62,    63,     0,     0,     0,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    65,    66,     0,     0,    62,
+      63,     0,  -113,  -113,  -113,  -113,  -113,  -113,    73,    74,
+       0,     0,     0,     0,     0,     0,     0,  -113,    78,    79,
+      80,    81,    82,    83,    84,    85,    73,    74,     0,     0,
+       0,     0,     0,     0,     0,     0,    78,    79,    80,    81,
+      82,    83,    84,    85
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,     4,    56,     5,    58,    11,    12,     7,    44,    10,
-      54,    13,    13,    57,     0,    20,    17,    22,    19,   115,
-      21,    29,    54,    28,    15,    57,   122,    63,    29,     1,
-      31,    16,   120,    56,     4,    53,    55,     5,    38,    38,
-       5,    39,    40,     5,    42,    13,    39,    40,    13,    42,
-       1,     4,    55,     4,     4,    56,     7,    59,    60,    60,
+       1,   121,    45,     5,     7,    11,    12,     4,     0,    10,
+      55,    13,    13,    58,    54,    20,    17,    22,    19,   116,
+      21,    64,    15,    28,    55,    29,   123,    58,    29,     1,
+      31,    16,    57,    30,     4,     4,    39,    51,    52,    53,
+      54,     4,    40,    41,    39,    43,    40,    41,     5,    43,
+      57,    27,    59,     4,     4,     1,    57,   177,    60,    61,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    55,    89,    55,    94,    38,   176,    90,
-       1,    59,    60,     4,    59,    60,     7,    59,    60,    27,
-     101,   102,     4,     4,   105,    56,    50,    51,    52,    53,
-     115,   117,    63,     1,   120,    57,    53,   122,   206,   207,
-     208,    61,     4,     5,     6,     7,     8,    38,    58,    58,
-      63,    44,    14,    53,    55,    17,    13,    55,    55,    21,
-      22,    57,     4,    43,    26,    56,    28,    29,    53,    53,
-     151,    61,    63,     4,    53,   156,    38,     4,     4,     5,
-       6,     7,     8,     4,    44,    43,    58,    49,    58,   170,
-     176,   172,    43,    55,    56,     4,    30,    59,    60,    61,
-      62,    53,    58,    29,    53,    94,    56,   188,    56,   190,
-      53,   195,    38,    53,   242,   156,    99,   198,   199,    -1,
-     206,   207,   208,    49,    -1,    -1,    -1,    -1,   209,    55,
-      56,    -1,    -1,    59,    60,   216,    62,   218,    -1,    -1,
-     221,   222,    -1,    -1,    -1,    -1,    -1,     0,     1,    -1,
-      -1,     4,     5,    -1,     7,   236,     9,    10,    11,    12,
-      13,    -1,   243,   244,    -1,    18,    19,    20,   249,    -1,
-      23,    24,    25,    -1,    27,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    -1,    -1,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    -1,    -1,    57,    58,    59,    60,    61,     1,
-      63,    -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      81,    82,    83,    84,    56,    90,    56,   207,   208,   209,
+      91,    95,     1,    56,     1,     4,    56,     4,     7,    58,
+       7,   102,   103,    60,    61,   106,     4,     5,     6,     7,
+       8,   116,   118,     5,    54,   121,    59,    62,   123,     5,
+      59,    13,    64,    45,    54,    56,    13,    13,    56,    56,
+      39,    29,    39,    44,    58,    54,     4,    54,    54,    10,
+      11,    39,    62,     4,     4,     4,    45,    44,    57,    59,
+      57,   152,    50,    24,    59,    64,   157,    64,    56,    57,
+      44,    54,    60,    61,     4,    63,    37,    38,    60,    61,
+     171,   177,   173,    54,    60,    61,    47,    48,    49,    50,
+      51,    52,    53,    54,    59,    57,    30,    57,   189,    54,
+     191,    54,    95,   243,   100,   157,   196,    -1,   199,   200,
+      -1,   207,   208,   209,    -1,    -1,    -1,    -1,    -1,   210,
+      -1,    -1,    -1,    -1,    -1,    -1,   217,    -1,   219,    -1,
+      -1,   222,   223,    -1,    -1,    -1,    -1,    -1,     0,     1,
+      -1,    -1,     4,     5,    -1,     7,   237,     9,    10,    11,
+      12,    13,    -1,   244,   245,    -1,    18,    19,    20,   250,
+      -1,    23,    24,    25,    -1,    27,    -1,    -1,    -1,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      42,    -1,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    -1,    58,    59,    60,    61,
+      62,     1,    64,    -1,     4,     5,     6,     7,     8,    -1,
+      -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    -1,    -1,
+      -1,    21,    22,    -1,    -1,    -1,    26,     1,    28,    29,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    39,
+      14,    -1,    -1,    17,    -1,    -1,    -1,    21,    22,    -1,
+      50,    -1,    26,    -1,    28,    29,    56,    57,    -1,    59,
+      60,    61,    62,    63,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    -1,    60,    61,    62,    63,
+       1,    -1,    -1,     4,     5,     6,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    14,    -1,    -1,    17,    -1,    -1,    -1,
+      21,    22,    -1,    -1,    -1,    26,     1,    28,    29,     4,
+       5,     6,     7,     8,    -1,    -1,    -1,    -1,    39,    14,
+      -1,    -1,    17,    -1,    -1,    -1,    21,    22,    -1,    50,
+      -1,    26,    -1,    28,    29,    56,    57,    -1,    -1,    60,
+      61,    -1,    63,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    -1,    -1,    60,    61,     1,    63,    -1,
+       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
+      14,    -1,    -1,    17,    -1,    -1,    -1,    21,    22,    -1,
+      -1,    -1,    26,     1,    28,    29,     4,     5,     6,     7,
+       8,    -1,    -1,    -1,    -1,    39,    14,    -1,    -1,    17,
+      -1,    -1,    -1,    21,    22,    -1,    50,    -1,    26,    -1,
+      28,    29,    56,    57,    -1,    -1,    60,    61,    -1,    63,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
+       7,     8,    50,    -1,    -1,    -1,    -1,    -1,    56,    57,
+      -1,    -1,    60,    61,    -1,    63,     4,     5,     6,     7,
+       8,    -1,    29,    -1,    -1,    -1,    14,    -1,    -1,    17,
+      -1,    -1,    39,    21,    22,    -1,    -1,    -1,    26,    -1,
+      28,    29,     4,     5,     6,     7,     8,    -1,    -1,    56,
+      57,    39,    14,    60,    61,    17,    63,    -1,    -1,    21,
+      22,    -1,    50,    -1,    26,    -1,    28,    29,    56,    57,
+      -1,    -1,    60,    61,    62,    63,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
+      -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,
+      -1,    63,     4,     5,     6,     7,     8,    -1,    -1,    -1,
       -1,    -1,    14,    -1,    -1,    17,    -1,    -1,    -1,    21,
       22,    -1,    -1,    -1,    26,    -1,    28,    29,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,    61,
-      62,     1,    -1,    -1,     4,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    -1,    -1,
-      -1,    21,    22,    -1,    -1,    -1,    26,    -1,    28,    29,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    -1,    59,
-      60,    61,    62,     1,    -1,    -1,     4,     5,     6,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
-      -1,    -1,    -1,    21,    22,    -1,    -1,    -1,    26,    -1,
-      28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      38,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,
-       8,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      -1,    59,    60,     1,    62,    -1,     4,     5,     6,     7,
-       8,    29,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
-      38,    -1,    -1,    21,    22,    -1,    -1,    -1,    26,    -1,
-      28,    29,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      38,    59,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      -1,    59,    60,     1,    62,    -1,     4,     5,     6,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
-      -1,    -1,    -1,    21,    22,    -1,    -1,    -1,    26,    -1,
-      28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      -1,    59,    60,     1,    62,    -1,     4,     5,     6,     7,
-       8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
-      -1,    -1,    -1,    21,    22,    -1,    -1,    -1,    26,    -1,
-      28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      -1,    59,    60,    -1,    62,     4,     5,     6,     7,     8,
-      -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    -1,
-      -1,    -1,    21,    22,    -1,    -1,    -1,    26,    -1,    28,
-      29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
+      -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,
+      -1,    63,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    14,    -1,    -1,    17,    -1,    -1,    -1,    21,
+      22,    -1,    -1,    -1,    26,    -1,    28,    29,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,     9,    10,    11,    12,    -1,    -1,    -1,    50,    -1,
+      -1,    -1,    -1,    -1,    56,    57,    24,    25,    60,    61,
+      -1,    63,    -1,    31,    32,    33,    34,    35,    36,    37,
+      38,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     9,    10,    11,
+      12,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    -1,    31,
+      32,    33,    34,    35,    36,    37,    38,    -1,    -1,    -1,
+      -1,    -1,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     9,    10,    11,    12,    -1,    -1,    -1,
+      62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,
+      -1,    -1,    -1,    -1,    -1,    31,    32,    33,    34,    35,
+      36,    37,    38,    -1,    -1,    -1,    -1,    -1,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     9,
+      10,    11,    12,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    24,    25,    -1,    -1,    -1,    -1,
+      -1,    31,    32,    33,    34,    35,    36,    37,    38,    -1,
+      -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     9,    10,    11,    12,    -1,
+      -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      24,    25,    -1,    -1,    -1,    10,    11,    31,    32,    33,
+      34,    35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    37,    38,    58,     9,    10,    11,    12,    -1,
+      -1,    -1,    47,    48,    49,    50,    51,    52,    53,    54,
+      24,    25,    -1,    -1,    -1,    -1,    -1,    31,    32,    33,
+      34,    35,    36,    37,    38,    -1,     9,    10,    11,    12,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    24,    25,    -1,    58,    -1,    -1,    -1,    31,    32,
+      33,    34,    35,    36,    37,    38,    -1,     9,    10,    11,
+      12,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    24,    25,    -1,    58,    -1,    -1,    -1,    31,
+      32,    33,    34,    35,    36,    37,    38,    -1,     9,    10,
+      11,    12,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    24,    25,    -1,    58,    -1,    -1,    -1,
+      31,    32,    33,    34,    35,    36,    37,    38,    -1,     9,
+      10,    11,    12,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    24,    25,    -1,    58,    -1,    -1,
+      -1,    31,    32,    33,    34,    35,    36,    37,    38,    -1,
+      -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,     9,    10,    11,    12,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      49,    -1,    -1,    -1,    -1,    54,    55,    56,    -1,    -1,
-      59,    60,    -1,    62,     4,     5,     6,     7,     8,    -1,
-      -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    -1,    -1,
-      -1,    21,    22,    -1,    -1,    -1,    26,    -1,    28,    29,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      -1,    -1,    -1,    -1,    54,    55,    56,    -1,    -1,    59,
-      60,    -1,    62,     4,     5,     6,     7,     8,    -1,    -1,
-      -1,    -1,    -1,    14,    -1,    -1,    17,    -1,    -1,    -1,
-      21,    22,    -1,    -1,    -1,    26,    -1,    28,    29,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,
-      -1,     9,    10,    11,    12,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    24,    25,    59,    60,
-      -1,    62,    30,    31,    32,    33,    34,    35,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,     9,    10,    11,    12,
-      58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,     9,    10,    11,    12,    -1,    -1,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,     9,    10,    11,    12,
-      -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,     9,    10,    11,    12,    -1,    -1,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    -1,    -1,    57,
+      -1,    24,    25,    -1,    -1,    -1,    -1,    -1,    31,    32,
+      33,    34,    35,    36,    37,    38,    -1,    -1,    -1,    -1,
+      -1,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,     9,    10,    11,    12,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,
+      -1,    -1,    -1,    -1,    -1,    31,    32,    33,    34,    35,
+      36,    37,    38,    -1,    -1,    -1,    -1,    -1,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
        9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-       9,    10,    11,    12,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    24,    25,    -1,    57,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-       9,    10,    11,    12,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    24,    25,    -1,    57,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-       9,    10,    11,    12,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    24,    25,    -1,    57,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-       9,    10,    11,    12,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    24,    25,    -1,    57,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-      -1,    -1,    -1,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     9,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    30,
-      31,    32,    33,    34,    35,    36,    37,    -1,    -1,    -1,
-      -1,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,     9,    10,    11,    12,    -1,    -1,
+      -1,    -1,    31,    32,    33,    34,    35,    36,    37,    38,
+      -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,     9,    10,    11,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    -1,    31,
+      32,    33,    34,    35,    36,    37,    38,    -1,    -1,    -1,
+      -1,    -1,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,     9,    10,    11,    12,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,
-      25,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
-      35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,
+      25,    -1,    -1,    -1,    -1,    -1,    31,    32,    33,    34,
+      35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    37,    -1,
-      -1,    -1,    -1,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     9,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    19,    20,    -1,    -1,    -1,    24,    25,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,     9,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,
-      -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,     9,    10,    11,
-      12,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    24,    25,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,    -1,    -1,    41,
-      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    23,    24,    25,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    -1,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,     9,    10,    11,
+      55,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,
+      -1,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,
+      38,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,     9,    10,
+      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    19,    20,
+      -1,    -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    -1,
+      31,    32,    33,    34,    35,    36,    37,    38,    -1,    -1,
+      -1,    -1,    -1,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     9,    10,    11,    12,    -1,    -1,
+      -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    24,
+      25,    -1,    -1,    -1,    -1,    -1,    31,    32,    33,    34,
+      35,    36,    37,    38,    -1,     9,    10,    11,    12,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      24,    25,    -1,    -1,    -1,    -1,    -1,    31,    32,    33,
+      34,    35,    36,    37,    38,    -1,    -1,    -1,    42,    -1,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    23,    24,    25,    -1,    -1,
+      -1,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,
+      38,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     9,    10,    11,
       12,    -1,    -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,
-      -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,     9,    10,    11,
-      12,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    24,    25,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,     9,    10,    11,
-      12,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    24,    25,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,     9,    10,    11,
-      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    24,    25,    -1,    -1,    10,    11,    30,    31,
-      32,    33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
-      24,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    36,    37,    10,    11,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
-      -1,    -1,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    52,    53
+      -1,    -1,    24,    25,    -1,    -1,    -1,    -1,    -1,    31,
+      32,    33,    34,    35,    36,    37,    38,    -1,     9,    10,
+      11,    12,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    24,    25,    -1,    -1,    -1,    -1,    -1,
+      31,    32,    33,    34,    35,    36,    37,    38,    -1,     9,
+      10,    11,    12,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    24,    25,    -1,    -1,    -1,    -1,
+      -1,    31,    32,    33,    34,    35,    36,    37,    38,    -1,
+       9,    10,    11,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    24,    25,    -1,    -1,    10,
+      11,    -1,    31,    32,    33,    34,    35,    36,    37,    38,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    37,    38,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    47,    48,    49,    50,
+      51,    52,    53,    54
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    15,    65,    66,     4,     5,     6,     7,     8,    14,
-      17,    21,    22,    26,    28,    29,    38,    49,    55,    56,
-      59,    60,    62,    69,    71,    74,    80,     0,    16,    67,
-      70,    56,    53,    38,     4,    69,    80,    80,    69,    55,
-       1,    55,    75,    69,     4,     1,    69,     1,     4,     7,
-      74,     1,    61,    69,     1,     4,    56,    74,    83,    84,
-       9,    10,    11,    12,    24,    25,    30,    31,    32,    33,
-      34,    35,    36,    37,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    69,     5,    13,    59,
-      60,    74,    68,    69,    71,    67,    69,    81,    82,    76,
-      56,    58,    18,    13,    13,    27,     4,     4,    77,    57,
-      57,     1,    53,    61,    61,    44,    63,    58,     1,    69,
-      58,    63,    44,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    53,    55,    74,
-       1,    58,    61,    69,    13,    68,    54,    57,    77,     4,
-      55,    72,    73,    69,     1,    69,    55,    55,     1,    69,
-      43,    39,    40,    42,     1,    83,    49,    79,    80,    57,
-      57,    79,    83,     4,    53,    61,    69,    53,    58,    61,
-       4,    55,    82,    42,     4,    54,    57,    54,    19,    20,
-      78,     4,     4,    69,    69,    79,    43,    58,    58,    43,
-      61,    61,    69,    53,    54,    69,     4,    73,    58,    69,
-      69,    56,    56,    41,    79,    79,    79,    69,    53,    53,
-      61,    54,    54,    69,    69,    23,    18,    69,    69,    53,
-      54,    54,    69,    54,    54,    78,    69,    69,    57,    54,
-      57,    69,    57
+       0,    15,    66,    67,     4,     5,     6,     7,     8,    14,
+      17,    21,    22,    26,    28,    29,    39,    50,    56,    57,
+      60,    61,    63,    70,    72,    75,    81,     0,    16,    68,
+      71,    57,    54,    39,     4,    70,    81,    81,    70,    56,
+       1,    56,    76,    70,     4,    30,     1,    70,     1,     4,
+       7,    75,     1,    62,    70,     1,     4,    57,    75,    84,
+      85,     9,    10,    11,    12,    24,    25,    31,    32,    33,
+      34,    35,    36,    37,    38,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    70,     5,    13,
+      60,    61,    75,    69,    70,    72,    68,    70,    82,    83,
+      77,    57,    59,    18,    13,    13,    27,     4,     4,    78,
+      58,    58,     1,    54,    62,    62,    45,    64,    59,     1,
+      70,    59,    64,    45,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    54,    56,
+      75,     1,    59,    62,    70,    13,    69,    55,    58,    78,
+       4,    56,    73,    74,    70,     1,    70,    56,    56,     1,
+      70,    44,    40,    41,    43,     1,    84,    50,    80,    81,
+      58,    58,    80,    84,     4,    54,    62,    70,    54,    59,
+      62,     4,    56,    83,    43,     4,    55,    58,    55,    19,
+      20,    79,     4,     4,    70,    70,    80,    44,    59,    59,
+      44,    62,    62,    70,    54,    55,    70,     4,    74,    59,
+      70,    70,    57,    57,    42,    80,    80,    80,    70,    54,
+      54,    62,    55,    55,    70,    70,    23,    18,    70,    70,
+      54,    55,    55,    70,    55,    55,    79,    70,    70,    58,
+      55,    58,    70,    58
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    64,    65,    65,    66,    66,    67,    67,    68,    68,
-      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    70,    70,
-      70,    70,    71,    71,    72,    72,    73,    73,    75,    74,
-      76,    74,    77,    77,    77,    78,    78,    79,    79,    79,
-      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
-      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
-      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
-      80,    80,    80,    80,    80,    80,    80,    80,    81,    81,
-      82,    83,    83,    83,    83,    84,    84,    84,    84,    84,
-      84
+       0,    65,    66,    66,    67,    67,    68,    68,    69,    69,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    71,    71,
+      71,    71,    72,    72,    73,    73,    74,    74,    76,    75,
+      77,    75,    78,    78,    78,    79,    79,    80,    80,    80,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    81,    82,
+      82,    83,    84,    84,    84,    84,    85,    85,    85,    85,
+      85,    85
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1294,9 +1278,9 @@ static const yytype_uint8 yyr2[] =
        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,     1,     4,     3,     3,     4,     3,     1,     3,
-       1,     0,     1,     3,     3,     3,     3,     1,     1,     5,
-       5
+       3,     2,     2,     1,     4,     3,     3,     4,     3,     1,
+       3,     1,     0,     1,     3,     3,     3,     3,     1,     1,
+       5,     5
 };
 
 
@@ -1799,133 +1783,133 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
           case 4: /* IDENT  */
 #line 35 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1803 "parser.c" /* yacc.c:1257  */
+#line 1787 "parser.c" /* yacc.c:1257  */
         break;
 
     case 5: /* FIELD  */
 #line 35 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1809 "parser.c" /* yacc.c:1257  */
+#line 1793 "parser.c" /* yacc.c:1257  */
         break;
 
     case 6: /* LITERAL  */
 #line 35 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1815 "parser.c" /* yacc.c:1257  */
+#line 1799 "parser.c" /* yacc.c:1257  */
         break;
 
     case 7: /* FORMAT  */
 #line 35 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1821 "parser.c" /* yacc.c:1257  */
+#line 1805 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 39: /* QQSTRING_TEXT  */
+    case 40: /* QQSTRING_TEXT  */
 #line 35 "parser.y" /* yacc.c:1257  */
       { jv_free(((*yyvaluep).literal)); }
-#line 1827 "parser.c" /* yacc.c:1257  */
+#line 1811 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 66: /* Module  */
+    case 67: /* Module  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1833 "parser.c" /* yacc.c:1257  */
+#line 1817 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 67: /* Imports  */
+    case 68: /* Imports  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1839 "parser.c" /* yacc.c:1257  */
+#line 1823 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 68: /* FuncDefs  */
+    case 69: /* FuncDefs  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1845 "parser.c" /* yacc.c:1257  */
+#line 1829 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 69: /* Exp  */
+    case 70: /* Exp  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1851 "parser.c" /* yacc.c:1257  */
+#line 1835 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 70: /* Import  */
+    case 71: /* Import  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1857 "parser.c" /* yacc.c:1257  */
+#line 1841 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 71: /* FuncDef  */
+    case 72: /* FuncDef  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1863 "parser.c" /* yacc.c:1257  */
+#line 1847 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 72: /* Params  */
+    case 73: /* Params  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1869 "parser.c" /* yacc.c:1257  */
+#line 1853 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 73: /* Param  */
+    case 74: /* Param  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1875 "parser.c" /* yacc.c:1257  */
+#line 1859 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 74: /* String  */
+    case 75: /* String  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1881 "parser.c" /* yacc.c:1257  */
+#line 1865 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 77: /* QQString  */
+    case 78: /* QQString  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1887 "parser.c" /* yacc.c:1257  */
+#line 1871 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 78: /* ElseBody  */
+    case 79: /* ElseBody  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1893 "parser.c" /* yacc.c:1257  */
+#line 1877 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 79: /* ExpD  */
+    case 80: /* ExpD  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1899 "parser.c" /* yacc.c:1257  */
+#line 1883 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 80: /* Term  */
+    case 81: /* Term  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1905 "parser.c" /* yacc.c:1257  */
+#line 1889 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 81: /* Args  */
+    case 82: /* Args  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1911 "parser.c" /* yacc.c:1257  */
+#line 1895 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 82: /* Arg  */
+    case 83: /* Arg  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1917 "parser.c" /* yacc.c:1257  */
+#line 1901 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 83: /* MkDict  */
+    case 84: /* MkDict  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1923 "parser.c" /* yacc.c:1257  */
+#line 1907 "parser.c" /* yacc.c:1257  */
         break;
 
-    case 84: /* MkDictPair  */
+    case 85: /* MkDictPair  */
 #line 36 "parser.y" /* yacc.c:1257  */
       { block_free(((*yyvaluep).blk)); }
-#line 1929 "parser.c" /* yacc.c:1257  */
+#line 1913 "parser.c" /* yacc.c:1257  */
         break;
 
 
@@ -2217,31 +2201,31 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 268 "parser.y" /* yacc.c:1646  */
+#line 269 "parser.y" /* yacc.c:1646  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
 }
-#line 2225 "parser.c" /* yacc.c:1646  */
+#line 2209 "parser.c" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 271 "parser.y" /* yacc.c:1646  */
+#line 272 "parser.y" /* yacc.c:1646  */
     {
   *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2233 "parser.c" /* yacc.c:1646  */
+#line 2217 "parser.c" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 276 "parser.y" /* yacc.c:1646  */
+#line 277 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2241 "parser.c" /* yacc.c:1646  */
+#line 2225 "parser.c" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 279 "parser.y" /* yacc.c:1646  */
+#line 280 "parser.y" /* yacc.c:1646  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant.");
@@ -2250,358 +2234,358 @@ yyreduce:
     (yyval.blk) = gen_module((yyvsp[-1].blk));
   }
 }
-#line 2254 "parser.c" /* yacc.c:1646  */
+#line 2238 "parser.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 289 "parser.y" /* yacc.c:1646  */
+#line 290 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2262 "parser.c" /* yacc.c:1646  */
+#line 2246 "parser.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 292 "parser.y" /* yacc.c:1646  */
+#line 293 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2270 "parser.c" /* yacc.c:1646  */
+#line 2254 "parser.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 297 "parser.y" /* yacc.c:1646  */
+#line 298 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop();
 }
-#line 2278 "parser.c" /* yacc.c:1646  */
+#line 2262 "parser.c" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 300 "parser.y" /* yacc.c:1646  */
+#line 301 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2286 "parser.c" /* yacc.c:1646  */
+#line 2270 "parser.c" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 305 "parser.y" /* yacc.c:1646  */
+#line 306 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
 }
-#line 2294 "parser.c" /* yacc.c:1646  */
+#line 2278 "parser.c" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 309 "parser.y" /* yacc.c:1646  */
+#line 310 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_var_binding((yyvsp[-5].blk), jv_string_value((yyvsp[-2].literal)), (yyvsp[0].blk));
   jv_free((yyvsp[-2].literal));
 }
-#line 2303 "parser.c" /* yacc.c:1646  */
+#line 2287 "parser.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 314 "parser.y" /* yacc.c:1646  */
+#line 315 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_reduce(jv_string_value((yyvsp[-5].literal)), (yyvsp[-8].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-5].literal));
 }
-#line 2312 "parser.c" /* yacc.c:1646  */
+#line 2296 "parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 319 "parser.y" /* yacc.c:1646  */
+#line 320 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_foreach(jv_string_value((yyvsp[-7].literal)), (yyvsp[-10].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
   jv_free((yyvsp[-7].literal));
 }
-#line 2321 "parser.c" /* yacc.c:1646  */
+#line 2305 "parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 324 "parser.y" /* yacc.c:1646  */
+#line 325 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_foreach(jv_string_value((yyvsp[-5].literal)), (yyvsp[-8].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
   jv_free((yyvsp[-5].literal));
 }
-#line 2330 "parser.c" /* yacc.c:1646  */
+#line 2314 "parser.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 329 "parser.y" /* yacc.c:1646  */
+#line 330 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2338 "parser.c" /* yacc.c:1646  */
+#line 2322 "parser.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 332 "parser.y" /* yacc.c:1646  */
+#line 333 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "Possibly unterminated 'if' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2347 "parser.c" /* yacc.c:1646  */
+#line 2331 "parser.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 337 "parser.y" /* yacc.c:1646  */
+#line 338 "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 2356 "parser.c" /* yacc.c:1646  */
+#line 2340 "parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 341 "parser.y" /* yacc.c:1646  */
+#line 342 "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 2365 "parser.c" /* yacc.c:1646  */
+#line 2349 "parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 345 "parser.y" /* yacc.c:1646  */
+#line 346 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "Possibly unterminated 'try' statement");
   (yyval.blk) = (yyvsp[-2].blk);
 }
-#line 2374 "parser.c" /* yacc.c:1646  */
+#line 2358 "parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 350 "parser.y" /* yacc.c:1646  */
+#line 351 "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 2385 "parser.c" /* yacc.c:1646  */
+#line 2369 "parser.c" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 362 "parser.y" /* yacc.c:1646  */
+#line 363 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
 }
-#line 2393 "parser.c" /* yacc.c:1646  */
+#line 2377 "parser.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 366 "parser.y" /* yacc.c:1646  */
+#line 367 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2401 "parser.c" /* yacc.c:1646  */
+#line 2385 "parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 370 "parser.y" /* yacc.c:1646  */
+#line 371 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2409 "parser.c" /* yacc.c:1646  */
+#line 2393 "parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 374 "parser.y" /* yacc.c:1646  */
+#line 375 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2417 "parser.c" /* yacc.c:1646  */
+#line 2401 "parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 378 "parser.y" /* yacc.c:1646  */
+#line 379 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2425 "parser.c" /* yacc.c:1646  */
+#line 2409 "parser.c" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 382 "parser.y" /* yacc.c:1646  */
+#line 383 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2433 "parser.c" /* yacc.c:1646  */
+#line 2417 "parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 386 "parser.y" /* yacc.c:1646  */
+#line 387 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
 }
-#line 2441 "parser.c" /* yacc.c:1646  */
+#line 2425 "parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 390 "parser.y" /* yacc.c:1646  */
+#line 391 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); 
 }
-#line 2449 "parser.c" /* yacc.c:1646  */
+#line 2433 "parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 394 "parser.y" /* yacc.c:1646  */
+#line 395 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); 
 }
-#line 2457 "parser.c" /* yacc.c:1646  */
+#line 2441 "parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 398 "parser.y" /* yacc.c:1646  */
+#line 399 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2465 "parser.c" /* yacc.c:1646  */
+#line 2449 "parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 402 "parser.y" /* yacc.c:1646  */
+#line 403 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
 }
-#line 2473 "parser.c" /* yacc.c:1646  */
+#line 2457 "parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 406 "parser.y" /* yacc.c:1646  */
+#line 407 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2481 "parser.c" /* yacc.c:1646  */
+#line 2465 "parser.c" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 410 "parser.y" /* yacc.c:1646  */
+#line 411 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2489 "parser.c" /* yacc.c:1646  */
+#line 2473 "parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 414 "parser.y" /* yacc.c:1646  */
+#line 415 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
 }
-#line 2497 "parser.c" /* yacc.c:1646  */
+#line 2481 "parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 418 "parser.y" /* yacc.c:1646  */
+#line 419 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2505 "parser.c" /* yacc.c:1646  */
+#line 2489 "parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 422 "parser.y" /* yacc.c:1646  */
+#line 423 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
 }
-#line 2513 "parser.c" /* yacc.c:1646  */
+#line 2497 "parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 426 "parser.y" /* yacc.c:1646  */
+#line 427 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2521 "parser.c" /* yacc.c:1646  */
+#line 2505 "parser.c" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 430 "parser.y" /* yacc.c:1646  */
+#line 431 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2529 "parser.c" /* yacc.c:1646  */
+#line 2513 "parser.c" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 434 "parser.y" /* yacc.c:1646  */
+#line 435 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
 }
-#line 2537 "parser.c" /* yacc.c:1646  */
+#line 2521 "parser.c" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 438 "parser.y" /* yacc.c:1646  */
+#line 439 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
 }
-#line 2545 "parser.c" /* yacc.c:1646  */
+#line 2529 "parser.c" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 442 "parser.y" /* yacc.c:1646  */
+#line 443 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
 }
-#line 2553 "parser.c" /* yacc.c:1646  */
+#line 2537 "parser.c" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 446 "parser.y" /* yacc.c:1646  */
+#line 447 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
 }
-#line 2561 "parser.c" /* yacc.c:1646  */
+#line 2545 "parser.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 450 "parser.y" /* yacc.c:1646  */
+#line 451 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
 }
-#line 2569 "parser.c" /* yacc.c:1646  */
+#line 2553 "parser.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 454 "parser.y" /* yacc.c:1646  */
+#line 455 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
 }
-#line 2577 "parser.c" /* yacc.c:1646  */
+#line 2561 "parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 458 "parser.y" /* yacc.c:1646  */
+#line 459 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
 }
-#line 2585 "parser.c" /* yacc.c:1646  */
+#line 2569 "parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 462 "parser.y" /* yacc.c:1646  */
+#line 463 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
 }
-#line 2593 "parser.c" /* yacc.c:1646  */
+#line 2577 "parser.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 466 "parser.y" /* yacc.c:1646  */
+#line 467 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = (yyvsp[0].blk); 
 }
-#line 2601 "parser.c" /* yacc.c:1646  */
+#line 2585 "parser.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 471 "parser.y" /* yacc.c:1646  */
+#line 472 "parser.y" /* yacc.c:1646  */
     {
   jv v = block_const((yyvsp[-4].blk));
   // XXX Make gen_import take only blocks and the int is_data so we
@@ -2611,11 +2595,11 @@ yyreduce:
   jv_free((yyvsp[-1].literal));
   jv_free(v);
 }
-#line 2615 "parser.c" /* yacc.c:1646  */
+#line 2599 "parser.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 480 "parser.y" /* yacc.c:1646  */
+#line 481 "parser.y" /* yacc.c:1646  */
     {
   jv v = block_const((yyvsp[-3].blk));
   (yyval.blk) = gen_import(jv_string_value(v), gen_noop(), jv_string_value((yyvsp[-1].literal)), 0);
@@ -2623,11 +2607,11 @@ yyreduce:
   jv_free((yyvsp[-1].literal));
   jv_free(v);
 }
-#line 2627 "parser.c" /* yacc.c:1646  */
+#line 2611 "parser.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 487 "parser.y" /* yacc.c:1646  */
+#line 488 "parser.y" /* yacc.c:1646  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant.");
@@ -2640,11 +2624,11 @@ yyreduce:
   block_free((yyvsp[-4].blk));
   jv_free((yyvsp[-2].literal));
 }
-#line 2644 "parser.c" /* yacc.c:1646  */
+#line 2628 "parser.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 499 "parser.y" /* yacc.c:1646  */
+#line 500 "parser.y" /* yacc.c:1646  */
     {
   if (!block_is_const((yyvsp[-1].blk))) {
     FAIL((yyloc), "Module metadata must be constant.");
@@ -2657,173 +2641,173 @@ yyreduce:
   block_free((yyvsp[-5].blk));
   jv_free((yyvsp[-2].literal));
 }
-#line 2661 "parser.c" /* yacc.c:1646  */
+#line 2645 "parser.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 513 "parser.y" /* yacc.c:1646  */
+#line 514 "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 2670 "parser.c" /* yacc.c:1646  */
+#line 2654 "parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 518 "parser.y" /* yacc.c:1646  */
+#line 519 "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 2679 "parser.c" /* yacc.c:1646  */
+#line 2663 "parser.c" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 524 "parser.y" /* yacc.c:1646  */
+#line 525 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2687 "parser.c" /* yacc.c:1646  */
+#line 2671 "parser.c" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 527 "parser.y" /* yacc.c:1646  */
+#line 528 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2695 "parser.c" /* yacc.c:1646  */
+#line 2679 "parser.c" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 532 "parser.y" /* yacc.c:1646  */
+#line 533 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2704 "parser.c" /* yacc.c:1646  */
+#line 2688 "parser.c" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 537 "parser.y" /* yacc.c:1646  */
+#line 538 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
   jv_free((yyvsp[0].literal));
 }
-#line 2713 "parser.c" /* yacc.c:1646  */
+#line 2697 "parser.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 544 "parser.y" /* yacc.c:1646  */
+#line 545 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = jv_string("text"); }
-#line 2719 "parser.c" /* yacc.c:1646  */
+#line 2703 "parser.c" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 544 "parser.y" /* yacc.c:1646  */
+#line 545 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2728 "parser.c" /* yacc.c:1646  */
+#line 2712 "parser.c" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 548 "parser.y" /* yacc.c:1646  */
+#line 549 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[-1].literal); }
-#line 2734 "parser.c" /* yacc.c:1646  */
+#line 2718 "parser.c" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 548 "parser.y" /* yacc.c:1646  */
+#line 549 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
   jv_free((yyvsp[-2].literal));
 }
-#line 2743 "parser.c" /* yacc.c:1646  */
+#line 2727 "parser.c" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 555 "parser.y" /* yacc.c:1646  */
+#line 556 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_const(jv_string(""));
 }
-#line 2751 "parser.c" /* yacc.c:1646  */
+#line 2735 "parser.c" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 558 "parser.y" /* yacc.c:1646  */
+#line 559 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
 }
-#line 2759 "parser.c" /* yacc.c:1646  */
+#line 2743 "parser.c" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 561 "parser.y" /* yacc.c:1646  */
+#line 562 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
 }
-#line 2767 "parser.c" /* yacc.c:1646  */
+#line 2751 "parser.c" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 567 "parser.y" /* yacc.c:1646  */
+#line 568 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
 }
-#line 2775 "parser.c" /* yacc.c:1646  */
+#line 2759 "parser.c" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 570 "parser.y" /* yacc.c:1646  */
+#line 571 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[-1].blk);
 }
-#line 2783 "parser.c" /* yacc.c:1646  */
+#line 2767 "parser.c" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 575 "parser.y" /* yacc.c:1646  */
+#line 576 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2791 "parser.c" /* yacc.c:1646  */
+#line 2775 "parser.c" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 578 "parser.y" /* yacc.c:1646  */
+#line 579 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
 }
-#line 2799 "parser.c" /* yacc.c:1646  */
+#line 2783 "parser.c" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 581 "parser.y" /* yacc.c:1646  */
+#line 582 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 2807 "parser.c" /* yacc.c:1646  */
+#line 2791 "parser.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 587 "parser.y" /* yacc.c:1646  */
+#line 588 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_noop(); 
 }
-#line 2815 "parser.c" /* yacc.c:1646  */
+#line 2799 "parser.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 590 "parser.y" /* yacc.c:1646  */
+#line 591 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_call("recurse", gen_noop());
 }
-#line 2823 "parser.c" /* yacc.c:1646  */
+#line 2807 "parser.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 593 "parser.y" /* yacc.c:1646  */
+#line 594 "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,
@@ -2832,231 +2816,231 @@ yyreduce:
   jv_free(v);
   jv_free((yyvsp[0].literal));
 }
-#line 2836 "parser.c" /* yacc.c:1646  */
+#line 2820 "parser.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 601 "parser.y" /* yacc.c:1646  */
+#line 602 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "break requires a label to break to");
   (yyval.blk) = gen_noop();
 }
-#line 2845 "parser.c" /* yacc.c:1646  */
+#line 2829 "parser.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 605 "parser.y" /* yacc.c:1646  */
+#line 606 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
 }
-#line 2853 "parser.c" /* yacc.c:1646  */
+#line 2837 "parser.c" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 608 "parser.y" /* yacc.c:1646  */
+#line 609 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); 
 }
-#line 2861 "parser.c" /* yacc.c:1646  */
+#line 2845 "parser.c" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 611 "parser.y" /* yacc.c:1646  */
+#line 612 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
 }
-#line 2869 "parser.c" /* yacc.c:1646  */
+#line 2853 "parser.c" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 614 "parser.y" /* yacc.c:1646  */
+#line 615 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
 }
-#line 2877 "parser.c" /* yacc.c:1646  */
+#line 2861 "parser.c" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 617 "parser.y" /* yacc.c:1646  */
+#line 618 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
 }
-#line 2885 "parser.c" /* yacc.c:1646  */
+#line 2869 "parser.c" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 620 "parser.y" /* yacc.c:1646  */
+#line 621 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); 
 }
-#line 2893 "parser.c" /* yacc.c:1646  */
+#line 2877 "parser.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 623 "parser.y" /* yacc.c:1646  */
+#line 624 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 2901 "parser.c" /* yacc.c:1646  */
+#line 2885 "parser.c" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 626 "parser.y" /* yacc.c:1646  */
+#line 627 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
 }
-#line 2909 "parser.c" /* yacc.c:1646  */
+#line 2893 "parser.c" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 629 "parser.y" /* yacc.c:1646  */
+#line 630 "parser.y" /* yacc.c:1646  */
     {
   FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
   (yyval.blk) = gen_noop();
 }
-#line 2918 "parser.c" /* yacc.c:1646  */
+#line 2902 "parser.c" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 633 "parser.y" /* yacc.c:1646  */
+#line 634 "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 2928 "parser.c" /* yacc.c:1646  */
+#line 2912 "parser.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 639 "parser.y" /* yacc.c:1646  */
+#line 640 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); 
 }
-#line 2936 "parser.c" /* yacc.c:1646  */
+#line 2920 "parser.c" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 642 "parser.y" /* yacc.c:1646  */
+#line 643 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); 
 }
-#line 2944 "parser.c" /* yacc.c:1646  */
+#line 2928 "parser.c" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 645 "parser.y" /* yacc.c:1646  */
+#line 646 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); 
 }
-#line 2952 "parser.c" /* yacc.c:1646  */
+#line 2936 "parser.c" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 648 "parser.y" /* yacc.c:1646  */
+#line 649 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); 
 }
-#line 2960 "parser.c" /* yacc.c:1646  */
+#line 2944 "parser.c" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 651 "parser.y" /* yacc.c:1646  */
+#line 652 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 2968 "parser.c" /* yacc.c:1646  */
+#line 2952 "parser.c" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 654 "parser.y" /* yacc.c:1646  */
+#line 655 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
 }
-#line 2976 "parser.c" /* yacc.c:1646  */
+#line 2960 "parser.c" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 657 "parser.y" /* yacc.c:1646  */
+#line 658 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
 }
-#line 2984 "parser.c" /* yacc.c:1646  */
+#line 2968 "parser.c" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 660 "parser.y" /* yacc.c:1646  */
+#line 661 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
 }
-#line 2992 "parser.c" /* yacc.c:1646  */
+#line 2976 "parser.c" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 663 "parser.y" /* yacc.c:1646  */
+#line 664 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
 }
-#line 3000 "parser.c" /* yacc.c:1646  */
+#line 2984 "parser.c" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 666 "parser.y" /* yacc.c:1646  */
+#line 667 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
 }
-#line 3008 "parser.c" /* yacc.c:1646  */
+#line 2992 "parser.c" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 669 "parser.y" /* yacc.c:1646  */
+#line 670 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_const((yyvsp[0].literal)); 
 }
-#line 3016 "parser.c" /* yacc.c:1646  */
+#line 3000 "parser.c" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 672 "parser.y" /* yacc.c:1646  */
+#line 673 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3024 "parser.c" /* yacc.c:1646  */
+#line 3008 "parser.c" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 675 "parser.y" /* yacc.c:1646  */
+#line 676 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
 }
-#line 3032 "parser.c" /* yacc.c:1646  */
+#line 3016 "parser.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 678 "parser.y" /* yacc.c:1646  */
+#line 679 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = (yyvsp[-1].blk); 
 }
-#line 3040 "parser.c" /* yacc.c:1646  */
+#line 3024 "parser.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 681 "parser.y" /* yacc.c:1646  */
+#line 682 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_collect((yyvsp[-1].blk)); 
 }
-#line 3048 "parser.c" /* yacc.c:1646  */
+#line 3032 "parser.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 684 "parser.y" /* yacc.c:1646  */
+#line 685 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_const(jv_array()); 
 }
-#line 3056 "parser.c" /* yacc.c:1646  */
+#line 3040 "parser.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 687 "parser.y" /* yacc.c:1646  */
+#line 688 "parser.y" /* yacc.c:1646  */
     { 
   block o = gen_const_object((yyvsp[-1].blk));
   if (o.first != NULL)
@@ -3064,20 +3048,29 @@ yyreduce:
   else
     (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
 }
-#line 3068 "parser.c" /* yacc.c:1646  */
+#line 3052 "parser.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 694 "parser.y" /* yacc.c:1646  */
+#line 695 "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 3061 "parser.c" /* yacc.c:1646  */
+    break;
+
+  case 102:
+#line 699 "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 3077 "parser.c" /* yacc.c:1646  */
+#line 3070 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 698 "parser.y" /* yacc.c:1646  */
+  case 103:
+#line 703 "parser.y" /* yacc.c:1646  */
     {
   const char *s = jv_string_value((yyvsp[0].literal));
   if (strcmp(s, "false") == 0)
@@ -3090,143 +3083,143 @@ yyreduce:
     (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
   jv_free((yyvsp[0].literal));
 }
-#line 3094 "parser.c" /* yacc.c:1646  */
+#line 3087 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 710 "parser.y" /* yacc.c:1646  */
+  case 104:
+#line 715 "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 3104 "parser.c" /* yacc.c:1646  */
+#line 3097 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 715 "parser.y" /* yacc.c:1646  */
+  case 105:
+#line 720 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3110 "parser.c" /* yacc.c:1646  */
+#line 3103 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 716 "parser.y" /* yacc.c:1646  */
+  case 106:
+#line 721 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3116 "parser.c" /* yacc.c:1646  */
+#line 3109 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 717 "parser.y" /* yacc.c:1646  */
+  case 107:
+#line 722 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[-3].blk); }
-#line 3122 "parser.c" /* yacc.c:1646  */
+#line 3115 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 718 "parser.y" /* yacc.c:1646  */
+  case 108:
+#line 723 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = gen_noop(); }
-#line 3128 "parser.c" /* yacc.c:1646  */
+#line 3121 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 721 "parser.y" /* yacc.c:1646  */
+  case 109:
+#line 726 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = (yyvsp[0].blk);
 }
-#line 3136 "parser.c" /* yacc.c:1646  */
+#line 3129 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 724 "parser.y" /* yacc.c:1646  */
+  case 110:
+#line 729 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
 }
-#line 3144 "parser.c" /* yacc.c:1646  */
+#line 3137 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 729 "parser.y" /* yacc.c:1646  */
+  case 111:
+#line 734 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_lambda((yyvsp[0].blk));
 }
-#line 3152 "parser.c" /* yacc.c:1646  */
+#line 3145 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 734 "parser.y" /* yacc.c:1646  */
+  case 112:
+#line 739 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk)=gen_noop(); 
 }
-#line 3160 "parser.c" /* yacc.c:1646  */
+#line 3153 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 737 "parser.y" /* yacc.c:1646  */
+  case 113:
+#line 742 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3166 "parser.c" /* yacc.c:1646  */
+#line 3159 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 738 "parser.y" /* yacc.c:1646  */
+  case 114:
+#line 743 "parser.y" /* yacc.c:1646  */
     { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
-#line 3172 "parser.c" /* yacc.c:1646  */
+#line 3165 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 739 "parser.y" /* yacc.c:1646  */
+  case 115:
+#line 744 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3178 "parser.c" /* yacc.c:1646  */
+#line 3171 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 742 "parser.y" /* yacc.c:1646  */
+  case 116:
+#line 747 "parser.y" /* yacc.c:1646  */
     { 
   (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
  }
-#line 3186 "parser.c" /* yacc.c:1646  */
+#line 3179 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 745 "parser.y" /* yacc.c:1646  */
+  case 117:
+#line 750 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
   }
-#line 3194 "parser.c" /* yacc.c:1646  */
+#line 3187 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 748 "parser.y" /* yacc.c:1646  */
+  case 118:
+#line 753 "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 3203 "parser.c" /* yacc.c:1646  */
+#line 3196 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 752 "parser.y" /* yacc.c:1646  */
+  case 119:
+#line 757 "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 3212 "parser.c" /* yacc.c:1646  */
+#line 3205 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 756 "parser.y" /* yacc.c:1646  */
+  case 120:
+#line 761 "parser.y" /* yacc.c:1646  */
     {
   (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
   }
-#line 3220 "parser.c" /* yacc.c:1646  */
+#line 3213 "parser.c" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 759 "parser.y" /* yacc.c:1646  */
+  case 121:
+#line 764 "parser.y" /* yacc.c:1646  */
     { (yyval.blk) = (yyvsp[0].blk); }
-#line 3226 "parser.c" /* yacc.c:1646  */
+#line 3219 "parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3230 "parser.c" /* yacc.c:1646  */
+#line 3223 "parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3461,7 +3454,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 760 "parser.y" /* yacc.c:1906  */
+#line 765 "parser.y" /* yacc.c:1906  */
 
 
 int jq_parse(struct locfile* locations, block* answer) {
index 55dace4ed92d91d1c2d33c45ebd5878e62b721c1..a7b64d3de93342e9305a210e934d8d7a330befba 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -92,19 +92,20 @@ struct lexer_param;
     CATCH = 282,
     LABEL = 283,
     BREAK = 284,
-    SETPIPE = 285,
-    SETPLUS = 286,
-    SETMINUS = 287,
-    SETMULT = 288,
-    SETDIV = 289,
-    SETDEFINEDOR = 290,
-    LESSEQ = 291,
-    GREATEREQ = 292,
-    QQSTRING_START = 293,
-    QQSTRING_TEXT = 294,
-    QQSTRING_INTERP_START = 295,
-    QQSTRING_INTERP_END = 296,
-    QQSTRING_END = 297
+    LOC = 285,
+    SETPIPE = 286,
+    SETPLUS = 287,
+    SETMINUS = 288,
+    SETMULT = 289,
+    SETDIV = 290,
+    SETDEFINEDOR = 291,
+    LESSEQ = 292,
+    GREATEREQ = 293,
+    QQSTRING_START = 294,
+    QQSTRING_TEXT = 295,
+    QQSTRING_INTERP_START = 296,
+    QQSTRING_INTERP_END = 297,
+    QQSTRING_END = 298
   };
 #endif
 /* Tokens.  */
@@ -135,19 +136,20 @@ struct lexer_param;
 #define CATCH 282
 #define LABEL 283
 #define BREAK 284
-#define SETPIPE 285
-#define SETPLUS 286
-#define SETMINUS 287
-#define SETMULT 288
-#define SETDIV 289
-#define SETDEFINEDOR 290
-#define LESSEQ 291
-#define GREATEREQ 292
-#define QQSTRING_START 293
-#define QQSTRING_TEXT 294
-#define QQSTRING_INTERP_START 295
-#define QQSTRING_INTERP_END 296
-#define QQSTRING_END 297
+#define LOC 285
+#define SETPIPE 286
+#define SETPLUS 287
+#define SETMINUS 288
+#define SETMULT 289
+#define SETDIV 290
+#define SETDEFINEDOR 291
+#define LESSEQ 292
+#define GREATEREQ 293
+#define QQSTRING_START 294
+#define QQSTRING_TEXT 295
+#define QQSTRING_INTERP_START 296
+#define QQSTRING_INTERP_END 297
+#define QQSTRING_END 298
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -159,7 +161,7 @@ union YYSTYPE
   jv literal;
   block blk;
 
-#line 163 "parser.h" /* yacc.c:1909  */
+#line 165 "parser.h" /* yacc.c:1909  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
index 03b80599a8ed19143366a47c16a7edd58dec0af9..00d097c97b039ab5b84dd9e4d01784fa7b9bb151 100644 (file)
--- a/parser.y
+++ b/parser.y
@@ -72,6 +72,7 @@ struct lexer_param;
 %token CATCH "catch"
 %token LABEL "label"
 %token BREAK "break"
+%token LOC "__loc__"
 %token SETPIPE "|="
 %token SETPLUS "+="
 %token SETMINUS "-="
@@ -691,6 +692,10 @@ FORMAT {
   else
     $$ = BLOCK(gen_subexp(gen_const(jv_object())), $2, gen_op_simple(POP));
 } |
+'$' LOC {
+  $$ = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
+                           jv_string("line"), jv_number(locfile_get_line(locations, @$.start) + 1)));
+} |
 '$' IDENT {
   $$ = gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2)));
   jv_free($2);
index 5b90420d0ad41ba77330b81393dadabed4216423..075e847115480314ab004be5262512f93e47f865 100644 (file)
@@ -814,6 +814,10 @@ def inc(x): x |= .+1; inc(.[].a)
 [null,true,{"a":1}]
 []
 
+try error("\($__loc__)") catch .
+null
+"{\"file\":\"<top-level>\",\"line\":1}"
+
 # string operations
 [.[]|startswith("foo")]
 ["fo", "foo", "barfoo", "foobar", "barfoob"]