develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35017 - trunk/compilers/pirc/src

From:
kjs
Date:
January 6, 2009 02:46
Subject:
[svn:parrot] r35017 - trunk/compilers/pirc/src
Message ID:
20090106104551.CEFE3CB9F9@x12.develooper.com
Author: kjs
Date: Tue Jan  6 02:45:46 2009
New Revision: 35017

Modified:
   trunk/compilers/pirc/src/bcgen.c
   trunk/compilers/pirc/src/pir.y
   trunk/compilers/pirc/src/pircompunit.h
   trunk/compilers/pirc/src/piremit.c
   trunk/compilers/pirc/src/pirparser.c

Log:
[pirc] move .annotate rule to statements section, as it's not a chunk-like thingy. Remove cpp comments; add a pointer to the annotation struct which points to the instruction node. This way it will have access to the bytecode offest, which is needed to store the annotation in the segment. 

Modified: trunk/compilers/pirc/src/bcgen.c
==============================================================================
--- trunk/compilers/pirc/src/bcgen.c	(original)
+++ trunk/compilers/pirc/src/bcgen.c	Tue Jan  6 02:45:46 2009
@@ -375,6 +375,25 @@
     /* Create initial group. */
     PackFile_Annotations_add_group(bc->interp, bc->interp->code->annotations, bytecode_offset);
 }
+
+
+/*
+
+void
+add_annotation(bytecode * const bc, opcode_t offset, opcode_t key, opcode_t type, opcode_t value)>
+
+Add an annotation for the bytecode at C<offset>, having a key C<key>,
+of type C<type> and a value passed in C<value>.
+
+=cut
+
+*/
+void
+add_annotation(bytecode * const bc, opcode_t offset, opcode_t key, opcode_t type, opcode_t value) {
+    PackFile_Annotations_add_entry(bc->interp, bc->interp->code->annotations,
+                                   offset, key, type, value);
+}
+
 #endif
 
 /*

Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y	(original)
+++ trunk/compilers/pirc/src/pir.y	Tue Jan  6 02:45:46 2009
@@ -585,7 +585,6 @@
                   | hll_mapping
                   | loadlib
                   | location_directive
-                  | annotation
                   | macro_definition
                   | error_stat
                   ;
@@ -667,10 +666,6 @@
                         { lexer->filename = $2; }
                   ;
 
-annotation        : ".annotate" TK_STRINGC ',' constant
-                        { annotate(lexer, $2, $4); }
-                  ;
-
 /* HLL stuff      */
 
 hll_specifier     : ".HLL" TK_STRINGC
@@ -879,9 +874,14 @@
                   | empty_stat
                   | location_stat
                   | expansion_stat
+                  | annotation
                   | error_stat
                   ;
 
+annotation        : ".annotate" TK_STRINGC ',' constant "\n"
+                        { annotate(lexer, $2, $4); }
+                  ;
+
 
 /* grammar rules for macro expansion; .macro_const expansions are done in the lexer. */
 
@@ -2031,8 +2031,8 @@
                             { $$ = new_named_const(lexer, NUM_VAL, $2, $4); }
                       | "string" identifier '=' TK_STRINGC
                             { $$ = new_named_const(lexer, STRING_VAL, $2, $4); }
-                      //| "string" identifier '=' TK_USTRINGC
-                      //      { $$ = new_named_const(lexer, USTRING_VAL, $2, $4); }
+                      | "string" identifier '=' TK_USTRINGC
+                            { $$ = new_named_const(lexer, USTRING_VAL, $2, $4); }
                       ;
 
 pmc_const_tail        : TK_STRINGC identifier '=' pmc_const

Modified: trunk/compilers/pirc/src/pircompunit.h
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.h	(original)
+++ trunk/compilers/pirc/src/pircompunit.h	Tue Jan  6 02:45:46 2009
@@ -334,8 +334,9 @@
 /* struct to represent bytecode annotation */
 typedef struct annotation {
     int bytecode_index;    /* index in bytecode stream from where this annotation is active */
-    char const *key;       /* key of annotation */
-    constant   *value;     /* value of annotation */
+    char const  *key;      /* key of annotation */
+    constant    *value;    /* value of annotation */
+    instruction *instr;    /* pointer to the instruction from where the annotation is active */
 
     struct annotation *next; /* next annotation; annotations are stored in a list */
 

Modified: trunk/compilers/pirc/src/piremit.c
==============================================================================
--- trunk/compilers/pirc/src/piremit.c	(original)
+++ trunk/compilers/pirc/src/piremit.c	Tue Jan  6 02:45:46 2009
@@ -562,7 +562,7 @@
      * representation of the key. Initialize the cursor (pc)
      * to write into this buffer.
      */
-    pc = key = (opcode_t *)pir_mem_allocate(lexer, k->keylength * sizeof (opcode_t));
+    pc = key = (opcode_t *)pir_mem_allocate(lexer, k->keylength * sizeof (opcode_t) * 2);
 
     /* store key length in slot 0 */
     *pc++ = k->keylength;
@@ -632,6 +632,10 @@
      */
     keysize = pc - key;
 
+    fprintf(stderr, "key=[");
+    for (index = 0; index < keysize; index++) {
+        fprintf(stderr, "%d|", key[index]);
+    }
     index = store_key_bytecode(lexer->bc, key);
 
     fprintf(stderr, "store_key_bytecode index=%d\n", index);

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c	(original)
+++ trunk/compilers/pirc/src/pirparser.c	Tue Jan  6 02:45:46 2009
@@ -815,16 +815,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1106
+#define YYLAST   1104
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  139
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  171
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  429
+#define YYNRULES  430
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  668
+#define YYNSTATES  670
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -883,47 +883,48 @@
 {
        0,     0,     3,     6,     9,    13,    14,    16,    18,    22,
       24,    26,    28,    30,    32,    34,    36,    38,    40,    42,
-      44,    46,    50,    58,    61,    62,    64,    66,    70,    72,
-      73,    75,    77,    80,    83,    85,    87,    90,    94,    97,
-     100,   103,   108,   111,   116,   121,   122,   124,   126,   130,
-     132,   139,   141,   144,   146,   148,   149,   152,   154,   156,
-     158,   160,   162,   164,   166,   169,   174,   177,   180,   183,
-     186,   189,   193,   194,   196,   198,   202,   204,   206,   208,
-     210,   211,   214,   219,   222,   223,   226,   228,   230,   232,
-     237,   239,   240,   243,   246,   248,   250,   252,   254,   256,
-     258,   260,   262,   264,   266,   268,   270,   272,   274,   276,
-     278,   280,   284,   285,   289,   290,   292,   294,   298,   300,
-     302,   305,   307,   311,   312,   315,   317,   319,   321,   324,
-     326,   329,   332,   336,   340,   343,   346,   348,   350,   352,
-     354,   355,   357,   359,   363,   367,   369,   371,   373,   375,
-     377,   379,   382,   386,   388,   392,   399,   404,   411,   414,
-     416,   418,   422,   426,   430,   434,   438,   442,   447,   452,
-     457,   461,   465,   469,   473,   477,   481,   485,   490,   496,
-     501,   506,   510,   514,   518,   522,   526,   530,   534,   538,
-     541,   547,   553,   559,   565,   571,   577,   583,   589,   595,
-     600,   606,   611,   616,   621,   626,   631,   636,   641,   646,
-     651,   656,   661,   666,   671,   675,   679,   683,   687,   691,
-     695,   699,   703,   707,   711,   715,   719,   721,   723,   725,
-     727,   729,   731,   735,   740,   742,   746,   749,   750,   752,
-     758,   760,   762,   764,   773,   774,   776,   778,   781,   785,
-     789,   792,   798,   799,   802,   803,   805,   807,   810,   814,
-     816,   819,   823,   827,   829,   831,   833,   838,   841,   843,
-     845,   847,   849,   851,   853,   855,   857,   861,   862,   864,
-     866,   870,   873,   877,   878,   881,   883,   885,   887,   890,
-     892,   894,   896,   898,   900,   904,   908,   912,   916,   917,
-     919,   921,   925,   927,   929,   933,   936,   938,   944,   950,
-     951,   953,   955,   958,   962,   963,   965,   967,   970,   974,
-     975,   978,   980,   983,   984,   986,   990,   993,   996,   998,
-    1000,  1003,  1005,  1007,  1010,  1015,  1020,  1025,  1030,  1032,
-    1034,  1036,  1038,  1040,  1042,  1044,  1046,  1048,  1050,  1052,
-    1054,  1056,  1058,  1060,  1062,  1064,  1066,  1068,  1070,  1072,
-    1074,  1076,  1078,  1080,  1082,  1084,  1086,  1088,  1090,  1092,
-    1094,  1096,  1098,  1100,  1102,  1104,  1106,  1108,  1110,  1112,
-    1114,  1116,  1118,  1120,  1122,  1124,  1126,  1128,  1130,  1132,
-    1134,  1136,  1138,  1140,  1142,  1144,  1146,  1148,  1150,  1152,
-    1154,  1156,  1158,  1160,  1162,  1164,  1166,  1168,  1170,  1172,
-    1174,  1176,  1178,  1181,  1183,  1185,  1188,  1190,  1193,  1195,
-    1198,  1201,  1203,  1206,  1209,  1211,  1213,  1215,  1219,  1221
+      44,    48,    56,    59,    60,    62,    64,    68,    70,    71,
+      73,    75,    78,    81,    83,    85,    88,    92,    95,    98,
+     101,   104,   109,   114,   115,   117,   119,   123,   125,   132,
+     134,   137,   139,   141,   142,   145,   147,   149,   151,   153,
+     155,   157,   159,   162,   167,   170,   173,   176,   179,   182,
+     186,   187,   189,   191,   195,   197,   199,   201,   203,   204,
+     207,   212,   215,   216,   219,   221,   223,   225,   230,   232,
+     233,   236,   239,   241,   243,   245,   247,   249,   251,   253,
+     255,   257,   259,   261,   263,   265,   267,   269,   271,   273,
+     279,   281,   285,   286,   290,   291,   293,   295,   299,   301,
+     303,   306,   308,   312,   313,   316,   318,   320,   322,   325,
+     327,   330,   333,   337,   341,   344,   347,   349,   351,   353,
+     355,   356,   358,   360,   364,   368,   370,   372,   374,   376,
+     378,   380,   383,   387,   389,   393,   400,   405,   412,   415,
+     417,   419,   423,   427,   431,   435,   439,   443,   448,   453,
+     458,   462,   466,   470,   474,   478,   482,   486,   491,   497,
+     502,   507,   511,   515,   519,   523,   527,   531,   535,   539,
+     542,   548,   554,   560,   566,   572,   578,   584,   590,   596,
+     601,   607,   612,   617,   622,   627,   632,   637,   642,   647,
+     652,   657,   662,   667,   672,   676,   680,   684,   688,   692,
+     696,   700,   704,   708,   712,   716,   720,   722,   724,   726,
+     728,   730,   732,   736,   741,   743,   747,   750,   751,   753,
+     759,   761,   763,   765,   774,   775,   777,   779,   782,   786,
+     790,   793,   799,   800,   803,   804,   806,   808,   811,   815,
+     817,   820,   824,   828,   830,   832,   834,   839,   842,   844,
+     846,   848,   850,   852,   854,   856,   858,   862,   863,   865,
+     867,   871,   874,   878,   879,   882,   884,   886,   888,   891,
+     893,   895,   897,   899,   901,   905,   909,   913,   917,   918,
+     920,   922,   926,   928,   930,   934,   937,   939,   945,   951,
+     952,   954,   956,   959,   963,   964,   966,   968,   971,   975,
+     976,   979,   981,   984,   985,   987,   991,   994,   997,   999,
+    1001,  1004,  1006,  1008,  1011,  1016,  1021,  1026,  1031,  1036,
+    1038,  1040,  1042,  1044,  1046,  1048,  1050,  1052,  1054,  1056,
+    1058,  1060,  1062,  1064,  1066,  1068,  1070,  1072,  1074,  1076,
+    1078,  1080,  1082,  1084,  1086,  1088,  1090,  1092,  1094,  1096,
+    1098,  1100,  1102,  1104,  1106,  1108,  1110,  1112,  1114,  1116,
+    1118,  1120,  1122,  1124,  1126,  1128,  1130,  1132,  1134,  1136,
+    1138,  1140,  1142,  1144,  1146,  1148,  1150,  1152,  1154,  1156,
+    1158,  1160,  1162,  1164,  1166,  1168,  1170,  1172,  1174,  1176,
+    1178,  1180,  1182,  1184,  1187,  1189,  1191,  1194,  1196,  1199,
+    1201,  1204,  1207,  1209,  1212,  1215,  1217,  1219,  1221,  1225,
+    1227
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -931,143 +932,144 @@
 {
      140,     0,    -1,   116,   141,    -1,   115,   301,    -1,   142,
      143,   142,    -1,    -1,    35,    -1,   144,    -1,   143,    35,
-     144,    -1,   167,    -1,   280,    -1,   163,    -1,   161,    -1,
-     162,    -1,   158,    -1,   159,    -1,   160,    -1,   145,    -1,
-     199,    -1,   146,    -1,   147,    -1,   108,    37,   114,    -1,
-     148,   119,   149,   120,    35,   152,   105,    -1,   104,   296,
-      -1,    -1,   150,    -1,   151,    -1,   150,   121,   151,    -1,
-     296,    -1,    -1,   153,    -1,   154,    -1,   153,   154,    -1,
-     155,    35,    -1,   156,    -1,   157,    -1,   107,   109,    -1,
-     106,   292,   110,    -1,     5,    46,    -1,    10,    48,    -1,
-      11,    46,    -1,    34,    46,   121,   289,    -1,     3,    46,
-      -1,     4,    46,   122,    46,    -1,    13,   123,   164,   124,
-      -1,    -1,   165,    -1,   166,    -1,   165,   125,   166,    -1,
-      46,    -1,   169,   171,    35,   177,   185,   168,    -1,     7,
-      -1,     6,   170,    -1,   296,    -1,    46,    -1,    -1,   171,
-     172,    -1,    86,    -1,    83,    -1,    84,    -1,    85,    -1,
-      90,    -1,    92,    -1,    93,    -1,    91,   173,    -1,    88,
-     119,   170,   120,    -1,    87,   277,    -1,    89,   277,    -1,
-      94,   278,    -1,    95,   278,    -1,    96,   278,    -1,   119,
-     174,   120,    -1,    -1,   175,    -1,   176,    -1,   175,   121,
-     176,    -1,   296,    -1,    46,    -1,   212,    -1,   178,    -1,
-      -1,   178,   179,    -1,     8,   180,   181,    35,    -1,   292,
-     296,    -1,    -1,   181,   182,    -1,   255,    -1,   183,    -1,
-     184,    -1,   103,   119,   176,   120,    -1,    97,    -1,    -1,
-     185,   186,    -1,    36,   187,    -1,   187,    -1,   202,    -1,
-     219,    -1,   225,    -1,   226,    -1,   230,    -1,   279,    -1,
-     256,    -1,   231,    -1,   215,    -1,   201,    -1,   200,    -1,
-     197,    -1,   198,    -1,   188,    -1,   199,    -1,   189,    -1,
-     111,   190,    35,    -1,    -1,   119,   191,   120,    -1,    -1,
-     192,    -1,   193,    -1,   192,   121,   193,    -1,   112,    -1,
-     113,    -1,   111,   190,    -1,   194,    -1,   126,   195,   127,
-      -1,    -1,   195,   196,    -1,    35,    -1,   113,    -1,   112,
-      -1,   111,   190,    -1,    35,    -1,   159,    35,    -1,     1,
-      35,    -1,    44,   293,    35,    -1,    28,   250,    35,    -1,
-     203,    35,    -1,   204,   205,    -1,   214,    -1,    37,    -1,
-     206,    -1,   208,    -1,    -1,   207,    -1,   209,    -1,   207,
-     121,   209,    -1,   212,   122,   288,    -1,   210,    -1,   212,
-      -1,   289,    -1,   296,    -1,   295,    -1,   211,    -1,   249,
-     212,    -1,   123,   213,   124,    -1,   288,    -1,   213,   125,
-     288,    -1,   293,   122,   204,   210,   121,   207,    -1,   293,
-     122,   204,   210,    -1,   293,   122,   204,   212,   121,   207,
-      -1,   217,    35,    -1,    37,    -1,   297,    -1,   293,   122,
-      48,    -1,   293,   122,    49,    -1,   293,   122,   290,    -1,
-     293,   122,   295,    -1,   293,   122,   216,    -1,   293,   122,
-     218,    -1,   293,   122,   204,   212,    -1,   293,   122,   297,
-     212,    -1,   293,   122,    50,   212,    -1,   293,   300,   288,
-      -1,   293,    72,    48,    -1,   293,    72,    49,    -1,   293,
-      73,    48,    -1,   293,    73,    49,    -1,   293,    72,   293,
-      -1,   293,    73,   293,    -1,   293,   122,   298,   288,    -1,
-     293,   122,   293,   299,   288,    -1,   297,   212,   122,   288,
-      -1,    50,   212,   122,   288,    -1,    48,   299,   293,    -1,
-      49,   299,   293,    -1,    46,   299,   293,    -1,    46,   299,
-      46,    -1,    48,   299,    48,    -1,    49,   299,    49,    -1,
-      48,   299,    49,    -1,    49,   299,    48,    -1,   220,    35,
-      -1,   223,    44,    37,    45,   296,    -1,   223,    44,    38,
-      45,   296,    -1,   223,    44,    39,    45,   296,    -1,   223,
-      44,    40,    45,   296,    -1,   223,    44,    41,    45,   296,
-      -1,   223,    44,    42,    45,   296,    -1,   223,    44,    43,
-      45,   296,    -1,   223,    44,    45,    45,   296,    -1,   223,
-      44,    44,    45,   296,    -1,   223,   289,   224,   296,    -1,
-     223,    44,    50,   224,   296,    -1,   223,    37,   224,   296,
-      -1,   223,   295,   224,   296,    -1,   223,    38,   224,   296,
-      -1,   223,    39,   224,   296,    -1,   223,    40,   224,   296,
-      -1,   223,    41,   224,   296,    -1,   223,    42,   224,   296,
-      -1,   223,    43,   224,   296,    -1,   223,    45,    45,   296,
-      -1,   223,    45,   121,   296,    -1,   223,    44,    45,   296,
-      -1,   223,    44,   121,   296,    -1,   223,   221,    45,   296,
-      -1,   293,   291,   288,    -1,    48,   291,   293,    -1,    49,
-     291,   293,    -1,    46,   291,   293,    -1,    48,   291,    48,
-      -1,    48,   291,    49,    -1,    49,   291,    48,    -1,    49,
-     291,    49,    -1,    46,   291,    46,    -1,    46,   291,   222,
-      -1,    48,   291,    46,    -1,    49,   291,    46,    -1,    48,
-      -1,    49,    -1,    42,    -1,    43,    -1,    45,    -1,   121,
-      -1,    45,   296,    35,    -1,    12,   292,   227,    35,    -1,
-     228,    -1,   227,   121,   228,    -1,   296,   229,    -1,    -1,
-      97,    -1,     9,    46,   121,   249,    35,    -1,   232,    -1,
-     233,    -1,   242,    -1,    26,    35,   234,   237,    35,   239,
-      27,    35,    -1,    -1,   235,    -1,   236,    -1,   235,   236,
-      -1,    30,   265,    35,    -1,    29,   247,   238,    -1,    32,
-     249,    -1,    14,   249,    35,    15,   248,    -1,    -1,   121,
-     249,    -1,    -1,   240,    -1,   241,    -1,   240,   241,    -1,
-      31,   253,    35,    -1,   226,    -1,   243,    35,    -1,   250,
-     122,   244,    -1,   293,   122,   244,    -1,   244,    -1,   246,
-      -1,   245,    -1,   249,   128,   248,   260,    -1,   247,   260,
-      -1,   249,    -1,    46,    -1,   296,    -1,    50,    -1,    52,
-      -1,    46,    -1,   296,    -1,    50,    -1,   119,   251,   120,
-      -1,    -1,   252,    -1,   253,    -1,   252,   121,   253,    -1,
-     293,   254,    -1,    46,    54,   293,    -1,    -1,   254,   255,
-      -1,   101,    -1,   102,    -1,    99,    -1,    98,   277,    -1,
-     257,    -1,   258,    -1,   267,    -1,   259,    -1,   268,    -1,
-      18,   260,    35,    -1,    33,   244,    35,    -1,    19,   260,
-      35,    -1,   119,   261,   120,    -1,    -1,   262,    -1,   263,
-      -1,   262,   121,   263,    -1,   265,    -1,   264,    -1,    46,
-      54,   266,    -1,   266,   275,    -1,   288,    -1,    24,    35,
-     272,    25,    35,    -1,    22,    35,   269,    23,    35,    -1,
-      -1,   270,    -1,   271,    -1,   270,   271,    -1,    20,   265,
-      35,    -1,    -1,   273,    -1,   274,    -1,   273,   274,    -1,
-      21,   265,    35,    -1,    -1,   275,   276,    -1,   100,    -1,
-      98,   277,    -1,    -1,   278,    -1,   119,    46,   120,    -1,
-     281,    35,    -1,    17,   285,    -1,   282,    -1,   284,    -1,
-      17,   283,    -1,   285,    -1,   286,    -1,    16,   285,    -1,
-      38,   296,   122,    48,    -1,    39,   296,   122,    49,    -1,
-      41,   296,   122,    46,    -1,    46,   296,   122,   287,    -1,
-     289,    -1,   296,    -1,   293,    -1,   289,    -1,    48,    -1,
-      49,    -1,   290,    -1,    46,    -1,    47,    -1,    55,    -1,
-      56,    -1,    57,    -1,    58,    -1,    60,    -1,    59,    -1,
-      38,    -1,    39,    -1,    40,    -1,    41,    -1,   294,    -1,
-     295,    -1,   296,    -1,    50,    -1,    51,    -1,    53,    -1,
-      52,    -1,    37,    -1,   297,    -1,    42,    -1,    43,    -1,
-      45,    -1,    38,    -1,    39,    -1,    41,    -1,    40,    -1,
-      44,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
-     129,    -1,   133,    -1,   134,    -1,   135,    -1,   136,    -1,
-     137,    -1,   131,    -1,   138,    -1,    68,    -1,    61,    -1,
-      62,    -1,    63,    -1,    65,    -1,    66,    -1,    64,    -1,
-      67,    -1,    56,    -1,    58,    -1,    57,    -1,    60,    -1,
-      59,    -1,    55,    -1,    74,    -1,    75,    -1,    76,    -1,
-      77,    -1,    80,    -1,    78,    -1,    79,    -1,    81,    -1,
-      82,    -1,    70,    -1,    71,    -1,    69,    -1,   302,   303,
-      -1,   142,    -1,   304,    -1,   303,   304,    -1,   305,    -1,
-     163,    35,    -1,   230,    -1,   159,    35,    -1,   145,    35,
-      -1,   189,    -1,    36,   306,    -1,   307,   306,    -1,   309,
-      -1,   197,    -1,   309,    -1,   308,   171,    36,    -1,   117,
-      -1,   204,   206,    35,    -1
+     144,    -1,   166,    -1,   280,    -1,   162,    -1,   160,    -1,
+     161,    -1,   158,    -1,   159,    -1,   145,    -1,   199,    -1,
+     146,    -1,   147,    -1,   108,    37,   114,    -1,   148,   119,
+     149,   120,    35,   152,   105,    -1,   104,   296,    -1,    -1,
+     150,    -1,   151,    -1,   150,   121,   151,    -1,   296,    -1,
+      -1,   153,    -1,   154,    -1,   153,   154,    -1,   155,    35,
+      -1,   156,    -1,   157,    -1,   107,   109,    -1,   106,   292,
+     110,    -1,     5,    46,    -1,    10,    48,    -1,    11,    46,
+      -1,     3,    46,    -1,     4,    46,   122,    46,    -1,    13,
+     123,   163,   124,    -1,    -1,   164,    -1,   165,    -1,   164,
+     125,   165,    -1,    46,    -1,   168,   170,    35,   176,   184,
+     167,    -1,     7,    -1,     6,   169,    -1,   296,    -1,    46,
+      -1,    -1,   170,   171,    -1,    86,    -1,    83,    -1,    84,
+      -1,    85,    -1,    90,    -1,    92,    -1,    93,    -1,    91,
+     172,    -1,    88,   119,   169,   120,    -1,    87,   277,    -1,
+      89,   277,    -1,    94,   278,    -1,    95,   278,    -1,    96,
+     278,    -1,   119,   173,   120,    -1,    -1,   174,    -1,   175,
+      -1,   174,   121,   175,    -1,   296,    -1,    46,    -1,   212,
+      -1,   177,    -1,    -1,   177,   178,    -1,     8,   179,   180,
+      35,    -1,   292,   296,    -1,    -1,   180,   181,    -1,   255,
+      -1,   182,    -1,   183,    -1,   103,   119,   175,   120,    -1,
+      97,    -1,    -1,   184,   185,    -1,    36,   186,    -1,   186,
+      -1,   202,    -1,   219,    -1,   225,    -1,   226,    -1,   230,
+      -1,   279,    -1,   256,    -1,   231,    -1,   215,    -1,   201,
+      -1,   200,    -1,   197,    -1,   198,    -1,   188,    -1,   187,
+      -1,   199,    -1,    34,    46,   121,   289,    35,    -1,   189,
+      -1,   111,   190,    35,    -1,    -1,   119,   191,   120,    -1,
+      -1,   192,    -1,   193,    -1,   192,   121,   193,    -1,   112,
+      -1,   113,    -1,   111,   190,    -1,   194,    -1,   126,   195,
+     127,    -1,    -1,   195,   196,    -1,    35,    -1,   113,    -1,
+     112,    -1,   111,   190,    -1,    35,    -1,   159,    35,    -1,
+       1,    35,    -1,    44,   293,    35,    -1,    28,   250,    35,
+      -1,   203,    35,    -1,   204,   205,    -1,   214,    -1,    37,
+      -1,   206,    -1,   208,    -1,    -1,   207,    -1,   209,    -1,
+     207,   121,   209,    -1,   212,   122,   288,    -1,   210,    -1,
+     212,    -1,   289,    -1,   296,    -1,   295,    -1,   211,    -1,
+     249,   212,    -1,   123,   213,   124,    -1,   288,    -1,   213,
+     125,   288,    -1,   293,   122,   204,   210,   121,   207,    -1,
+     293,   122,   204,   210,    -1,   293,   122,   204,   212,   121,
+     207,    -1,   217,    35,    -1,    37,    -1,   297,    -1,   293,
+     122,    48,    -1,   293,   122,    49,    -1,   293,   122,   290,
+      -1,   293,   122,   295,    -1,   293,   122,   216,    -1,   293,
+     122,   218,    -1,   293,   122,   204,   212,    -1,   293,   122,
+     297,   212,    -1,   293,   122,    50,   212,    -1,   293,   300,
+     288,    -1,   293,    72,    48,    -1,   293,    72,    49,    -1,
+     293,    73,    48,    -1,   293,    73,    49,    -1,   293,    72,
+     293,    -1,   293,    73,   293,    -1,   293,   122,   298,   288,
+      -1,   293,   122,   293,   299,   288,    -1,   297,   212,   122,
+     288,    -1,    50,   212,   122,   288,    -1,    48,   299,   293,
+      -1,    49,   299,   293,    -1,    46,   299,   293,    -1,    46,
+     299,    46,    -1,    48,   299,    48,    -1,    49,   299,    49,
+      -1,    48,   299,    49,    -1,    49,   299,    48,    -1,   220,
+      35,    -1,   223,    44,    37,    45,   296,    -1,   223,    44,
+      38,    45,   296,    -1,   223,    44,    39,    45,   296,    -1,
+     223,    44,    40,    45,   296,    -1,   223,    44,    41,    45,
+     296,    -1,   223,    44,    42,    45,   296,    -1,   223,    44,
+      43,    45,   296,    -1,   223,    44,    45,    45,   296,    -1,
+     223,    44,    44,    45,   296,    -1,   223,   289,   224,   296,
+      -1,   223,    44,    50,   224,   296,    -1,   223,    37,   224,
+     296,    -1,   223,   295,   224,   296,    -1,   223,    38,   224,
+     296,    -1,   223,    39,   224,   296,    -1,   223,    40,   224,
+     296,    -1,   223,    41,   224,   296,    -1,   223,    42,   224,
+     296,    -1,   223,    43,   224,   296,    -1,   223,    45,    45,
+     296,    -1,   223,    45,   121,   296,    -1,   223,    44,    45,
+     296,    -1,   223,    44,   121,   296,    -1,   223,   221,    45,
+     296,    -1,   293,   291,   288,    -1,    48,   291,   293,    -1,
+      49,   291,   293,    -1,    46,   291,   293,    -1,    48,   291,
+      48,    -1,    48,   291,    49,    -1,    49,   291,    48,    -1,
+      49,   291,    49,    -1,    46,   291,    46,    -1,    46,   291,
+     222,    -1,    48,   291,    46,    -1,    49,   291,    46,    -1,
+      48,    -1,    49,    -1,    42,    -1,    43,    -1,    45,    -1,
+     121,    -1,    45,   296,    35,    -1,    12,   292,   227,    35,
+      -1,   228,    -1,   227,   121,   228,    -1,   296,   229,    -1,
+      -1,    97,    -1,     9,    46,   121,   249,    35,    -1,   232,
+      -1,   233,    -1,   242,    -1,    26,    35,   234,   237,    35,
+     239,    27,    35,    -1,    -1,   235,    -1,   236,    -1,   235,
+     236,    -1,    30,   265,    35,    -1,    29,   247,   238,    -1,
+      32,   249,    -1,    14,   249,    35,    15,   248,    -1,    -1,
+     121,   249,    -1,    -1,   240,    -1,   241,    -1,   240,   241,
+      -1,    31,   253,    35,    -1,   226,    -1,   243,    35,    -1,
+     250,   122,   244,    -1,   293,   122,   244,    -1,   244,    -1,
+     246,    -1,   245,    -1,   249,   128,   248,   260,    -1,   247,
+     260,    -1,   249,    -1,    46,    -1,   296,    -1,    50,    -1,
+      52,    -1,    46,    -1,   296,    -1,    50,    -1,   119,   251,
+     120,    -1,    -1,   252,    -1,   253,    -1,   252,   121,   253,
+      -1,   293,   254,    -1,    46,    54,   293,    -1,    -1,   254,
+     255,    -1,   101,    -1,   102,    -1,    99,    -1,    98,   277,
+      -1,   257,    -1,   258,    -1,   267,    -1,   259,    -1,   268,
+      -1,    18,   260,    35,    -1,    33,   244,    35,    -1,    19,
+     260,    35,    -1,   119,   261,   120,    -1,    -1,   262,    -1,
+     263,    -1,   262,   121,   263,    -1,   265,    -1,   264,    -1,
+      46,    54,   266,    -1,   266,   275,    -1,   288,    -1,    24,
+      35,   272,    25,    35,    -1,    22,    35,   269,    23,    35,
+      -1,    -1,   270,    -1,   271,    -1,   270,   271,    -1,    20,
+     265,    35,    -1,    -1,   273,    -1,   274,    -1,   273,   274,
+      -1,    21,   265,    35,    -1,    -1,   275,   276,    -1,   100,
+      -1,    98,   277,    -1,    -1,   278,    -1,   119,    46,   120,
+      -1,   281,    35,    -1,    17,   285,    -1,   282,    -1,   284,
+      -1,    17,   283,    -1,   285,    -1,   286,    -1,    16,   285,
+      -1,    38,   296,   122,    48,    -1,    39,   296,   122,    49,
+      -1,    41,   296,   122,    46,    -1,    41,   296,   122,    47,
+      -1,    46,   296,   122,   287,    -1,   289,    -1,   296,    -1,
+     293,    -1,   289,    -1,    48,    -1,    49,    -1,   290,    -1,
+      46,    -1,    47,    -1,    55,    -1,    56,    -1,    57,    -1,
+      58,    -1,    60,    -1,    59,    -1,    38,    -1,    39,    -1,
+      40,    -1,    41,    -1,   294,    -1,   295,    -1,   296,    -1,
+      50,    -1,    51,    -1,    53,    -1,    52,    -1,    37,    -1,
+     297,    -1,    42,    -1,    43,    -1,    45,    -1,    38,    -1,
+      39,    -1,    41,    -1,    40,    -1,    44,    -1,   129,    -1,
+     130,    -1,   131,    -1,   132,    -1,   129,    -1,   133,    -1,
+     134,    -1,   135,    -1,   136,    -1,   137,    -1,   131,    -1,
+     138,    -1,    68,    -1,    61,    -1,    62,    -1,    63,    -1,
+      65,    -1,    66,    -1,    64,    -1,    67,    -1,    56,    -1,
+      58,    -1,    57,    -1,    60,    -1,    59,    -1,    55,    -1,
+      74,    -1,    75,    -1,    76,    -1,    77,    -1,    80,    -1,
+      78,    -1,    79,    -1,    81,    -1,    82,    -1,    70,    -1,
+      71,    -1,    69,    -1,   302,   303,    -1,   142,    -1,   304,
+      -1,   303,   304,    -1,   305,    -1,   162,    35,    -1,   230,
+      -1,   159,    35,    -1,   145,    35,    -1,   189,    -1,    36,
+     306,    -1,   307,   306,    -1,   309,    -1,   197,    -1,   309,
+      -1,   308,   170,    36,    -1,   117,    -1,   204,   206,    35,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   561,   561,   562,   567,   573,   574,   577,   578,   581,
-     582,   583,   584,   585,   586,   587,   588,   589,   590,   597,
-     598,   601,   605,   611,   618,   619,   622,   623,   626,   630,
-     631,   634,   635,   638,   641,   642,   645,   649,   660,   664,
-     666,   670,   676,   680,   684,   689,   690,   694,   696,   700,
-     704,   710,   714,   718,   719,   722,   723,   726,   728,   730,
-     732,   734,   736,   738,   740,   742,   744,   746,   748,   750,
-     752,   756,   761,   765,   769,   778,   789,   791,   793,   797,
-     806,   807,   820,   824,   829,   830,   834,   835,   836,   839,
-     846,   852,   853,   863,   865,   868,   869,   870,   871,   872,
-     873,   874,   875,   876,   877,   878,   879,   880,   881,   882,
+     582,   583,   584,   585,   586,   587,   588,   589,   596,   597,
+     600,   604,   610,   617,   618,   621,   622,   625,   629,   630,
+     633,   634,   637,   640,   641,   644,   648,   659,   663,   665,
+     671,   675,   679,   684,   685,   689,   691,   695,   699,   705,
+     709,   713,   714,   717,   718,   721,   723,   725,   727,   729,
+     731,   733,   735,   737,   739,   741,   743,   745,   747,   751,
+     756,   760,   764,   773,   784,   786,   788,   792,   801,   802,
+     815,   819,   824,   825,   829,   830,   831,   834,   841,   847,
+     848,   858,   860,   863,   864,   865,   866,   867,   868,   869,
+     870,   871,   872,   873,   874,   875,   876,   877,   878,   881,
      888,   891,   896,   897,   902,   903,   906,   908,   916,   924,
      925,   927,   930,   936,   937,   946,   947,   948,   949,   957,
      961,   965,   974,   981,   988,   991,   992,   995,  1004,  1011,
@@ -1090,16 +1092,17 @@
     1905,  1907,  1911,  1912,  1915,  1919,  1923,  1927,  1936,  1946,
     1947,  1952,  1954,  1959,  1964,  1965,  1969,  1971,  1975,  1981,
     1982,  1986,  1988,  1996,  1997,  2001,  2005,  2008,  2012,  2013,
-    2016,  2020,  2021,  2024,  2028,  2030,  2032,  2038,  2042,  2043,
-    2056,  2057,  2061,  2062,  2063,  2066,  2067,  2070,  2071,  2072,
-    2073,  2074,  2075,  2078,  2079,  2080,  2081,  2089,  2092,  2093,
-    2106,  2107,  2108,  2109,  2113,  2114,  2117,  2118,  2119,  2120,
-    2121,  2122,  2123,  2124,  2127,  2128,  2129,  2132,  2133,  2134,
-    2135,  2136,  2137,  2138,  2139,  2140,  2141,  2142,  2143,  2144,
-    2145,  2146,  2147,  2148,  2149,  2150,  2151,  2152,  2153,  2154,
-    2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,  2169,
-    2170,  2171,  2183,  2191,  2195,  2196,  2199,  2200,  2201,  2202,
-    2203,  2204,  2207,  2209,  2210,  2213,  2214,  2217,  2221,  2226
+    2016,  2020,  2021,  2024,  2028,  2030,  2032,  2034,  2038,  2042,
+    2043,  2056,  2057,  2061,  2062,  2063,  2066,  2067,  2070,  2071,
+    2072,  2073,  2074,  2075,  2078,  2079,  2080,  2081,  2089,  2092,
+    2093,  2106,  2107,  2108,  2109,  2113,  2114,  2117,  2118,  2119,
+    2120,  2121,  2122,  2123,  2124,  2127,  2128,  2129,  2132,  2133,
+    2134,  2135,  2136,  2137,  2138,  2139,  2140,  2141,  2142,  2143,
+    2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2152,  2153,
+    2154,  2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,
+    2169,  2170,  2171,  2183,  2191,  2195,  2196,  2199,  2200,  2201,
+    2202,  2203,  2204,  2207,  2209,  2210,  2213,  2214,  2217,  2221,
+    2226
 };
 #endif
 
@@ -1141,24 +1144,24 @@
   "macro_definition", "macro_const", "macro", "macro_header",
   "macro_parameters", "macro_params", "macro_param", "macro_body",
   "macro_statements", "macro_statement", "macro_instr", "macro_label_decl",
-  "macro_local_decl", "loadlib", "location_directive", "annotation",
-  "hll_specifier", "hll_mapping", "namespace_decl", "opt_namespace",
-  "namespace", "namespace_slice", "sub_def", "sub_end", "sub_head",
-  "sub_id", "sub_flags", "sub_flag", "multi_type_list", "opt_multi_types",
+  "macro_local_decl", "loadlib", "location_directive", "hll_specifier",
+  "hll_mapping", "namespace_decl", "opt_namespace", "namespace",
+  "namespace_slice", "sub_def", "sub_end", "sub_head", "sub_id",
+  "sub_flags", "sub_flag", "multi_type_list", "opt_multi_types",
   "multi_types", "multi_type", "parameter_list", "parameters", "parameter",
   "param", "param_flags", "param_flag", "invocant_param",
   "unique_reg_flag", "instructions", "instruction", "statement",
-  "expansion_stat", "macro_expansion", "opt_macro_args", "macro_args",
-  "macro_arg_list", "macro_arg", "braced_arg", "braced_contents",
-  "braced_item", "empty_stat", "location_stat", "error_stat", "null_stat",
-  "getresults_stat", "parrot_stat", "parrot_instruction", "parrot_op",
-  "opt_op_args", "op_args", "parrot_op_args", "keylist_assignment",
-  "op_arg", "op_arg_expr", "keyaccess", "keylist", "keys",
-  "parrot_op_assign", "assignment_stat", "rhs_ident", "assignment",
-  "binary_expr", "conditional_stat", "conditional_instr", "condition",
-  "int_or_num", "if_unless", "then", "goto_stat", "local_decl",
-  "local_id_list", "local_id", "has_unique_reg", "lex_decl",
-  "invocation_stat", "invocation", "long_invocation_stat",
+  "annotation", "expansion_stat", "macro_expansion", "opt_macro_args",
+  "macro_args", "macro_arg_list", "macro_arg", "braced_arg",
+  "braced_contents", "braced_item", "empty_stat", "location_stat",
+  "error_stat", "null_stat", "getresults_stat", "parrot_stat",
+  "parrot_instruction", "parrot_op", "opt_op_args", "op_args",
+  "parrot_op_args", "keylist_assignment", "op_arg", "op_arg_expr",
+  "keyaccess", "keylist", "keys", "parrot_op_assign", "assignment_stat",
+  "rhs_ident", "assignment", "binary_expr", "conditional_stat",
+  "conditional_instr", "condition", "int_or_num", "if_unless", "then",
+  "goto_stat", "local_decl", "local_id_list", "local_id", "has_unique_reg",
+  "lex_decl", "invocation_stat", "invocation", "long_invocation_stat",
   "opt_long_arguments", "long_arguments", "long_argument",
   "long_invocation", "opt_ret_cont", "opt_long_results", "long_results",
   "long_result", "short_invocation_stat", "short_invocation",
@@ -1207,16 +1210,16 @@
 static const yytype_uint16 yyr1[] =
 {
        0,   139,   140,   140,   141,   142,   142,   143,   143,   144,
-     144,   144,   144,   144,   144,   144,   144,   144,   144,   145,
-     145,   146,   147,   148,   149,   149,   150,   150,   151,   152,
-     152,   153,   153,   154,   155,   155,   156,   157,   158,   159,
-     159,   160,   161,   162,   163,   164,   164,   165,   165,   166,
-     167,   168,   169,   170,   170,   171,   171,   172,   172,   172,
-     172,   172,   172,   172,   172,   172,   172,   172,   172,   172,
-     172,   173,   174,   174,   175,   175,   176,   176,   176,   177,
-     178,   178,   179,   180,   181,   181,   182,   182,   182,   183,
-     184,   185,   185,   186,   186,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
+     144,   144,   144,   144,   144,   144,   144,   144,   145,   145,
+     146,   147,   148,   149,   149,   150,   150,   151,   152,   152,
+     153,   153,   154,   155,   155,   156,   157,   158,   159,   159,
+     160,   161,   162,   163,   163,   164,   164,   165,   166,   167,
+     168,   169,   169,   170,   170,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   172,
+     173,   173,   174,   174,   175,   175,   175,   176,   177,   177,
+     178,   179,   180,   180,   181,   181,   181,   182,   183,   184,
+     184,   185,   185,   186,   186,   186,   186,   186,   186,   186,
+     186,   186,   186,   186,   186,   186,   186,   186,   186,   187,
      188,   189,   190,   190,   191,   191,   192,   192,   193,   193,
      193,   193,   194,   195,   195,   196,   196,   196,   196,   197,
      198,   199,   200,   201,   202,   203,   203,   204,   205,   205,
@@ -1239,16 +1242,17 @@
      262,   262,   263,   263,   264,   265,   266,   267,   268,   269,
      269,   270,   270,   271,   272,   272,   273,   273,   274,   275,
      275,   276,   276,   277,   277,   278,   279,   280,   281,   281,
-     282,   283,   283,   284,   285,   285,   285,   286,   287,   287,
-     288,   288,   289,   289,   289,   290,   290,   291,   291,   291,
-     291,   291,   291,   292,   292,   292,   292,   293,   294,   294,
-     295,   295,   295,   295,   296,   296,   297,   297,   297,   297,
-     297,   297,   297,   297,   298,   298,   298,   299,   299,   299,
+     282,   283,   283,   284,   285,   285,   285,   285,   286,   287,
+     287,   288,   288,   289,   289,   289,   290,   290,   291,   291,
+     291,   291,   291,   291,   292,   292,   292,   292,   293,   294,
+     294,   295,   295,   295,   295,   296,   296,   297,   297,   297,
+     297,   297,   297,   297,   297,   298,   298,   298,   299,   299,
      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
-     300,   300,   300,   300,   300,   300,   300,   300,   300,   300,
-     300,   300,   301,   302,   303,   303,   304,   304,   304,   304,
-     304,   304,   305,   305,   305,   306,   306,   307,   308,   309
+     299,   300,   300,   300,   300,   300,   300,   300,   300,   300,
+     300,   300,   300,   301,   302,   303,   303,   304,   304,   304,
+     304,   304,   304,   305,   305,   305,   306,   306,   307,   308,
+     309
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1256,15 +1260,15 @@
 {
        0,     2,     2,     2,     3,     0,     1,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     7,     2,     0,     1,     1,     3,     1,     0,
-       1,     1,     2,     2,     1,     1,     2,     3,     2,     2,
-       2,     4,     2,     4,     4,     0,     1,     1,     3,     1,
-       6,     1,     2,     1,     1,     0,     2,     1,     1,     1,
-       1,     1,     1,     1,     2,     4,     2,     2,     2,     2,
-       2,     3,     0,     1,     1,     3,     1,     1,     1,     1,
-       0,     2,     4,     2,     0,     2,     1,     1,     1,     4,
-       1,     0,     2,     2,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     7,     2,     0,     1,     1,     3,     1,     0,     1,
+       1,     2,     2,     1,     1,     2,     3,     2,     2,     2,
+       2,     4,     4,     0,     1,     1,     3,     1,     6,     1,
+       2,     1,     1,     0,     2,     1,     1,     1,     1,     1,
+       1,     1,     2,     4,     2,     2,     2,     2,     2,     3,
+       0,     1,     1,     3,     1,     1,     1,     1,     0,     2,
+       4,     2,     0,     2,     1,     1,     1,     4,     1,     0,
+       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
        1,     3,     0,     3,     0,     1,     1,     3,     1,     1,
        2,     1,     3,     0,     2,     1,     1,     1,     2,     1,
        2,     2,     3,     3,     2,     2,     1,     1,     1,     1,
@@ -1287,7 +1291,7 @@
        1,     3,     1,     1,     3,     2,     1,     5,     5,     0,
        1,     1,     2,     3,     0,     1,     1,     2,     3,     0,
        2,     1,     2,     0,     1,     3,     2,     2,     1,     1,
-       2,     1,     1,     2,     4,     4,     4,     4,     1,     1,
+       2,     1,     1,     2,     4,     4,     4,     4,     4,     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,
@@ -1295,8 +1299,9 @@
        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,     2,     1,     1,     2,     1,     2,     1,     2,
-       2,     1,     2,     2,     1,     1,     1,     3,     1,     3
+       1,     1,     1,     2,     1,     1,     2,     1,     2,     1,
+       2,     2,     1,     2,     2,     1,     1,     1,     3,     1,
+       3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1304,428 +1309,428 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   413,     3,     0,     2,     0,
+       0,     5,     5,     0,     6,   414,     3,     0,     2,     0,
        1,     0,     0,     0,     0,     0,   137,     0,     0,   112,
-     428,     0,    19,    20,     0,     0,     0,   421,   140,   418,
-     412,   414,   416,     0,    55,   424,     0,     0,     0,     0,
-       0,     0,     0,     5,     7,    17,    14,    15,    16,    12,
-      13,    11,     9,    55,    18,    10,     0,    39,    40,    45,
-     129,   425,   422,   426,   364,   369,   370,   372,   371,   366,
-     367,   373,   368,    23,   365,     0,   114,     0,   420,    24,
-     419,   417,   345,   346,   342,   343,   360,   361,   363,   362,
-       0,     0,   141,   142,   145,   150,   146,     0,   147,   344,
-     149,   148,   415,   423,     0,   131,    42,     0,    38,    54,
-      52,    53,     0,     0,     0,   327,     0,     0,     4,     0,
-       0,    49,     0,    46,    47,    21,   112,   118,   119,   123,
-       0,   115,   116,   121,   111,     0,    25,    26,    28,   360,
-       0,   153,   341,   340,   357,   358,   359,   429,     0,   151,
-     427,    58,    59,    60,    57,   323,     0,   323,    61,     0,
-      62,    63,     0,     0,     0,    56,     0,     0,     0,     0,
-       0,     8,    80,   275,     0,   274,    44,     0,   120,     0,
-     113,     0,     0,     0,   152,     0,   143,     0,    66,   324,
-       0,    67,    72,    64,    68,    69,    70,    43,     0,     0,
-       0,    41,    91,    79,   239,    48,   125,   112,   127,   126,
-     122,   124,   117,    29,    27,   154,     0,     0,    77,     0,
-      73,    74,    78,    76,   334,   335,   336,     0,     0,    81,
-     128,     0,     0,     0,    30,    31,     0,    34,    35,   325,
-      65,    71,     0,    51,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   137,   366,   367,   373,   368,
-     269,   360,   277,     0,    50,    92,    94,   108,   110,   106,
-     107,   109,   105,   104,    95,     0,   140,   136,   103,     0,
-      96,     0,     0,    97,    98,    99,   102,   240,   241,   242,
-       0,   263,   265,   264,     0,   268,     0,   101,   289,   290,
-     292,   291,   293,   100,     0,   328,   329,     0,   359,   365,
-     353,   354,   355,   356,    84,     0,     0,    36,    22,    32,
-      33,    75,     0,   333,     0,   330,   331,   332,   298,     0,
-       0,   309,   314,   244,     0,     0,    93,     0,     0,     0,
-       0,     0,   278,   279,   283,   130,   134,   135,   138,   139,
-     146,   158,   189,   364,   369,   370,   372,   371,   366,   367,
-     373,   368,   345,   342,   343,     0,     0,     0,   358,   260,
-     267,     0,     0,   326,   411,   409,   410,     0,     0,   400,
-     401,   402,   403,   405,   406,   404,   407,   408,     0,     0,
-       0,     0,    83,    37,     0,   234,   237,     0,   345,     0,
-     299,   300,   303,   302,   319,   306,   294,   296,     0,     0,
-     310,   311,     0,     0,   315,   316,     0,     0,   245,   246,
-     133,   295,   132,   232,     0,     0,   276,     0,   281,     0,
+     429,     0,    18,    19,     0,     0,     0,   422,   140,   419,
+     413,   415,   417,     0,    53,   425,     0,     0,     0,     0,
+       0,     0,     5,     7,    16,    14,    15,    12,    13,    11,
+       9,    53,    17,    10,     0,    38,    39,    43,   129,   426,
+     423,   427,   365,   370,   371,   373,   372,   367,   368,   374,
+     369,    22,   366,     0,   114,     0,   421,    23,   420,   418,
+     346,   347,   343,   344,   361,   362,   364,   363,     0,     0,
+     141,   142,   145,   150,   146,     0,   147,   345,   149,   148,
+     416,   424,     0,   131,    40,     0,    37,    52,    50,    51,
+       0,     0,     0,   327,     0,     4,     0,     0,    47,     0,
+      44,    45,    20,   112,   118,   119,   123,     0,   115,   116,
+     121,   111,     0,    24,    25,    27,   361,     0,   153,   342,
+     341,   358,   359,   360,   430,     0,   151,   428,    56,    57,
+      58,    55,   323,     0,   323,    59,     0,    60,    61,     0,
+       0,     0,    54,     0,     0,     0,     0,     8,    78,   275,
+       0,   274,    42,     0,   120,     0,   113,     0,     0,     0,
+     152,     0,   143,     0,    64,   324,     0,    65,    70,    62,
+      66,    67,    68,    41,     0,     0,     0,    89,    77,   239,
+      46,   125,   112,   127,   126,   122,   124,   117,    28,    26,
+     154,     0,     0,    75,     0,    71,    72,    76,    74,   334,
+     335,   336,   337,     0,     0,    79,   128,     0,     0,     0,
+      29,    30,     0,    33,    34,   325,    63,    69,     0,    49,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   137,   367,   368,   374,   369,   269,   361,   277,
+       0,    48,    90,    92,   107,   106,   110,   104,   105,   108,
+     103,   102,    93,     0,   140,   136,   101,     0,    94,     0,
+       0,    95,    96,    97,   100,   240,   241,   242,     0,   263,
+     265,   264,     0,   268,     0,    99,   289,   290,   292,   291,
+     293,    98,     0,   328,   329,     0,   360,   366,   354,   355,
+     356,   357,    82,     0,     0,    35,    21,    31,    32,    73,
+       0,   333,     0,   330,   331,   332,   298,     0,     0,   309,
+     314,   244,     0,     0,     0,    91,     0,     0,     0,     0,
+       0,   278,   279,   283,   130,   134,   135,   138,   139,   146,
+     158,   189,   365,   370,   371,   373,   372,   367,   368,   374,
+     369,   346,   343,   344,     0,     0,     0,   359,   260,   267,
+       0,     0,   326,   412,   410,   411,     0,     0,   401,   402,
+     403,   404,   406,   407,   405,   408,   409,     0,     0,     0,
+       0,    81,    36,     0,   234,   237,     0,   346,     0,   299,
+     300,   303,   302,   319,   306,   294,   296,     0,     0,   310,
+     311,     0,     0,   315,   316,     0,     0,   245,   246,   133,
+     295,     0,   132,   232,     0,     0,   276,     0,   281,     0,
      230,   231,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   347,   348,   349,   350,   352,   351,     0,     0,
+       0,     0,   348,   349,   350,   351,   353,   352,     0,     0,
        0,     0,     0,     0,     0,   273,   271,   272,     0,   270,
-     261,   171,   172,   175,   173,   174,   176,   364,   269,   161,
-     162,   360,   374,   375,   376,     0,   165,   166,   262,   163,
-       0,   358,   365,     0,   170,     0,    82,    90,   323,   287,
-     285,   286,     0,    85,    87,    88,    86,   233,     0,   238,
+     261,   171,   172,   175,   173,   174,   176,   365,   269,   161,
+     162,   361,   375,   376,   377,     0,   165,   166,   262,   163,
+       0,   359,   366,     0,   170,     0,    80,    88,   323,   287,
+     285,   286,     0,    83,    85,    86,    84,   233,     0,   238,
      236,     0,     0,   297,     0,   305,     0,     0,   312,     0,
-       0,   317,     0,     0,     0,     0,     0,   247,   180,   282,
-     280,   284,   144,   201,   203,   204,   205,   206,   207,   208,
-       0,     0,     0,     0,     0,     0,     0,     0,   368,   211,
-       0,   212,   209,   210,   222,   226,   227,   223,   217,   224,
-     218,   219,   215,   225,   220,   221,   216,   213,   199,   214,
-     202,   266,   399,   394,   396,   395,   398,   397,   387,   388,
-     389,   392,   390,   391,   393,   386,   378,   384,   377,   379,
-     380,   381,   382,   383,   385,     0,     0,     0,   169,   156,
-     167,     0,   168,   177,   179,   288,     0,   235,   337,   338,
-     339,   304,   301,   323,   321,   320,   313,   308,   318,   307,
-     248,     0,   252,   268,   250,   254,   190,   191,   192,   193,
-     194,   195,   196,   198,   197,   200,   184,   183,   185,   187,
-     181,   188,   186,   182,     0,     0,   178,     0,   322,     0,
-       0,   249,     0,   259,     0,   255,   256,   155,   157,    89,
-       0,   253,     0,     0,   257,   251,   258,   243
+       0,   317,     0,     0,     0,     0,     0,   247,     0,   180,
+     282,   280,   284,   144,   201,   203,   204,   205,   206,   207,
+     208,     0,     0,     0,     0,     0,     0,     0,     0,   369,
+     211,     0,   212,   209,   210,   222,   226,   227,   223,   217,
+     224,   218,   219,   215,   225,   220,   221,   216,   213,   199,
+     214,   202,   266,   400,   395,   397,   396,   399,   398,   388,
+     389,   390,   393,   391,   392,   394,   387,   379,   385,   378,
+     380,   381,   382,   383,   384,   386,     0,     0,     0,   169,
+     156,   167,     0,   168,   177,   179,   288,     0,   235,   338,
+     339,   340,   304,   301,   323,   321,   320,   313,   308,   318,
+     307,   248,     0,   252,   268,   250,   254,   109,   190,   191,
+     192,   193,   194,   195,   196,   198,   197,   200,   184,   183,
+     185,   187,   181,   188,   186,   182,     0,     0,   178,     0,
+     322,     0,     0,   249,     0,   259,     0,   255,   256,   155,
+     157,    87,     0,   253,     0,     0,   257,   251,   258,   243
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     8,     5,    43,    44,    21,    22,    23,    24,
-     135,   136,   137,   233,   234,   235,   236,   237,   238,    46,
-      25,    48,    49,    50,    26,   122,   123,   124,    52,   264,
-      53,   110,   104,   165,   193,   219,   220,   221,   202,   203,
-     229,   314,   391,   503,   504,   505,   227,   265,   266,   267,
-      27,    77,   130,   131,   132,   133,   179,   211,    61,   270,
-      54,   272,   273,   274,   275,    28,   347,    91,    92,   349,
-      93,    94,    95,    96,   140,   277,   278,   486,   279,   487,
-     280,   281,   365,   557,   282,   432,   283,   284,   394,   395,
-     510,    29,   286,   287,   288,   417,   418,   419,   526,   651,
-     654,   655,   656,   289,   290,   291,   292,   293,   294,   468,
-      97,   296,   341,   342,   343,   428,   506,   297,   298,   299,
-     300,   329,   399,   400,   401,   402,   403,   404,   301,   302,
-     409,   410,   411,   413,   414,   415,   515,   615,   188,   189,
-     303,    55,   304,   305,   325,   306,   115,   327,   608,   405,
-     142,    99,   458,   315,   143,   144,   145,   146,    74,   493,
-     595,   389,     6,     7,    30,    31,    32,    62,    33,    34,
+      -1,     3,     8,     5,    42,    43,    21,    22,    23,    24,
+     132,   133,   134,   229,   230,   231,   232,   233,   234,    45,
+      25,    47,    48,    26,   119,   120,   121,    50,   261,    51,
+     108,   102,   162,   189,   214,   215,   216,   197,   198,   225,
+     312,   390,   503,   504,   505,   223,   262,   263,   264,   265,
+      27,    75,   127,   128,   129,   130,   175,   206,    59,   268,
+      52,   270,   271,   272,   273,    28,   346,    89,    90,   348,
+      91,    92,    93,    94,   137,   275,   276,   486,   277,   487,
+     278,   279,   364,   558,   280,   432,   281,   282,   393,   394,
+     510,    29,   284,   285,   286,   416,   417,   418,   526,   653,
+     656,   657,   658,   287,   288,   289,   290,   291,   292,   468,
+      95,   294,   340,   341,   342,   428,   506,   295,   296,   297,
+     298,   327,   398,   399,   400,   401,   402,   403,   299,   300,
+     408,   409,   410,   412,   413,   414,   515,   616,   184,   185,
+     301,    53,   302,   303,   323,   304,   113,   325,   609,   404,
+     139,    97,   458,   313,   140,   141,   142,   143,    72,   493,
+     596,   388,     6,     7,    30,    31,    32,    60,    33,    34,
       35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -591
+#define YYPACT_NINF -595
 static const yytype_int16 yypact[] =
 {
-      11,    -2,    -2,    45,  -591,  -591,  -591,    74,  -591,   192,
-    -591,    36,    56,    47,   -70,   144,  -591,   697,    42,    -7,
-    -591,    82,  -591,  -591,    41,   117,   145,  -591,   666,  -591,
-      74,  -591,  -591,   144,  -591,  -591,   149,   148,   158,   166,
-     553,   189,   185,   173,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,   112,  -591,  -591,   197,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,   121,    33,   212,  -591,   697,
-    -591,  -591,  -591,  -591,  -591,  -591,   125,  -591,  -591,  -591,
-     810,   215,   132,  -591,  -591,  -591,  -591,   129,  -591,  -591,
-    -591,   133,  -591,  -591,   721,  -591,  -591,   136,  -591,  -591,
-    -591,  -591,   697,   697,   697,  -591,   139,    46,  -591,   387,
-    1034,  -591,   138,   141,  -591,  -591,    -7,  -591,  -591,  -591,
-     143,   146,  -591,  -591,  -591,   151,   147,  -591,  -591,  -591,
-      14,  -591,  -591,  -591,  -591,  -591,  -591,  -591,   666,  -591,
-    -591,  -591,  -591,  -591,  -591,   150,   153,   150,  -591,   154,
-    -591,  -591,   150,   150,   150,  -591,   218,   152,   155,   156,
-     140,  -591,  -591,  -591,   230,  -591,  -591,   197,  -591,    29,
-    -591,    33,   240,   697,  -591,   810,  -591,   233,  -591,  -591,
-     553,  -591,    32,  -591,  -591,  -591,  -591,  -591,   232,   234,
-     235,  -591,  -591,   280,  -591,  -591,  -591,    -7,  -591,  -591,
-    -591,  -591,  -591,   100,  -591,  -591,   169,   170,  -591,   175,
-     181,  -591,  -591,  -591,  -591,  -591,  -591,   275,   200,  -591,
-    -591,   200,   213,   201,   100,  -591,   274,  -591,  -591,  -591,
-    -591,  -591,    32,  -591,   200,   189,   131,   204,   204,   289,
-     303,   305,   222,  1020,   533,   704,   827,   850,  1003,   697,
-    -591,    39,   459,   308,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,   310,   666,  -591,  -591,   311,
-    -591,   313,   867,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-     314,  -591,  -591,  -591,   204,   223,   228,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,   317,  -591,  -591,   764,   -87,   129,
-    -591,  -591,  -591,  -591,  -591,   697,   243,  -591,  -591,  -591,
-    -591,  -591,   697,  -591,   697,  -591,  -591,  -591,   884,   321,
-     322,   338,   339,   329,   326,   327,  -591,   330,   331,   242,
-     315,   247,   249,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-     246,  -591,  -591,   -23,   -23,   -23,   -23,   -23,   -23,   -23,
-     292,   -14,   162,   162,   162,   328,   -23,   162,   -23,  -591,
-    -591,   411,  1020,  -591,  -591,  -591,  -591,   597,   711,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,   616,   810,
-     252,    31,  -591,  -591,   -15,  -591,   278,   254,   323,   259,
-     263,  -591,  -591,  -591,  -591,  -591,  -591,  -591,   810,   357,
-     338,  -591,   810,   360,   339,  -591,   810,    87,   329,  -591,
-    -591,  -591,  -591,  -591,   810,  1003,  -591,   459,   -10,   810,
-    -591,  -591,   697,   697,   697,   697,   697,   697,   697,   342,
-     344,   345,   346,   348,   350,   351,   352,  1061,   -23,   697,
-     697,   697,  -591,  -591,  -591,  -591,  -591,  -591,   901,   918,
-     935,   697,   697,   810,   697,  -591,  -591,  -591,   204,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,   649,   545,   665,
-     665,    39,  -591,  -591,  -591,   666,  -591,  -591,  -591,  -591,
-     665,   363,   -18,   810,  -591,   810,  -591,  -591,   150,  -591,
-    -591,  -591,   281,  -591,  -591,  -591,  -591,  -591,   697,  -591,
-    -591,  1048,   810,  -591,   884,    92,   366,   367,  -591,   368,
-     369,  -591,   374,  1034,  1020,  1034,   376,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-     697,   697,   697,   697,   697,   697,   697,   697,   697,  -591,
-     697,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,   986,   952,   969,  -591,   291,
-     293,   810,  -591,  -591,  -591,  -591,    32,  -591,  -591,  -591,
-    -591,  -591,  -591,   150,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,   388,   304,  -591,  -591,    27,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,   666,   666,  -591,   306,  -591,   409,
-    1034,  -591,   459,  -591,   400,    27,  -591,   132,   132,  -591,
-     411,  -591,   393,   394,  -591,  -591,  -591,  -591
+     -43,    -9,    -9,    31,  -595,  -595,  -595,    55,  -595,    73,
+    -595,    34,    39,    43,    27,   118,  -595,   226,    80,   -23,
+    -595,    91,  -595,  -595,    11,   105,   129,  -595,   554,  -595,
+      55,  -595,  -595,   118,  -595,  -595,   132,   108,   134,   150,
+     571,   162,   193,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,    49,  -595,  -595,   187,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,   121,    20,   202,  -595,   226,  -595,  -595,
+    -595,  -595,  -595,  -595,   122,  -595,  -595,  -595,   767,   209,
+     125,  -595,  -595,  -595,  -595,   128,  -595,  -595,  -595,   131,
+    -595,  -595,   633,  -595,  -595,   126,  -595,  -595,  -595,  -595,
+     226,   226,   226,  -595,    41,  -595,   387,  1041,  -595,   166,
+     127,  -595,  -595,   -23,  -595,  -595,  -595,   138,   171,  -595,
+    -595,  -595,   139,   173,  -595,  -595,  -595,    63,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,   554,  -595,  -595,  -595,  -595,
+    -595,  -595,   172,   176,   172,  -595,   178,  -595,  -595,   172,
+     172,   172,  -595,   252,   179,   180,   182,  -595,  -595,  -595,
+     264,  -595,  -595,   187,  -595,    -2,  -595,    20,   265,   226,
+    -595,   767,  -595,   261,  -595,  -595,   571,  -595,   170,  -595,
+    -595,  -595,  -595,  -595,   279,   260,   158,  -595,   329,  -595,
+    -595,  -595,   -23,  -595,  -595,  -595,  -595,  -595,   124,  -595,
+    -595,   218,   219,  -595,   220,   222,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,   532,    -4,  -595,  -595,    -4,   235,   240,
+     124,  -595,   311,  -595,  -595,  -595,  -595,  -595,   170,  -595,
+      -4,   162,   119,   230,   230,   315,   316,   317,   237,  1027,
+     309,   622,   707,   807,   824,   398,   226,  -595,    33,   459,
+     322,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,   323,   554,  -595,  -595,   324,  -595,   325,
+     841,  -595,  -595,  -595,  -595,  -595,  -595,  -595,   326,  -595,
+    -595,  -595,   230,   241,   242,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,   328,  -595,  -595,   721,   -99,   128,  -595,  -595,
+    -595,  -595,  -595,   226,   258,  -595,  -595,  -595,  -595,  -595,
+     226,  -595,   226,  -595,  -595,  -595,   858,   336,   337,   353,
+     354,   344,   342,   343,   259,  -595,   357,   358,   257,   347,
+     277,   282,  -595,  -595,  -595,  -595,  -595,  -595,  -595,   283,
+    -595,  -595,    -6,    -6,    -6,    -6,    -6,    -6,    -6,   291,
+       3,   135,   135,   135,   359,    -6,   135,    -6,  -595,  -595,
+    1011,  1027,  -595,  -595,  -595,  -595,   926,   943,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,   236,   767,   284,
+      40,  -595,  -595,   -20,  -595,   310,   292,   369,   304,   305,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,   767,   402,   353,
+    -595,   767,   403,   354,  -595,   767,   115,   344,  -595,  -595,
+    -595,   177,  -595,  -595,   767,   398,  -595,   459,    84,   767,
+    -595,  -595,   226,   226,   226,   226,   226,   226,   226,   382,
+     384,   386,   401,   407,   408,   409,   410,   345,    -6,   226,
+     226,   226,  -595,  -595,  -595,  -595,  -595,  -595,   875,   892,
+     909,   226,   226,   767,   226,  -595,  -595,  -595,   230,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,   273,   623,   637,
+     637,    33,  -595,  -595,  -595,   554,  -595,  -595,  -595,  -595,
+     637,   422,   -11,   767,  -595,   767,  -595,  -595,   172,  -595,
+    -595,  -595,   340,  -595,  -595,  -595,  -595,  -595,   226,  -595,
+    -595,  1055,   767,  -595,   858,    75,   426,   427,  -595,   428,
+     430,  -595,   431,  1041,  1027,  1041,   432,  -595,   434,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+    -595,   226,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,   994,   960,   977,  -595,
+     364,   365,   767,  -595,  -595,  -595,  -595,   170,  -595,  -595,
+    -595,  -595,  -595,  -595,   172,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,   452,   367,  -595,  -595,    57,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,   554,   554,  -595,   370,
+    -595,   474,  1041,  -595,   459,  -595,   465,    57,  -595,   125,
+     125,  -595,  1011,  -595,   458,   460,  -595,  -595,  -595,  -595
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -591,  -591,  -591,    17,  -591,   318,     3,  -591,  -591,  -591,
-    -591,  -591,   248,  -591,  -591,   202,  -591,  -591,  -591,  -591,
-       7,  -591,  -591,  -591,     5,  -591,  -591,   260,  -591,  -591,
-    -591,   250,   386,  -591,  -591,  -591,  -591,  -234,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -591,  -591,  -591,   187,  -591,
-    -193,  -105,  -591,  -591,   261,  -591,  -591,  -591,  -173,  -591,
-    -160,  -591,  -591,  -591,  -591,  -217,  -591,   167,  -430,  -591,
-     298,   -26,  -591,   -93,  -591,  -591,  -591,  -591,  -591,  -591,
-    -591,  -591,  -591,  -591,  -591,  -330,  -591,  -590,  -591,   -44,
-    -591,  -141,  -591,  -591,  -591,  -591,  -591,    48,  -591,  -591,
-    -591,  -591,  -190,  -591,  -591,  -235,  -591,  -591,   -57,  -191,
-    -118,   236,  -591,  -591,  -420,  -591,    57,  -591,  -591,  -591,
-    -591,  -239,  -591,  -591,   -28,  -591,  -251,   -20,  -591,  -591,
-    -591,  -591,    77,  -591,  -591,    76,  -591,  -591,  -151,    37,
-    -591,  -591,  -591,  -591,  -591,  -591,   -22,  -591,  -591,   -85,
-     -27,   101,  -216,  -201,  -214,  -591,   -25,   -17,  -212,  -591,
-    -365,  -591,  -591,  -591,  -591,   463,  -591,   462,  -591,  -591,
-      75
+    -595,  -595,  -595,    17,  -595,   399,     7,  -595,  -595,  -595,
+    -595,  -595,   335,  -595,  -595,   285,  -595,  -595,  -595,  -595,
+      -1,  -595,  -595,     8,  -595,  -595,   346,  -595,  -595,  -595,
+     330,   467,  -595,  -595,  -595,  -595,  -231,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -595,  -595,   270,  -595,  -595,
+    -202,  -105,  -595,  -595,   361,  -595,  -595,  -595,  -201,  -595,
+    -196,  -595,  -595,  -595,  -595,  -213,  -595,   248,  -406,  -595,
+     378,    50,  -595,   -90,  -595,  -595,  -595,  -595,  -595,  -595,
+    -595,  -595,  -595,  -595,  -595,  -251,  -595,  -594,  -595,    28,
+    -595,  -195,  -595,  -595,  -595,  -595,  -595,   123,  -595,  -595,
+    -595,  -595,  -112,  -595,  -595,  -236,  -595,  -595,    22,  -110,
+    -115,   299,  -595,  -595,  -418,  -595,   133,  -595,  -595,  -595,
+    -595,  -230,  -595,  -595,    45,  -595,  -288,    51,  -595,  -595,
+    -595,  -595,   144,  -595,  -595,   142,  -595,  -595,  -150,    59,
+    -595,  -595,  -595,  -595,  -595,  -595,     1,  -595,  -595,   -82,
+     -27,   175,  -164,  -197,  -198,  -595,   -25,   -17,  -211,  -595,
+    -409,  -595,  -595,  -595,  -595,   527,  -595,   531,  -595,  -595,
+      52
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -365
+#define YYTABLE_NINF -366
 static const yytype_int16 yytable[] =
 {
-      73,    98,   174,   100,   149,   141,   191,   530,   321,   330,
-     276,   101,    45,   307,    51,   309,    47,  -160,   335,     9,
-     507,   178,   430,   111,   433,   434,   435,   436,   437,   438,
-     316,   450,  -274,     4,   268,   653,   462,   276,   464,   244,
-     307,  -274,   309,   322,   337,    10,    -6,    36,   344,    37,
-      38,    39,    40,    59,   269,   370,    12,    13,   652,    14,
-     118,   268,   138,    41,   206,   653,   496,   271,   367,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,   218,    75,
-      42,   269,    56,    11,    12,    13,   285,    14,   498,   499,
-      63,   500,   501,    58,   271,   167,   168,   169,   431,   222,
-     215,   523,   230,   175,    57,    90,   508,   451,    63,   295,
-      15,    16,    76,   285,   596,   597,   524,    78,   550,   525,
-      45,    98,    51,   100,    47,   601,     1,     2,   497,   498,
-     499,   101,   500,   501,   502,   295,   295,   470,   184,   185,
-     207,   208,   209,   201,   126,   127,   128,   459,   460,   222,
-      17,   463,    80,   488,    18,    90,   210,   516,  -275,   129,
-      79,   519,    90,   473,   476,   522,   138,  -275,   339,   112,
-     113,   485,   114,   111,   490,   223,   492,   324,    17,    60,
-      81,    16,    18,   350,   105,    19,    82,    83,    84,    85,
-     613,    20,   614,    36,   106,    37,    38,    39,    40,   194,
-     195,   196,    12,    13,   107,    14,   231,   232,   117,    41,
-     308,   529,   108,   344,   657,   658,   390,   452,   453,   454,
-     455,   456,   457,   323,   326,   223,    42,   112,   113,   571,
-     114,   116,   662,   120,   263,   125,   175,   308,   310,   311,
-     312,   313,   338,   121,   558,   562,   566,   134,  -275,    98,
-     147,   100,    90,   148,   295,   366,  -274,   368,   166,   101,
-     170,   263,   176,   180,   197,   204,   177,   181,   183,   187,
-     295,   182,   190,   192,   198,   213,    36,   199,   200,   216,
-     224,   226,   243,   225,    11,    12,    13,   244,   228,   239,
-     240,   245,   246,   247,   248,   241,    17,   249,   392,   250,
-      18,   251,   242,   252,   494,   396,   318,   397,   253,   320,
-      60,   254,   255,    65,    66,    67,    68,   256,   257,   258,
-     259,   260,   317,   328,   331,   261,    87,    88,    89,   439,
-     440,   441,   442,   443,   444,   445,   446,   447,   332,   528,
-     333,   262,   448,   345,   532,   346,   351,   605,   352,   369,
-     372,   371,   373,   393,   469,   175,   406,   407,   408,   416,
-     412,   420,   421,   491,   424,   422,   423,   426,   429,   425,
-     427,   308,   647,   461,   495,   509,   511,   512,   569,   513,
-     517,   637,   640,   643,   514,   520,    19,   540,   598,   541,
-     542,   543,   600,   544,   262,   545,   546,   547,  -164,   602,
-     606,   616,   617,   618,   619,   621,   623,   624,   603,   620,
-     604,   625,   644,   449,   645,   533,   534,   535,   536,   537,
-     538,   539,   172,   649,   660,   650,   659,   663,   666,   667,
-     549,   214,   551,   552,   553,   171,   319,   205,   344,   119,
-     217,   336,   212,   348,   567,   568,   186,   570,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,   465,    98,   599,
-     100,   466,   648,   467,   607,   664,   527,   622,   101,   665,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   609,   531,   612,   518,   334,   489,
-     521,   396,   611,   102,   610,   103,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,   340,   175,   175,   175,   139,
-      87,    88,    89,   222,     0,     0,   646,     0,     0,     0,
-       0,     0,     0,   626,   627,   628,   629,   630,   631,   632,
-     633,   634,   661,   635,    36,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,    13,   244,     0,     0,     0,   245,
-     246,   247,   248,     0,     0,   249,     0,   250,     0,   251,
-       0,   252,     0,     0,     0,     0,   253,     0,    60,     0,
-     255,    65,    66,    67,    68,   256,   257,   258,   259,   260,
-    -345,     0,     0,   261,    87,    88,    89,     0,     0,   223,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,   109,
-     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
-     582,   583,   584,   585,     0,     0,     0,    98,    98,   100,
-     100,     0,     0,     0,     0,     0,     0,   101,   101,     0,
-       0,     0,     0,   175,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,   469,    19,   471,   472,   139,    87,    88,
-      89,     0,   262,   477,    65,    66,    67,    68,    69,    70,
-      71,    72,   478,    83,   479,   480,   481,    87,    88,    89,
-       0,     0,     0,     0,   586,     0,   587,   588,   589,   590,
-     591,   592,   593,   594,  -159,     0,  -137,  -137,  -137,  -137,
+      71,    96,   170,    98,   187,   146,   138,   319,    46,   531,
+     274,    99,   307,   333,   328,   507,    44,    49,   174,     9,
+    -274,   266,   267,   109,  -160,   305,     4,   269,   283,  -274,
+     314,    10,   655,   201,   308,   309,   310,   311,   274,   430,
+     307,    -6,    36,   320,    37,    38,    39,    40,   450,   266,
+     267,    12,    13,   305,    14,   269,   283,   336,    41,   115,
+     135,   343,   369,   655,    11,    12,    13,    61,    14,   240,
+     597,   598,     1,     2,    36,   496,    37,    38,    39,    40,
+      54,   602,   366,    12,    13,    61,    14,    55,   654,    56,
+      41,    15,    16,   164,   165,   166,    74,   226,   217,   210,
+     171,   508,   433,   434,   435,   436,   437,   438,   293,   202,
+     203,   204,    88,    46,   462,   431,   464,    73,    96,   516,
+      98,    44,    49,   519,   451,   205,    76,   522,    99,   523,
+      77,   123,   124,   125,   293,   470,   293,   497,   498,   499,
+      78,   500,   501,   502,   524,    17,   126,   525,   217,    18,
+      57,   488,  -275,    58,   104,    16,    88,   110,   111,    17,
+     112,  -275,   135,    18,    79,   322,    19,   103,   338,   109,
+     117,   218,    20,   614,   485,   615,   492,    17,   473,   476,
+     105,    18,   498,   499,   349,   500,   501,   180,   181,   490,
+     452,   453,   454,   455,   456,   457,   106,   551,   459,   460,
+     110,   111,   463,   112,   221,   222,   306,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   213,   389,   190,   191,
+     192,   218,   260,    80,    81,    82,    83,   530,   114,   343,
+     227,   228,   171,   118,   306,   122,   664,   131,   572,   337,
+     659,   660,   321,   324,   144,  -275,   145,    96,   163,    98,
+     260,    88,   173,   365,  -274,   367,   293,    99,   176,   178,
+     559,   563,   567,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,   293,   477,    63,    64,    65,    66,    67,    68,
+      69,    70,   478,    81,   479,   480,   481,    85,    86,    87,
+     172,   183,   177,    88,   179,   186,   391,   188,   193,   199,
+     208,   194,   195,   395,   196,   396,   494,   211,  -159,   220,
     -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,
-    -137,  -137,  -137,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    82,    83,    84,    85,    86,    87,    88,    89,
-     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
-     582,   583,   584,   585,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,     0,     0,   482,   483,   484,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,   150,     0,   474,
-     475,   139,    87,    88,    89,     0,     0,     0,     0,     0,
-       0,     0,  -137,  -364,  -364,  -364,  -364,  -364,  -364,  -364,
-    -364,  -364,  -364,  -364,  -364,  -364,  -364,     0,     0,    90,
-       0,     0,     0,     0,   586,     0,   587,   588,   589,   590,
-     591,   592,   593,   594,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,     0,     0,
-       0,     0,     0,  -364,     0,     0,  -364,     0,     0,     0,
-       0,     0,  -364,   374,   375,   376,   377,   378,   379,   380,
-     381,   382,   383,   384,   385,   386,   387,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    82,    83,    84,    85,
-     139,    87,    88,    89,  -228,  -228,  -228,  -228,  -228,  -228,
+    -137,  -137,  -137,  -137,  -137,  -137,  -137,   219,   439,   440,
+     441,   442,   443,   444,   445,   446,   447,   224,   235,   236,
+     237,   448,   529,   238,   315,   316,   318,   533,   606,   326,
+     329,   330,   331,   469,   171,   334,   259,   344,   345,   350,
+     351,   368,   491,   372,   371,   482,   483,   484,   392,   370,
+     306,   405,   406,   407,   415,   411,   649,   419,   420,   424,
+     421,   570,    62,    63,    64,    65,    66,    67,    68,    69,
+     549,   599,   422,   423,   528,   601,  -137,   426,   639,   642,
+     645,   425,   603,   427,   461,   429,   495,   509,   622,   624,
+     625,   604,   449,   605,   511,   534,   535,   536,   537,   538,
+     539,   540,   168,   512,   513,   517,   514,   541,   520,   542,
+     550,   543,   552,   553,   554,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   568,   569,   544,   571,   136,    85,
+      86,    87,   545,   546,   547,   548,   343,  -164,    96,   607,
+      98,   617,   618,   619,   650,   620,   621,   626,    99,   627,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   610,   646,   647,   651,   652,   662,
+     661,   395,   665,   668,   611,   669,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   339,   171,   171,   171,   136,
+      85,    86,    87,   167,   209,   317,   212,   217,   116,   200,
+     648,   335,   347,   182,   628,   629,   630,   631,   632,   633,
+     634,   635,   636,    36,   637,   600,   608,   663,   207,   239,
+     527,    11,    12,    13,   240,   666,   623,   332,   241,   242,
+     243,   244,   667,   518,   245,   521,   246,   100,   247,   613,
+     248,   532,   489,   612,   101,   249,   250,    58,   251,   252,
+      63,    64,    65,    66,   253,   254,   255,   256,   257,     0,
+       0,     0,   258,    85,    86,    87,     0,     0,     0,     0,
+     218,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      80,    81,    82,    83,    84,    85,    86,    87,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,   107,     0,    96,
+      96,    98,    98,    36,     0,     0,     0,     0,     0,    99,
+      99,    11,    12,    13,   240,   171,     0,     0,   241,   242,
+     243,   244,     0,    19,   245,   469,   246,     0,   247,     0,
+     248,   259,     0,     0,     0,   249,   250,    58,  -346,   252,
+      63,    64,    65,    66,   253,   254,   255,   256,   257,   147,
+       0,     0,   258,    85,    86,    87,     0,    88,   573,   574,
+     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+     585,   586,   573,   574,   575,   576,   577,   578,   579,   580,
+     581,   582,   583,   584,   585,   586,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+       0,     0,     0,    19,     0,     0,     0,     0,     0,     0,
+       0,   259,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   587,     0,   588,   589,   590,   591,   592,   593,
+     594,   595,     0,     0,     0,     0,   587,     0,   588,   589,
+     590,   591,   592,   593,   594,   595,  -365,  -365,  -365,  -365,
+    -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    80,    81,    82,    83,   136,    85,    86,
+      87,     0,     0,     0,     0,     0,  -365,     0,     0,  -365,
+       0,     0,     0,     0,     0,  -365,     0,     0,     0,     0,
+       0,     0,     0,   387,  -228,  -228,  -228,  -228,  -228,  -228,
     -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,
-    -228,     0,     0,     0,     0,     0,   388,  -229,  -229,  -229,
-    -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,
-    -229,  -229,  -229,  -229,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,    83,   363,   364,   139,    87,    88,
-      89,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-     398,    83,    84,    85,   139,    87,    88,    89,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,   554,     0,   555,
-     556,   139,    87,    88,    89,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,   559,     0,   560,   561,   139,    87,
-      88,    89,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,   563,     0,   564,   565,   139,    87,    88,    89,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,     0,     0,
-     638,   639,   139,    87,    88,    89,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,     0,     0,   641,   642,   139,
-      87,    88,    89,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,   636,     0,     0,     0,   139,    87,    88,    89,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,     0,
-       0,     0,     0,   139,    87,    88,    89,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,   260,     0,     0,     0,
-     173,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-       0,     0,     0,     0,   173,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    82,    83,    84,    85,    64,    65,
-      66,    67,    68,    69,    70,    71,   548
+    -228,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,
+    -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,    81,   362,
+     363,   136,    85,    86,    87,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   397,    81,    82,    83,   136,    85,
+      86,    87,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,   555,     0,   556,   557,   136,    85,    86,    87,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   560,     0,
+     561,   562,   136,    85,    86,    87,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   564,     0,   565,   566,   136,
+      85,    86,    87,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,     0,     0,   471,   472,   136,    85,    86,    87,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,     0,
+       0,   474,   475,   136,    85,    86,    87,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,     0,     0,   640,   641,
+     136,    85,    86,    87,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,     0,     0,   643,   644,   136,    85,    86,
+      87,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+     638,     0,     0,     0,   136,    85,    86,    87,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,   465,     0,     0,
+       0,   466,     0,   467,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,   257,     0,     0,     0,   169,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,     0,     0,     0,
+       0,   169,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    80,    81,    82,    83
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,   120,    28,    97,    90,   157,   427,   242,   248,
-     227,    28,     9,   227,     9,   227,     9,    35,   253,     2,
-      35,   126,    45,    40,   354,   355,   356,   357,   358,   359,
-     231,    45,   119,    35,   227,   625,   366,   254,   368,    12,
-     254,   128,   254,   244,   258,     0,     0,     1,   262,     3,
-       4,     5,     6,   123,   227,   294,    10,    11,    31,    13,
-      43,   254,    79,    17,    35,   655,    35,   227,   282,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    37,
-      34,   254,    46,     9,    10,    11,   227,    13,    98,    99,
-      15,   101,   102,    46,   254,   112,   113,   114,   121,   192,
-     185,    14,   207,   120,    48,   123,   121,   121,    33,   227,
-      36,    37,   119,   254,   479,   480,    29,    35,   448,    32,
-     117,   148,   117,   148,   117,   490,   115,   116,    97,    98,
-      99,   148,   101,   102,   103,   253,   254,   372,   124,   125,
-     111,   112,   113,   170,   111,   112,   113,   363,   364,   242,
-     104,   367,    35,   388,   108,   123,   127,   408,   119,   126,
-     119,   412,   123,   377,   378,   416,   183,   128,   261,    38,
-      39,   388,    41,   190,   388,   192,   388,    46,   104,    35,
-      35,    37,   108,   276,    35,   111,    46,    47,    48,    49,
-      98,   117,   100,     1,    46,     3,     4,     5,     6,   162,
-     163,   164,    10,    11,    46,    13,   106,   107,    35,    17,
-     227,   425,    46,   427,   644,   645,   309,    55,    56,    57,
-      58,    59,    60,   245,   246,   242,    34,    38,    39,   468,
-      41,    46,   652,   121,   227,   114,   253,   254,    38,    39,
-      40,    41,   259,    46,   458,   459,   460,    35,   123,   276,
-      35,   276,   123,   121,   372,   282,   123,   282,   122,   276,
-     121,   254,   124,   120,    46,    35,   125,   121,   121,   119,
-     388,   120,   119,   119,   122,    35,     1,   122,   122,    46,
-      48,    46,     7,    49,     9,    10,    11,    12,     8,   120,
-     120,    16,    17,    18,    19,   120,   104,    22,   315,    24,
-     108,    26,   121,    28,   389,   322,   105,   324,    33,    35,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,   109,   119,    35,    50,    51,    52,    53,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    35,   424,
-      35,   119,    50,    35,   429,    35,    35,   498,    35,    35,
-     122,   128,    35,   110,   371,   372,    35,    35,    20,    30,
-      21,    35,    35,   388,   122,    35,    35,   120,   122,    54,
-     121,   388,   606,    45,   122,    97,   122,    54,   463,   120,
-      23,   595,   596,   597,   121,    25,   111,    45,   481,    45,
-      45,    45,   485,    45,   119,    45,    45,    45,    35,   492,
-     119,    35,    35,    35,    35,   523,   524,   525,   493,    35,
-     495,    35,   121,   121,   121,   432,   433,   434,   435,   436,
-     437,   438,    35,    35,    15,   121,   120,    27,    35,    35,
-     447,   183,   449,   450,   451,   117,   234,   177,   652,    53,
-     190,   254,   181,   276,   461,   462,   148,   464,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,   485,   485,
-     485,    50,   613,    52,   508,   655,   418,   524,   485,   660,
+      17,    28,   117,    28,   154,    95,    88,   238,     9,   427,
+     223,    28,   223,   249,   244,    35,     9,     9,   123,     2,
+     119,   223,   223,    40,    35,   223,    35,   223,   223,   128,
+     227,     0,   626,    35,    38,    39,    40,    41,   251,    45,
+     251,     0,     1,   240,     3,     4,     5,     6,    45,   251,
+     251,    10,    11,   251,    13,   251,   251,   255,    17,    42,
+      77,   259,   292,   657,     9,    10,    11,    15,    13,    12,
+     479,   480,   115,   116,     1,    35,     3,     4,     5,     6,
+      46,   490,   280,    10,    11,    33,    13,    48,    31,    46,
+      17,    36,    37,   110,   111,   112,   119,   202,   188,   181,
+     117,   121,   353,   354,   355,   356,   357,   358,   223,   111,
+     112,   113,   123,   114,   365,   121,   367,    37,   145,   407,
+     145,   114,   114,   411,   121,   127,    35,   415,   145,    14,
+     119,   111,   112,   113,   249,   371,   251,    97,    98,    99,
+      35,   101,   102,   103,    29,   104,   126,    32,   238,   108,
+     123,   387,   119,    35,    46,    37,   123,    38,    39,   104,
+      41,   128,   179,   108,    35,    46,   111,    35,   258,   186,
+     121,   188,   117,    98,   387,   100,   387,   104,   376,   377,
+      46,   108,    98,    99,   274,   101,   102,   124,   125,   387,
+      55,    56,    57,    58,    59,    60,    46,   448,   362,   363,
+      38,    39,   366,    41,    46,    47,   223,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,   307,   159,   160,
+     161,   238,   223,    46,    47,    48,    49,   425,    35,   427,
+     106,   107,   249,    46,   251,   114,   654,    35,   468,   256,
+     646,   647,   241,   242,    35,   123,   121,   274,   122,   274,
+     251,   123,   125,   280,   123,   280,   371,   274,   120,   120,
+     458,   459,   460,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   387,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+     124,   119,   121,   123,   121,   119,   313,   119,    46,    35,
+      35,   122,   122,   320,   122,   322,   388,    46,    35,    49,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    48,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,     8,   120,   120,
+     120,    50,   424,   121,   109,   105,    35,   429,   498,   119,
+      35,    35,    35,   370,   371,    46,   119,    35,    35,    35,
+      35,    35,   387,    35,   122,   129,   130,   131,   110,   128,
+     387,    35,    35,    20,    30,    21,   607,    35,    35,   122,
+     121,   463,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,   481,    35,    35,   421,   485,   123,   120,   596,   597,
+     598,    54,   492,   121,    45,   122,   122,    97,   523,   524,
+     525,   493,   121,   495,   122,   432,   433,   434,   435,   436,
+     437,   438,    35,    54,   120,    23,   121,    45,    25,    45,
+     447,    45,   449,   450,   451,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,   461,   462,    45,   464,    50,    51,
+      52,    53,    45,    45,    45,    45,   654,    35,   485,   119,
+     485,    35,    35,    35,   614,    35,    35,    35,   485,    35,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,   511,   428,   514,   410,   252,   388,
-     414,   508,   512,    30,   511,    33,    37,    38,    39,    40,
+      93,    94,    95,    96,   511,   121,   121,    35,   121,    15,
+     120,   508,    27,    35,   511,    35,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,   523,   524,   525,    50,
-      51,    52,    53,   606,    -1,    -1,   601,    -1,    -1,    -1,
-      -1,    -1,    -1,   540,   541,   542,   543,   544,   545,   546,
-     547,   548,   650,   550,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     9,    10,    11,    12,    -1,    -1,    -1,    16,
-      17,    18,    19,    -1,    -1,    22,    -1,    24,    -1,    26,
-      -1,    28,    -1,    -1,    -1,    -1,    33,    -1,    35,    -1,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      35,    -1,    -1,    50,    51,    52,    53,    -1,    -1,   606,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    -1,    -1,    -1,   644,   645,   644,
-     645,    -1,    -1,    -1,    -1,    -1,    -1,   644,   645,    -1,
-      -1,    -1,    -1,   650,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,   660,   111,    48,    49,    50,    51,    52,
-      53,    -1,   119,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      -1,    -1,    -1,    -1,   129,    -1,   131,   132,   133,   134,
-     135,   136,   137,   138,    35,    -1,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    -1,   129,   130,   131,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    36,    -1,    48,
-      49,    50,    51,    52,    53,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   123,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,   123,
-      -1,    -1,    -1,    -1,   129,    -1,   131,   132,   133,   134,
-     135,   136,   137,   138,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    -1,    -1,
-      -1,    -1,    -1,   119,    -1,    -1,   122,    -1,    -1,    -1,
-      -1,    -1,   128,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
+      51,    52,    53,   114,   179,   230,   186,   607,    51,   173,
+     602,   251,   274,   145,   541,   542,   543,   544,   545,   546,
+     547,   548,   549,     1,   551,   485,   508,   652,   177,     7,
+     417,     9,    10,    11,    12,   657,   524,   248,    16,    17,
+      18,    19,   662,   409,    22,   413,    24,    30,    26,   514,
+      28,   428,   387,   512,    33,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+      -1,    -1,    50,    51,    52,    53,    -1,    -1,    -1,    -1,
+     607,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    -1,   646,
+     647,   646,   647,     1,    -1,    -1,    -1,    -1,    -1,   646,
+     647,     9,    10,    11,    12,   652,    -1,    -1,    16,    17,
+      18,    19,    -1,   111,    22,   662,    24,    -1,    26,    -1,
+      28,   119,    -1,    -1,    -1,    33,    34,    35,    35,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    36,
+      -1,    -1,    50,    51,    52,    53,    -1,   123,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   129,    -1,   131,   132,   133,   134,   135,   136,
+     137,   138,    -1,    -1,    -1,    -1,   129,    -1,   131,   132,
+     133,   134,   135,   136,   137,   138,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    -1,    -1,   122,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
+      53,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,   122,
+      -1,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   122,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    -1,    48,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    -1,    48,    49,    50,    51,    52,    53,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
       48,    49,    50,    51,    52,    53,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    48,    49,    50,
+      41,    42,    43,    44,    45,    46,    -1,    48,    49,    50,
       51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+      44,    45,    -1,    -1,    48,    49,    50,    51,    52,    53,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-      -1,    -1,    -1,    50,    51,    52,    53,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    -1,    -1,    -1,
-      50,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      -1,    -1,    -1,    -1,    50,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    37,    38,
-      39,    40,    41,    42,    43,    44,    45
+      -1,    48,    49,    50,    51,    52,    53,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    48,    49,
+      50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    -1,    -1,    48,    49,    50,    51,    52,
+      53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    -1,    -1,    -1,    50,    51,    52,    53,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    -1,    -1,
+      -1,    50,    -1,    52,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    -1,    -1,    -1,    50,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      -1,    50,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1734,47 +1739,47 @@
 {
        0,   115,   116,   140,    35,   142,   301,   302,   141,   142,
        0,     9,    10,    11,    13,    36,    37,   104,   108,   111,
-     117,   145,   146,   147,   148,   159,   163,   189,   204,   230,
+     117,   145,   146,   147,   148,   159,   162,   189,   204,   230,
      303,   304,   305,   307,   308,   309,     1,     3,     4,     5,
-       6,    17,    34,   143,   144,   145,   158,   159,   160,   161,
-     162,   163,   167,   169,   199,   280,    46,    48,    46,   123,
-      35,   197,   306,   309,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,   296,   297,    37,   119,   190,    35,   119,
-      35,    35,    46,    47,    48,    49,    50,    51,    52,    53,
-     123,   206,   207,   209,   210,   211,   212,   249,   289,   290,
-     295,   296,   304,   306,   171,    35,    46,    46,    46,    46,
-     170,   296,    38,    39,    41,   285,    46,    35,   142,   171,
-     121,    46,   164,   165,   166,   114,   111,   112,   113,   126,
-     191,   192,   193,   194,    35,   149,   150,   151,   296,    50,
-     213,   288,   289,   293,   294,   295,   296,    35,   121,   212,
-      36,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,   172,   122,   296,   296,   296,
-     121,   144,    35,    50,   249,   296,   124,   125,   190,   195,
-     120,   121,   120,   121,   124,   125,   209,   119,   277,   278,
-     119,   277,   119,   173,   278,   278,   278,    46,   122,   122,
-     122,   289,   177,   178,    35,   166,    35,   111,   112,   113,
-     127,   196,   193,    35,   151,   288,    46,   170,    46,   174,
-     175,   176,   212,   296,    48,    49,    46,   185,     8,   179,
-     190,   106,   107,   152,   153,   154,   155,   156,   157,   120,
-     120,   120,   121,     7,    12,    16,    17,    18,    19,    22,
-      24,    26,    28,    33,    36,    37,    42,    43,    44,    45,
-      46,    50,   119,   159,   168,   186,   187,   188,   189,   197,
-     198,   199,   200,   201,   202,   203,   204,   214,   215,   217,
-     219,   220,   223,   225,   226,   230,   231,   232,   233,   242,
-     243,   244,   245,   246,   247,   249,   250,   256,   257,   258,
-     259,   267,   268,   279,   281,   282,   284,   293,   296,   297,
-      38,    39,    40,    41,   180,   292,   292,   109,   105,   154,
-      35,   176,   292,   285,    46,   283,   285,   286,   119,   260,
-     260,    35,    35,    35,   250,   244,   187,   293,   296,   212,
-      46,   251,   252,   253,   293,    35,    35,   205,   206,   208,
-     212,    35,    35,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    48,    49,   221,   289,   293,   295,    35,
-     260,   128,   122,    35,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,   122,   300,
-     212,   181,   296,   110,   227,   228,   296,   296,    46,   261,
-     262,   263,   264,   265,   266,   288,    35,    35,    20,   269,
-     270,   271,    21,   272,   273,   274,    30,   234,   235,   236,
-      35,    35,    35,    35,   122,    54,   120,   121,   254,   122,
+       6,    17,   143,   144,   145,   158,   159,   160,   161,   162,
+     166,   168,   199,   280,    46,    48,    46,   123,    35,   197,
+     306,   309,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,   296,   297,    37,   119,   190,    35,   119,    35,    35,
+      46,    47,    48,    49,    50,    51,    52,    53,   123,   206,
+     207,   209,   210,   211,   212,   249,   289,   290,   295,   296,
+     304,   306,   170,    35,    46,    46,    46,    46,   169,   296,
+      38,    39,    41,   285,    35,   142,   170,   121,    46,   163,
+     164,   165,   114,   111,   112,   113,   126,   191,   192,   193,
+     194,    35,   149,   150,   151,   296,    50,   213,   288,   289,
+     293,   294,   295,   296,    35,   121,   212,    36,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,   171,   122,   296,   296,   296,   144,    35,    50,
+     249,   296,   124,   125,   190,   195,   120,   121,   120,   121,
+     124,   125,   209,   119,   277,   278,   119,   277,   119,   172,
+     278,   278,   278,    46,   122,   122,   122,   176,   177,    35,
+     165,    35,   111,   112,   113,   127,   196,   193,    35,   151,
+     288,    46,   169,    46,   173,   174,   175,   212,   296,    48,
+      49,    46,    47,   184,     8,   178,   190,   106,   107,   152,
+     153,   154,   155,   156,   157,   120,   120,   120,   121,     7,
+      12,    16,    17,    18,    19,    22,    24,    26,    28,    33,
+      34,    36,    37,    42,    43,    44,    45,    46,    50,   119,
+     159,   167,   185,   186,   187,   188,   189,   197,   198,   199,
+     200,   201,   202,   203,   204,   214,   215,   217,   219,   220,
+     223,   225,   226,   230,   231,   232,   233,   242,   243,   244,
+     245,   246,   247,   249,   250,   256,   257,   258,   259,   267,
+     268,   279,   281,   282,   284,   293,   296,   297,    38,    39,
+      40,    41,   179,   292,   292,   109,   105,   154,    35,   175,
+     292,   285,    46,   283,   285,   286,   119,   260,   260,    35,
+      35,    35,   250,   244,    46,   186,   293,   296,   212,    46,
+     251,   252,   253,   293,    35,    35,   205,   206,   208,   212,
+      35,    35,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    48,    49,   221,   289,   293,   295,    35,   260,
+     128,   122,    35,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,   122,   300,   212,
+     180,   296,   110,   227,   228,   296,   296,    46,   261,   262,
+     263,   264,   265,   266,   288,    35,    35,    20,   269,   270,
+     271,    21,   272,   273,   274,    30,   234,   235,   236,    35,
+      35,   121,    35,    35,   122,    54,   120,   121,   254,   122,
       45,   121,   224,   224,   224,   224,   224,   224,   224,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    50,   121,
       45,   121,    55,    56,    57,    58,    59,    60,   291,   291,
@@ -1782,23 +1787,23 @@
      244,    48,    49,   293,    48,    49,   293,    37,    46,    48,
       49,    50,   129,   130,   131,   204,   216,   218,   244,   290,
      293,   295,   297,   298,   288,   122,    35,    97,    98,    99,
-     101,   102,   103,   182,   183,   184,   255,    35,   121,    97,
+     101,   102,   103,   181,   182,   183,   255,    35,   121,    97,
      229,   122,    54,   120,   121,   275,   265,    23,   271,   265,
-      25,   274,   265,    14,    29,    32,   237,   236,   288,   293,
-     253,   255,   288,   296,   296,   296,   296,   296,   296,   296,
-      45,    45,    45,    45,    45,    45,    45,    45,    45,   296,
-     224,   296,   296,   296,    46,    48,    49,   222,   293,    46,
-      48,    49,   293,    46,    48,    49,   293,   296,   296,   288,
-     296,   260,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,   129,   131,   132,   133,
-     134,   135,   136,   137,   138,   299,   299,   299,   212,   210,
-     212,   299,   212,   288,   288,   277,   119,   228,   287,   289,
-     296,   266,   263,    98,   100,   276,    35,    35,    35,    35,
-      35,   249,   247,   249,   249,    35,   296,   296,   296,   296,
-     296,   296,   296,   296,   296,   296,    46,   293,    48,    49,
-     293,    48,    49,   293,   121,   121,   288,   176,   277,    35,
-     121,   238,    31,   226,   239,   240,   241,   207,   207,   120,
-      15,   249,   253,    27,   241,   248,    35,    35
+      25,   274,   265,    14,    29,    32,   237,   236,   289,   288,
+     293,   253,   255,   288,   296,   296,   296,   296,   296,   296,
+     296,    45,    45,    45,    45,    45,    45,    45,    45,    45,
+     296,   224,   296,   296,   296,    46,    48,    49,   222,   293,
+      46,    48,    49,   293,    46,    48,    49,   293,   296,   296,
+     288,   296,   260,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,   129,   131,   132,
+     133,   134,   135,   136,   137,   138,   299,   299,   299,   212,
+     210,   212,   299,   212,   288,   288,   277,   119,   228,   287,
+     289,   296,   266,   263,    98,   100,   276,    35,    35,    35,
+      35,    35,   249,   247,   249,   249,    35,    35,   296,   296,
+     296,   296,   296,   296,   296,   296,   296,   296,    46,   293,
+      48,    49,   293,    48,    49,   293,   121,   121,   288,   175,
+     277,    35,   121,   238,    31,   226,   239,   240,   241,   207,
+     207,   120,    15,   249,   253,    27,   241,   248,    35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2630,202 +2635,197 @@
     { fixup_global_labels(lexer); ;}
     break;
 
-  case 21:
-#line 602 "pir.y"
+  case 20:
+#line 601 "pir.y"
     { new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
     break;
 
-  case 22:
-#line 608 "pir.y"
+  case 21:
+#line 607 "pir.y"
     { /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
     break;
 
-  case 23:
-#line 612 "pir.y"
+  case 22:
+#line 611 "pir.y"
     {
                           new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
                                     lexer->macro_size);
                         ;}
     break;
 
-  case 28:
-#line 627 "pir.y"
+  case 27:
+#line 626 "pir.y"
     { add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 36:
-#line 646 "pir.y"
+  case 35:
+#line 645 "pir.y"
     { store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 37:
-#line 650 "pir.y"
+  case 36:
+#line 649 "pir.y"
     {
                           store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
                                              pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
                         ;}
     break;
 
-  case 38:
-#line 661 "pir.y"
+  case 37:
+#line 660 "pir.y"
     { load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 39:
-#line 665 "pir.y"
+  case 38:
+#line 664 "pir.y"
     { yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
     break;
 
-  case 40:
-#line 667 "pir.y"
+  case 39:
+#line 666 "pir.y"
     { lexer->filename = (yyvsp[(2) - (2)].sval); ;}
     break;
 
-  case 41:
-#line 671 "pir.y"
-    { annotate(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
-    break;
-
-  case 42:
-#line 677 "pir.y"
+  case 40:
+#line 672 "pir.y"
     { set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 43:
-#line 681 "pir.y"
+  case 41:
+#line 676 "pir.y"
     { set_hll_map(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 44:
-#line 685 "pir.y"
+  case 42:
+#line 680 "pir.y"
     { set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
     break;
 
-  case 45:
-#line 689 "pir.y"
+  case 43:
+#line 684 "pir.y"
     { (yyval.key) = NULL; ;}
     break;
 
-  case 46:
-#line 691 "pir.y"
+  case 44:
+#line 686 "pir.y"
     { (yyval.key) = (yyvsp[(1) - (1)].key); ;}
     break;
 
-  case 47:
-#line 695 "pir.y"
+  case 45:
+#line 690 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
-  case 48:
-#line 697 "pir.y"
+  case 46:
+#line 692 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 49:
-#line 701 "pir.y"
+  case 47:
+#line 696 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 51:
-#line 711 "pir.y"
+  case 49:
+#line 706 "pir.y"
     { close_sub(lexer); ;}
     break;
 
-  case 52:
-#line 715 "pir.y"
+  case 50:
+#line 710 "pir.y"
     { new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 57:
-#line 727 "pir.y"
+  case 55:
+#line 722 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_ANON);;}
     break;
 
-  case 58:
-#line 729 "pir.y"
+  case 56:
+#line 724 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_INIT); ;}
     break;
 
-  case 59:
-#line 731 "pir.y"
+  case 57:
+#line 726 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LOAD); ;}
     break;
 
-  case 60:
-#line 733 "pir.y"
+  case 58:
+#line 728 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MAIN); ;}
     break;
 
-  case 61:
-#line 735 "pir.y"
+  case 59:
+#line 730 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LEX); ;}
     break;
 
-  case 62:
-#line 737 "pir.y"
+  case 60:
+#line 732 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_POSTCOMP); ;}
     break;
 
-  case 63:
-#line 739 "pir.y"
+  case 61:
+#line 734 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_IMMEDIATE); ;}
     break;
 
-  case 64:
-#line 741 "pir.y"
+  case 62:
+#line 736 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MULTI); ;}
     break;
 
-  case 65:
-#line 743 "pir.y"
+  case 63:
+#line 738 "pir.y"
     { set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
     break;
 
-  case 66:
-#line 745 "pir.y"
+  case 64:
+#line 740 "pir.y"
     { set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 67:
-#line 747 "pir.y"
+  case 65:
+#line 742 "pir.y"
     { set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 68:
-#line 749 "pir.y"
+  case 66:
+#line 744 "pir.y"
     { set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 69:
-#line 751 "pir.y"
+  case 67:
+#line 746 "pir.y"
     { set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 70:
-#line 753 "pir.y"
+  case 68:
+#line 748 "pir.y"
     { set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 71:
-#line 757 "pir.y"
+  case 69:
+#line 752 "pir.y"
     { set_sub_multi_types(lexer, (yyvsp[(2) - (3)].expr)); ;}
     break;
 
-  case 72:
-#line 761 "pir.y"
+  case 70:
+#line 756 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 1;
                           /* n=1 means :multi() -- without any types. */
                         ;}
     break;
 
-  case 73:
-#line 766 "pir.y"
+  case 71:
+#line 761 "pir.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr); ;}
     break;
 
-  case 74:
-#line 770 "pir.y"
+  case 72:
+#line 765 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 2;
                           /* start counting multi types; always 1 higher than actual number
@@ -2836,8 +2836,8 @@
                         ;}
     break;
 
-  case 75:
-#line 779 "pir.y"
+  case 73:
+#line 774 "pir.y"
     {
                           ++CURRENT_SUB(lexer)->info.num_multi_types;
                           /* link the multi types in reverse other. That's fine,
@@ -2848,23 +2848,23 @@
                         ;}
     break;
 
-  case 76:
-#line 790 "pir.y"
+  case 74:
+#line 785 "pir.y"
     { (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 77:
-#line 792 "pir.y"
+  case 75:
+#line 787 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 78:
-#line 794 "pir.y"
+  case 76:
+#line 789 "pir.y"
     { (yyval.expr) = expr_from_key(lexer, (yyvsp[(1) - (1)].key)); ;}
     break;
 
-  case 79:
-#line 798 "pir.y"
+  case 77:
+#line 793 "pir.y"
     {
                            /* if there are parameters, then emit a get_params instruction. */
                            if ((yyvsp[(1) - (1)].uval) > 0)
@@ -2872,13 +2872,13 @@
                          ;}
     break;
 
-  case 80:
-#line 806 "pir.y"
+  case 78:
+#line 801 "pir.y"
     { (yyval.uval) = 0; ;}
     break;
 
-  case 81:
-#line 808 "pir.y"
+  case 79:
+#line 803 "pir.y"
     {
                           /* if the :named flag was set, there's an extra
                            * constant string argument for the name. count that too.
@@ -2891,41 +2891,41 @@
                         ;}
     break;
 
-  case 82:
-#line 821 "pir.y"
+  case 80:
+#line 816 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
     break;
 
-  case 83:
-#line 825 "pir.y"
+  case 81:
+#line 820 "pir.y"
     { (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
     break;
 
-  case 84:
-#line 829 "pir.y"
+  case 82:
+#line 824 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 85:
-#line 831 "pir.y"
+  case 83:
+#line 826 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 89:
-#line 840 "pir.y"
+  case 87:
+#line 835 "pir.y"
     { (yyval.ival) = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 
                          ;}
     break;
 
-  case 90:
-#line 847 "pir.y"
+  case 88:
+#line 842 "pir.y"
     { (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
     break;
 
-  case 92:
-#line 854 "pir.y"
+  case 90:
+#line 849 "pir.y"
     {
                          ++lexer->stmt_counter;
                          /* increment the logical statement counter; a statement can be
@@ -2935,11 +2935,16 @@
                         ;}
     break;
 
-  case 93:
-#line 864 "pir.y"
+  case 91:
+#line 859 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
+  case 109:
+#line 882 "pir.y"
+    { annotate(lexer, (yyvsp[(2) - (5)].sval), (yyvsp[(4) - (5)].cval)); ;}
+    break;
+
   case 111:
 #line 892 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
@@ -4363,11 +4368,16 @@
     break;
 
   case 337:
+#line 2035 "pir.y"
+    { (yyval.cdec) = new_named_const(lexer, USTRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ustr)); ;}
+    break;
+
+  case 338:
 #line 2039 "pir.y"
     { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
-  case 339:
+  case 340:
 #line 2044 "pir.y"
     { /* this alternative is necessary, otherwise the parser
                                * just stops when assigning an identifier to a pmc
@@ -4378,97 +4388,97 @@
                             ;}
     break;
 
-  case 340:
+  case 341:
 #line 2056 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 341:
+  case 342:
 #line 2057 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
-  case 342:
+  case 343:
 #line 2061 "pir.y"
     { (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 343:
+  case 344:
 #line 2062 "pir.y"
     { (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
-  case 344:
+  case 345:
 #line 2063 "pir.y"
     { (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
     break;
 
-  case 345:
+  case 346:
 #line 2066 "pir.y"
     { (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 346:
+  case 347:
 #line 2067 "pir.y"
     { (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
     break;
 
-  case 347:
+  case 348:
 #line 2070 "pir.y"
     { (yyval.ival) = OP_NE; ;}
     break;
 
-  case 348:
+  case 349:
 #line 2071 "pir.y"
     { (yyval.ival) = OP_EQ; ;}
     break;
 
-  case 349:
+  case 350:
 #line 2072 "pir.y"
     { (yyval.ival) = OP_LT; ;}
     break;
 
-  case 350:
+  case 351:
 #line 2073 "pir.y"
     { (yyval.ival) = OP_LE; ;}
     break;
 
-  case 351:
+  case 352:
 #line 2074 "pir.y"
     { (yyval.ival) = OP_GE; ;}
     break;
 
-  case 352:
+  case 353:
 #line 2075 "pir.y"
     { (yyval.ival) = OP_GT; ;}
     break;
 
-  case 353:
+  case 354:
 #line 2078 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 354:
+  case 355:
 #line 2079 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 355:
+  case 356:
 #line 2080 "pir.y"
     { (yyval.ival) = PMC_TYPE; ;}
     break;
 
-  case 356:
+  case 357:
 #line 2081 "pir.y"
     { (yyval.ival) = STRING_TYPE; ;}
     break;
 
-  case 357:
+  case 358:
 #line 2089 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
-  case 359:
+  case 360:
 #line 2093 "pir.y"
     { /* a symbol must have been declared; check that at this point. */
                            symbol * sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
@@ -4483,277 +4493,277 @@
                          ;}
     break;
 
-  case 360:
+  case 361:
 #line 2106 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 361:
+  case 362:
 #line 2107 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 362:
+  case 363:
 #line 2108 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 363:
+  case 364:
 #line 2109 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 366:
+  case 367:
 #line 2117 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
-  case 367:
+  case 368:
 #line 2118 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
-  case 368:
+  case 369:
 #line 2119 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
-  case 369:
+  case 370:
 #line 2120 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
-  case 370:
+  case 371:
 #line 2121 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
-  case 371:
+  case 372:
 #line 2122 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
-  case 372:
+  case 373:
 #line 2123 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
-  case 373:
+  case 374:
 #line 2124 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
-  case 374:
+  case 375:
 #line 2127 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
-  case 375:
+  case 376:
 #line 2128 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
-  case 376:
+  case 377:
 #line 2129 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
-  case 377:
+  case 378:
 #line 2132 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
-  case 378:
+  case 379:
 #line 2133 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
-  case 379:
+  case 380:
 #line 2134 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 380:
+  case 381:
 #line 2135 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 381:
+  case 382:
 #line 2136 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 382:
+  case 383:
 #line 2137 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 383:
+  case 384:
 #line 2138 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 384:
+  case 385:
 #line 2139 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 385:
+  case 386:
 #line 2140 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 386:
+  case 387:
 #line 2141 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 387:
+  case 388:
 #line 2142 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 388:
+  case 389:
 #line 2143 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 389:
+  case 390:
 #line 2144 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 390:
+  case 391:
 #line 2145 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
-  case 391:
+  case 392:
 #line 2146 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
-  case 392:
+  case 393:
 #line 2147 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 393:
+  case 394:
 #line 2148 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
-  case 394:
+  case 395:
 #line 2149 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
-  case 395:
+  case 396:
 #line 2150 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
-  case 396:
+  case 397:
 #line 2151 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
-  case 397:
+  case 398:
 #line 2152 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
-  case 398:
+  case 399:
 #line 2153 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
-  case 399:
+  case 400:
 #line 2154 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
-  case 400:
+  case 401:
 #line 2160 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 401:
+  case 402:
 #line 2161 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 402:
+  case 403:
 #line 2162 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 403:
+  case 404:
 #line 2163 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 404:
+  case 405:
 #line 2164 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 405:
+  case 406:
 #line 2165 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 406:
+  case 407:
 #line 2166 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 407:
+  case 408:
 #line 2167 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 408:
+  case 409:
 #line 2168 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 409:
+  case 410:
 #line 2169 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 410:
+  case 411:
 #line 2170 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 411:
+  case 412:
 #line 2171 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 413:
+  case 414:
 #line 2192 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 422:
+  case 423:
 #line 2208 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 427:
+  case 428:
 #line 2218 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 428:
+  case 429:
 #line 2222 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 429:
+  case 430:
 #line 2227 "pir.y"
     {
 
@@ -4769,7 +4779,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4773 "pirparser.c"
+#line 4783 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About