charmxi: Generate registration for template EP instantiations
authorPhil Miller <mille121@illinois.edu>
Thu, 5 Apr 2012 20:07:05 +0000 (15:07 -0500)
committerPhil Miller <mille121@illinois.edu>
Thu, 5 Apr 2012 21:18:04 +0000 (16:18 -0500)
Parse template EP instantiations in ci file and generate appropriate
registration code in the client module _register() function.

src/xlat-i/xi-grammar.tab.C
src/xlat-i/xi-grammar.y
src/xlat-i/xi-symbol.C
src/xlat-i/xi-symbol.h
tests/charm++/method_templates/pgm.C
tests/charm++/method_templates/pgm.ci

index 208eedfbba8b814f6204a3121cced124c5d7a2a0..8799fb5a41a0990459549b8a135674fb71b3c21b 100644 (file)
@@ -540,16 +540,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  9
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   740
+#define YYLAST   741
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  110
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  282
+#define YYNRULES  283
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  591
+#define YYNSTATES  598
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -604,32 +604,32 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     5,     6,     9,    10,    12,    13,    15,
       17,    19,    24,    28,    32,    34,    39,    40,    43,    49,
       55,    60,    64,    67,    70,    74,    77,    80,    83,    86,
-      89,    91,    93,    95,    97,    99,   101,   103,   107,   108,
-     110,   111,   115,   117,   119,   121,   123,   126,   129,   133,
-     137,   140,   143,   146,   148,   150,   153,   155,   158,   161,
-     163,   165,   168,   171,   174,   183,   185,   187,   189,   191,
-     194,   197,   200,   202,   204,   206,   210,   211,   214,   219,
-     225,   226,   228,   229,   233,   235,   239,   241,   243,   244,
-     248,   250,   254,   255,   257,   259,   260,   264,   266,   270,
-     272,   274,   275,   277,   278,   281,   287,   289,   292,   296,
-     303,   304,   307,   309,   313,   319,   325,   331,   337,   342,
-     346,   353,   360,   366,   372,   378,   384,   390,   395,   403,
-     404,   407,   408,   411,   414,   418,   421,   425,   427,   431,
-     436,   439,   442,   445,   448,   451,   453,   458,   459,   462,
-     465,   468,   471,   474,   478,   482,   486,   490,   497,   507,
-     511,   518,   522,   529,   539,   549,   551,   555,   557,   560,
-     564,   566,   574,   580,   593,   599,   602,   604,   606,   607,
-     611,   613,   617,   619,   621,   623,   625,   627,   629,   631,
-     633,   635,   637,   639,   641,   644,   646,   648,   650,   652,
-     654,   655,   657,   661,   662,   664,   670,   676,   682,   687,
-     691,   693,   695,   697,   701,   706,   710,   712,   714,   716,
-     718,   723,   727,   732,   737,   742,   746,   754,   760,   767,
-     769,   773,   775,   779,   783,   786,   790,   793,   794,   798,
-     799,   801,   805,   807,   810,   812,   815,   816,   821,   823,
-     827,   829,   830,   837,   846,   851,   855,   861,   866,   878,
-     888,   901,   916,   923,   932,   938,   946,   950,   954,   955,
-     958,   963,   965,   969,   971,   973,   976,   982,   984,   988,
-     990,   992,   995
+      89,    98,   100,   102,   104,   106,   108,   110,   112,   116,
+     117,   119,   120,   124,   126,   128,   130,   132,   135,   138,
+     142,   146,   149,   152,   155,   157,   159,   162,   164,   167,
+     170,   172,   174,   177,   180,   183,   192,   194,   196,   198,
+     200,   203,   206,   209,   211,   213,   215,   219,   220,   223,
+     228,   234,   235,   237,   238,   242,   244,   248,   250,   252,
+     253,   257,   259,   263,   264,   266,   268,   269,   273,   275,
+     279,   281,   283,   284,   286,   287,   290,   296,   298,   301,
+     305,   312,   313,   316,   318,   322,   328,   334,   340,   346,
+     351,   355,   362,   369,   375,   381,   387,   393,   399,   404,
+     412,   413,   416,   417,   420,   423,   427,   430,   434,   436,
+     440,   445,   448,   451,   454,   457,   460,   462,   467,   468,
+     471,   474,   477,   480,   483,   487,   491,   495,   499,   506,
+     516,   520,   527,   531,   538,   548,   558,   560,   564,   566,
+     569,   573,   575,   583,   589,   602,   608,   611,   613,   615,
+     616,   620,   622,   626,   628,   630,   632,   634,   636,   638,
+     640,   642,   644,   646,   648,   650,   653,   655,   657,   659,
+     661,   663,   664,   666,   670,   671,   673,   679,   685,   691,
+     696,   700,   702,   704,   706,   710,   715,   719,   721,   723,
+     725,   727,   732,   736,   741,   746,   751,   755,   763,   769,
+     776,   778,   782,   784,   788,   792,   795,   799,   802,   803,
+     807,   808,   810,   814,   816,   819,   821,   824,   825,   830,
+     832,   836,   838,   839,   846,   855,   860,   864,   870,   875,
+     887,   897,   910,   925,   932,   941,   947,   955,   959,   963,
+     964,   967,   972,   974,   978,   980,   982,   985,   991,   993,
+     997,   999,  1001,  1004
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -643,98 +643,99 @@ static const yytype_int16 yyrhs[] =
       95,    76,    99,    77,    -1,    54,    53,    96,    74,    -1,
       54,    96,    74,    -1,    93,    97,    -1,    93,   155,    -1,
       93,   134,    74,    -1,    93,   137,    -1,    93,   138,    -1,
-      93,   139,    -1,    93,   141,    -1,    93,   152,    -1,   198,
-      -1,   199,    -1,   162,    -1,   113,    -1,    56,    -1,    57,
-      -1,   101,    -1,   101,    78,   102,    -1,    -1,   102,    -1,
-      -1,    79,   103,    80,    -1,    61,    -1,    62,    -1,    63,
-      -1,    64,    -1,    67,    61,    -1,    67,    62,    -1,    67,
-      62,    61,    -1,    67,    62,    62,    -1,    67,    63,    -1,
-      67,    64,    -1,    62,    62,    -1,    65,    -1,    66,    -1,
-      62,    66,    -1,    35,    -1,    95,   104,    -1,    96,   104,
-      -1,   105,    -1,   107,    -1,   108,    81,    -1,   109,    81,
-      -1,   110,    81,    -1,   112,    82,    81,    95,    83,    82,
-     178,    83,    -1,   108,    -1,   109,    -1,   110,    -1,   111,
-      -1,    36,   112,    -1,   112,    36,    -1,   112,    84,    -1,
-     112,    -1,    56,    -1,    96,    -1,    85,   114,    86,    -1,
-      -1,   115,   116,    -1,     6,   113,    96,   116,    -1,     6,
-      16,   108,    81,    95,    -1,    -1,    35,    -1,    -1,    85,
-     121,    86,    -1,   122,    -1,   122,    78,   121,    -1,    37,
-      -1,    38,    -1,    -1,    85,   124,    86,    -1,   129,    -1,
-     129,    78,   124,    -1,    -1,    57,    -1,    51,    -1,    -1,
-      85,   128,    86,    -1,   126,    -1,   126,    78,   128,    -1,
-      30,    -1,    51,    -1,    -1,    17,    -1,    -1,    85,    86,
-      -1,   130,   113,    95,   131,    74,    -1,   132,    -1,   132,
-     133,    -1,    16,   120,   106,    -1,    16,   120,   106,    76,
-     133,    77,    -1,    -1,    75,   136,    -1,   107,    -1,   107,
-      78,   136,    -1,    11,   123,   106,   135,   153,    -1,    12,
-     123,   106,   135,   153,    -1,    13,   123,   106,   135,   153,
-      -1,    14,   123,   106,   135,   153,    -1,    85,    56,    95,
-      86,    -1,    85,    95,    86,    -1,    15,   127,   140,   106,
-     135,   153,    -1,    15,   140,   127,   106,   135,   153,    -1,
-      11,   123,    95,   135,   153,    -1,    12,   123,    95,   135,
-     153,    -1,    13,   123,    95,   135,   153,    -1,    14,   123,
-      95,   135,   153,    -1,    15,   140,    95,   135,   153,    -1,
-      16,   120,    95,    74,    -1,    16,   120,    95,    76,   133,
-      77,    74,    -1,    -1,    87,   113,    -1,    -1,    87,    56,
-      -1,    87,    57,    -1,    18,    95,   147,    -1,   111,   148,
-      -1,   113,    95,   148,    -1,   149,    -1,   149,    78,   150,
-      -1,    22,    79,   150,    80,    -1,   151,   142,    -1,   151,
-     143,    -1,   151,   144,    -1,   151,   145,    -1,   151,   146,
-      -1,    74,    -1,    76,   154,    77,    94,    -1,    -1,   160,
-     154,    -1,   117,    74,    -1,   118,    74,    -1,   157,    74,
-      -1,   156,    74,    -1,    10,   158,    74,    -1,    19,   159,
-      74,    -1,    18,    95,    74,    -1,     8,   119,    96,    -1,
-       8,   119,    96,    82,   119,    83,    -1,     8,   119,    96,
-      79,   102,    80,    82,   119,    83,    -1,     7,   119,    96,
-      -1,     7,   119,    96,    82,   119,    83,    -1,     9,   119,
-      96,    -1,     9,   119,    96,    82,   119,    83,    -1,     9,
-     119,    96,    79,   102,    80,    82,   119,    83,    -1,     9,
-      85,    68,    86,   119,    96,    82,   119,    83,    -1,   107,
-      -1,   107,    78,   158,    -1,    57,    -1,   161,    74,    -1,
-     151,   161,    74,    -1,   155,    -1,    39,   164,   163,    95,
-     180,   182,   183,    -1,    39,   164,    95,   180,   183,    -1,
-      39,    85,    68,    86,    35,    95,   180,   181,   171,   169,
-     172,    95,    -1,    71,   171,   169,   172,    74,    -1,    71,
-      74,    -1,    35,    -1,   109,    -1,    -1,    85,   165,    86,
-      -1,   166,    -1,   166,    78,   165,    -1,    21,    -1,    23,
-      -1,    24,    -1,    25,    -1,    31,    -1,    32,    -1,    33,
-      -1,    34,    -1,    26,    -1,    27,    -1,    28,    -1,    52,
-      -1,    51,   125,    -1,    72,    -1,    73,    -1,    57,    -1,
-      56,    -1,    96,    -1,    -1,    58,    -1,    58,    78,   168,
-      -1,    -1,    58,    -1,    58,    85,   169,    86,   169,    -1,
-      58,    76,   169,    77,   169,    -1,    58,    82,   168,    83,
-     169,    -1,    82,   169,    83,   169,    -1,   113,    95,    85,
-      -1,    76,    -1,    77,    -1,   113,    -1,   113,    95,   130,
-      -1,   113,    95,    87,   167,    -1,   170,   169,    86,    -1,
-       6,    -1,    69,    -1,    70,    -1,    95,    -1,   175,    88,
-      80,    95,    -1,   175,    89,    95,    -1,   175,    85,   175,
-      86,    -1,   175,    85,    56,    86,    -1,   175,    82,   175,
-      83,    -1,   170,   169,    86,    -1,   174,    75,   113,    95,
-      79,   175,    80,    -1,   113,    95,    79,   175,    80,    -1,
-     174,    75,   176,    79,   175,    80,    -1,   173,    -1,   173,
-      78,   178,    -1,   177,    -1,   177,    78,   179,    -1,    82,
-     178,    83,    -1,    82,    83,    -1,    85,   179,    86,    -1,
-      85,    86,    -1,    -1,    20,    87,    56,    -1,    -1,   189,
-      -1,    76,   184,    77,    -1,   189,    -1,   189,   184,    -1,
-     189,    -1,   189,   184,    -1,    -1,    50,    82,   187,    83,
-      -1,    55,    -1,    55,    78,   187,    -1,    57,    -1,    -1,
-      45,   188,   171,   169,   172,   186,    -1,    49,    82,    55,
-     180,    83,   171,   169,    77,    -1,    43,   195,    76,    77,
-      -1,    43,   195,   189,    -1,    43,   195,    76,   184,    77,
-      -1,    44,    76,   185,    77,    -1,    40,   193,   169,    74,
-     169,    74,   169,   192,    76,   184,    77,    -1,    40,   193,
-     169,    74,   169,    74,   169,   192,   189,    -1,    41,    85,
-      55,    86,   193,   169,    75,   169,    78,   169,   192,   189,
-      -1,    41,    85,    55,    86,   193,   169,    75,   169,    78,
-     169,   192,    76,   184,    77,    -1,    47,   193,   169,   192,
-     189,   190,    -1,    47,   193,   169,   192,    76,   184,    77,
-     190,    -1,    42,   193,   169,   192,   189,    -1,    42,   193,
-     169,   192,    76,   184,    77,    -1,    46,   191,    74,    -1,
-     171,   169,   172,    -1,    -1,    48,   189,    -1,    48,    76,
-     184,    77,    -1,    55,    -1,    55,    78,   191,    -1,    83,
-      -1,    82,    -1,    55,   180,    -1,    55,   196,   169,   197,
-     180,    -1,   194,    -1,   194,    78,   195,    -1,    85,    -1,
-      86,    -1,    59,    95,    -1,    60,    95,    -1
+      93,   139,    -1,    93,   141,    -1,    93,   152,    -1,     5,
+      39,   163,   107,    95,   104,   180,    74,    -1,   198,    -1,
+     199,    -1,   162,    -1,   113,    -1,    56,    -1,    57,    -1,
+     101,    -1,   101,    78,   102,    -1,    -1,   102,    -1,    -1,
+      79,   103,    80,    -1,    61,    -1,    62,    -1,    63,    -1,
+      64,    -1,    67,    61,    -1,    67,    62,    -1,    67,    62,
+      61,    -1,    67,    62,    62,    -1,    67,    63,    -1,    67,
+      64,    -1,    62,    62,    -1,    65,    -1,    66,    -1,    62,
+      66,    -1,    35,    -1,    95,   104,    -1,    96,   104,    -1,
+     105,    -1,   107,    -1,   108,    81,    -1,   109,    81,    -1,
+     110,    81,    -1,   112,    82,    81,    95,    83,    82,   178,
+      83,    -1,   108,    -1,   109,    -1,   110,    -1,   111,    -1,
+      36,   112,    -1,   112,    36,    -1,   112,    84,    -1,   112,
+      -1,    56,    -1,    96,    -1,    85,   114,    86,    -1,    -1,
+     115,   116,    -1,     6,   113,    96,   116,    -1,     6,    16,
+     108,    81,    95,    -1,    -1,    35,    -1,    -1,    85,   121,
+      86,    -1,   122,    -1,   122,    78,   121,    -1,    37,    -1,
+      38,    -1,    -1,    85,   124,    86,    -1,   129,    -1,   129,
+      78,   124,    -1,    -1,    57,    -1,    51,    -1,    -1,    85,
+     128,    86,    -1,   126,    -1,   126,    78,   128,    -1,    30,
+      -1,    51,    -1,    -1,    17,    -1,    -1,    85,    86,    -1,
+     130,   113,    95,   131,    74,    -1,   132,    -1,   132,   133,
+      -1,    16,   120,   106,    -1,    16,   120,   106,    76,   133,
+      77,    -1,    -1,    75,   136,    -1,   107,    -1,   107,    78,
+     136,    -1,    11,   123,   106,   135,   153,    -1,    12,   123,
+     106,   135,   153,    -1,    13,   123,   106,   135,   153,    -1,
+      14,   123,   106,   135,   153,    -1,    85,    56,    95,    86,
+      -1,    85,    95,    86,    -1,    15,   127,   140,   106,   135,
+     153,    -1,    15,   140,   127,   106,   135,   153,    -1,    11,
+     123,    95,   135,   153,    -1,    12,   123,    95,   135,   153,
+      -1,    13,   123,    95,   135,   153,    -1,    14,   123,    95,
+     135,   153,    -1,    15,   140,    95,   135,   153,    -1,    16,
+     120,    95,    74,    -1,    16,   120,    95,    76,   133,    77,
+      74,    -1,    -1,    87,   113,    -1,    -1,    87,    56,    -1,
+      87,    57,    -1,    18,    95,   147,    -1,   111,   148,    -1,
+     113,    95,   148,    -1,   149,    -1,   149,    78,   150,    -1,
+      22,    79,   150,    80,    -1,   151,   142,    -1,   151,   143,
+      -1,   151,   144,    -1,   151,   145,    -1,   151,   146,    -1,
+      74,    -1,    76,   154,    77,    94,    -1,    -1,   160,   154,
+      -1,   117,    74,    -1,   118,    74,    -1,   157,    74,    -1,
+     156,    74,    -1,    10,   158,    74,    -1,    19,   159,    74,
+      -1,    18,    95,    74,    -1,     8,   119,    96,    -1,     8,
+     119,    96,    82,   119,    83,    -1,     8,   119,    96,    79,
+     102,    80,    82,   119,    83,    -1,     7,   119,    96,    -1,
+       7,   119,    96,    82,   119,    83,    -1,     9,   119,    96,
+      -1,     9,   119,    96,    82,   119,    83,    -1,     9,   119,
+      96,    79,   102,    80,    82,   119,    83,    -1,     9,    85,
+      68,    86,   119,    96,    82,   119,    83,    -1,   107,    -1,
+     107,    78,   158,    -1,    57,    -1,   161,    74,    -1,   151,
+     161,    74,    -1,   155,    -1,    39,   164,   163,    95,   180,
+     182,   183,    -1,    39,   164,    95,   180,   183,    -1,    39,
+      85,    68,    86,    35,    95,   180,   181,   171,   169,   172,
+      95,    -1,    71,   171,   169,   172,    74,    -1,    71,    74,
+      -1,    35,    -1,   109,    -1,    -1,    85,   165,    86,    -1,
+     166,    -1,   166,    78,   165,    -1,    21,    -1,    23,    -1,
+      24,    -1,    25,    -1,    31,    -1,    32,    -1,    33,    -1,
+      34,    -1,    26,    -1,    27,    -1,    28,    -1,    52,    -1,
+      51,   125,    -1,    72,    -1,    73,    -1,    57,    -1,    56,
+      -1,    96,    -1,    -1,    58,    -1,    58,    78,   168,    -1,
+      -1,    58,    -1,    58,    85,   169,    86,   169,    -1,    58,
+      76,   169,    77,   169,    -1,    58,    82,   168,    83,   169,
+      -1,    82,   169,    83,   169,    -1,   113,    95,    85,    -1,
+      76,    -1,    77,    -1,   113,    -1,   113,    95,   130,    -1,
+     113,    95,    87,   167,    -1,   170,   169,    86,    -1,     6,
+      -1,    69,    -1,    70,    -1,    95,    -1,   175,    88,    80,
+      95,    -1,   175,    89,    95,    -1,   175,    85,   175,    86,
+      -1,   175,    85,    56,    86,    -1,   175,    82,   175,    83,
+      -1,   170,   169,    86,    -1,   174,    75,   113,    95,    79,
+     175,    80,    -1,   113,    95,    79,   175,    80,    -1,   174,
+      75,   176,    79,   175,    80,    -1,   173,    -1,   173,    78,
+     178,    -1,   177,    -1,   177,    78,   179,    -1,    82,   178,
+      83,    -1,    82,    83,    -1,    85,   179,    86,    -1,    85,
+      86,    -1,    -1,    20,    87,    56,    -1,    -1,   189,    -1,
+      76,   184,    77,    -1,   189,    -1,   189,   184,    -1,   189,
+      -1,   189,   184,    -1,    -1,    50,    82,   187,    83,    -1,
+      55,    -1,    55,    78,   187,    -1,    57,    -1,    -1,    45,
+     188,   171,   169,   172,   186,    -1,    49,    82,    55,   180,
+      83,   171,   169,    77,    -1,    43,   195,    76,    77,    -1,
+      43,   195,   189,    -1,    43,   195,    76,   184,    77,    -1,
+      44,    76,   185,    77,    -1,    40,   193,   169,    74,   169,
+      74,   169,   192,    76,   184,    77,    -1,    40,   193,   169,
+      74,   169,    74,   169,   192,   189,    -1,    41,    85,    55,
+      86,   193,   169,    75,   169,    78,   169,   192,   189,    -1,
+      41,    85,    55,    86,   193,   169,    75,   169,    78,   169,
+     192,    76,   184,    77,    -1,    47,   193,   169,   192,   189,
+     190,    -1,    47,   193,   169,   192,    76,   184,    77,   190,
+      -1,    42,   193,   169,   192,   189,    -1,    42,   193,   169,
+     192,    76,   184,    77,    -1,    46,   191,    74,    -1,   171,
+     169,   172,    -1,    -1,    48,   189,    -1,    48,    76,   184,
+      77,    -1,    55,    -1,    55,    78,   191,    -1,    83,    -1,
+      82,    -1,    55,   180,    -1,    55,   196,   169,   197,   180,
+      -1,   194,    -1,   194,    78,   195,    -1,    85,    -1,    86,
+      -1,    59,    95,    -1,    60,    95,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -743,32 +744,32 @@ static const yytype_uint16 yyrline[] =
        0,   154,   154,   159,   162,   167,   168,   173,   174,   178,
      182,   184,   192,   196,   203,   205,   210,   211,   215,   217,
      219,   221,   223,   225,   227,   229,   231,   233,   235,   237,
-     239,   241,   243,   247,   249,   251,   255,   257,   262,   263,
-     268,   269,   273,   275,   277,   279,   281,   283,   285,   287,
-     289,   291,   293,   295,   297,   299,   301,   305,   306,   313,
-     315,   319,   323,   325,   329,   333,   335,   337,   339,   342,
-     344,   348,   350,   354,   356,   360,   365,   366,   370,   374,
-     379,   380,   385,   386,   396,   398,   402,   404,   409,   410,
-     414,   416,   421,   422,   426,   431,   432,   436,   438,   442,
-     444,   449,   450,   454,   455,   458,   462,   464,   468,   470,
-     475,   476,   480,   482,   486,   488,   492,   496,   500,   506,
-     510,   512,   516,   518,   522,   526,   530,   534,   536,   541,
-     542,   547,   548,   550,   554,   556,   558,   562,   564,   568,
-     572,   574,   576,   578,   580,   584,   586,   591,   609,   613,
-     615,   617,   618,   620,   622,   624,   628,   630,   632,   638,
-     641,   646,   648,   650,   656,   664,   666,   669,   673,   675,
-     680,   684,   692,   705,   723,   725,   729,   731,   736,   737,
-     741,   743,   747,   749,   751,   753,   755,   757,   759,   761,
-     763,   765,   767,   769,   771,   773,   775,   779,   781,   783,
-     788,   789,   791,   800,   801,   803,   809,   815,   821,   829,
-     836,   844,   851,   853,   855,   857,   864,   865,   866,   869,
-     870,   871,   872,   879,   885,   894,   901,   907,   913,   921,
-     923,   927,   929,   933,   935,   939,   941,   946,   947,   952,
-     953,   955,   959,   961,   965,   967,   972,   973,   977,   979,
-     983,   986,   989,   993,  1007,  1009,  1011,  1013,  1015,  1018,
-    1021,  1024,  1027,  1029,  1031,  1033,  1035,  1037,  1041,  1042,
-    1044,  1047,  1049,  1053,  1057,  1061,  1063,  1067,  1069,  1073,
-    1076,  1080,  1084
+     239,   249,   251,   253,   257,   259,   261,   265,   267,   272,
+     273,   278,   279,   283,   285,   287,   289,   291,   293,   295,
+     297,   299,   301,   303,   305,   307,   309,   311,   315,   316,
+     323,   325,   329,   333,   335,   339,   343,   345,   347,   349,
+     352,   354,   358,   360,   364,   366,   370,   375,   376,   380,
+     384,   389,   390,   395,   396,   406,   408,   412,   414,   419,
+     420,   424,   426,   431,   432,   436,   441,   442,   446,   448,
+     452,   454,   459,   460,   464,   465,   468,   472,   474,   478,
+     480,   485,   486,   490,   492,   496,   498,   502,   506,   510,
+     516,   520,   522,   526,   528,   532,   536,   540,   544,   546,
+     551,   552,   557,   558,   560,   564,   566,   568,   572,   574,
+     578,   582,   584,   586,   588,   590,   594,   596,   601,   619,
+     623,   625,   627,   628,   630,   632,   634,   638,   640,   642,
+     648,   651,   656,   658,   660,   666,   674,   676,   679,   683,
+     685,   690,   694,   702,   715,   733,   735,   739,   741,   746,
+     747,   751,   753,   757,   759,   761,   763,   765,   767,   769,
+     771,   773,   775,   777,   779,   781,   783,   785,   789,   791,
+     793,   798,   799,   801,   810,   811,   813,   819,   825,   831,
+     839,   846,   854,   861,   863,   865,   867,   874,   875,   876,
+     879,   880,   881,   882,   889,   895,   904,   911,   917,   923,
+     931,   933,   937,   939,   943,   945,   949,   951,   956,   957,
+     962,   963,   965,   969,   971,   975,   977,   982,   983,   987,
+     989,   993,   996,   999,  1003,  1017,  1019,  1021,  1023,  1025,
+    1028,  1031,  1034,  1037,  1039,  1041,  1043,  1045,  1047,  1051,
+    1052,  1054,  1057,  1059,  1063,  1067,  1071,  1073,  1077,  1079,
+    1083,  1086,  1090,  1094
 };
 #endif
 
@@ -839,32 +840,32 @@ static const yytype_uint8 yyr1[] =
        0,    90,    91,    92,    92,    93,    93,    94,    94,    95,
       96,    96,    97,    97,    98,    98,    99,    99,   100,   100,
      100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
-     100,   100,   100,   101,   101,   101,   102,   102,   103,   103,
-     104,   104,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   106,   107,   108,
-     108,   109,   110,   110,   111,   112,   112,   112,   112,   112,
-     112,   113,   113,   114,   114,   115,   116,   116,   117,   118,
-     119,   119,   120,   120,   121,   121,   122,   122,   123,   123,
-     124,   124,   125,   125,   126,   127,   127,   128,   128,   129,
-     129,   130,   130,   131,   131,   132,   133,   133,   134,   134,
-     135,   135,   136,   136,   137,   137,   138,   139,   140,   140,
-     141,   141,   142,   142,   143,   144,   145,   146,   146,   147,
-     147,   148,   148,   148,   149,   149,   149,   150,   150,   151,
-     152,   152,   152,   152,   152,   153,   153,   154,   154,   155,
-     155,   155,   155,   155,   155,   155,   156,   156,   156,   156,
-     156,   157,   157,   157,   157,   158,   158,   159,   160,   160,
-     160,   161,   161,   161,   162,   162,   163,   163,   164,   164,
-     165,   165,   166,   166,   166,   166,   166,   166,   166,   166,
-     166,   166,   166,   166,   166,   166,   166,   167,   167,   167,
-     168,   168,   168,   169,   169,   169,   169,   169,   169,   170,
-     171,   172,   173,   173,   173,   173,   174,   174,   174,   175,
-     175,   175,   175,   175,   175,   176,   177,   177,   177,   178,
-     178,   179,   179,   180,   180,   181,   181,   182,   182,   183,
-     183,   183,   184,   184,   185,   185,   186,   186,   187,   187,
-     188,   188,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   190,   190,
-     190,   191,   191,   192,   193,   194,   194,   195,   195,   196,
-     197,   198,   199
+     100,   100,   100,   100,   101,   101,   101,   102,   102,   103,
+     103,   104,   104,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   106,   107,
+     108,   108,   109,   110,   110,   111,   112,   112,   112,   112,
+     112,   112,   113,   113,   114,   114,   115,   116,   116,   117,
+     118,   119,   119,   120,   120,   121,   121,   122,   122,   123,
+     123,   124,   124,   125,   125,   126,   127,   127,   128,   128,
+     129,   129,   130,   130,   131,   131,   132,   133,   133,   134,
+     134,   135,   135,   136,   136,   137,   137,   138,   139,   140,
+     140,   141,   141,   142,   142,   143,   144,   145,   146,   146,
+     147,   147,   148,   148,   148,   149,   149,   149,   150,   150,
+     151,   152,   152,   152,   152,   152,   153,   153,   154,   154,
+     155,   155,   155,   155,   155,   155,   155,   156,   156,   156,
+     156,   156,   157,   157,   157,   157,   158,   158,   159,   160,
+     160,   160,   161,   161,   161,   162,   162,   163,   163,   164,
+     164,   165,   165,   166,   166,   166,   166,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
+     167,   168,   168,   168,   169,   169,   169,   169,   169,   169,
+     170,   171,   172,   173,   173,   173,   173,   174,   174,   174,
+     175,   175,   175,   175,   175,   175,   176,   177,   177,   177,
+     178,   178,   179,   179,   180,   180,   181,   181,   182,   182,
+     183,   183,   183,   184,   184,   185,   185,   186,   186,   187,
+     187,   188,   188,   189,   189,   189,   189,   189,   189,   189,
+     189,   189,   189,   189,   189,   189,   189,   189,   189,   190,
+     190,   190,   191,   191,   192,   193,   194,   194,   195,   195,
+     196,   197,   198,   199
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -873,32 +874,32 @@ static const yytype_uint8 yyr2[] =
        0,     2,     1,     0,     2,     0,     1,     0,     1,     1,
        1,     4,     3,     3,     1,     4,     0,     2,     5,     5,
        4,     3,     2,     2,     3,     2,     2,     2,     2,     2,
-       1,     1,     1,     1,     1,     1,     1,     3,     0,     1,
-       0,     3,     1,     1,     1,     1,     2,     2,     3,     3,
-       2,     2,     2,     1,     1,     2,     1,     2,     2,     1,
-       1,     2,     2,     2,     8,     1,     1,     1,     1,     2,
-       2,     2,     1,     1,     1,     3,     0,     2,     4,     5,
-       0,     1,     0,     3,     1,     3,     1,     1,     0,     3,
-       1,     3,     0,     1,     1,     0,     3,     1,     3,     1,
-       1,     0,     1,     0,     2,     5,     1,     2,     3,     6,
-       0,     2,     1,     3,     5,     5,     5,     5,     4,     3,
-       6,     6,     5,     5,     5,     5,     5,     4,     7,     0,
-       2,     0,     2,     2,     3,     2,     3,     1,     3,     4,
-       2,     2,     2,     2,     2,     1,     4,     0,     2,     2,
-       2,     2,     2,     3,     3,     3,     3,     6,     9,     3,
-       6,     3,     6,     9,     9,     1,     3,     1,     2,     3,
-       1,     7,     5,    12,     5,     2,     1,     1,     0,     3,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
-       0,     1,     3,     0,     1,     5,     5,     5,     4,     3,
-       1,     1,     1,     3,     4,     3,     1,     1,     1,     1,
-       4,     3,     4,     4,     4,     3,     7,     5,     6,     1,
-       3,     1,     3,     3,     2,     3,     2,     0,     3,     0,
-       1,     3,     1,     2,     1,     2,     0,     4,     1,     3,
-       1,     0,     6,     8,     4,     3,     5,     4,    11,     9,
-      12,    14,     6,     8,     5,     7,     3,     3,     0,     2,
-       4,     1,     3,     1,     1,     2,     5,     1,     3,     1,
-       1,     2,     2
+       8,     1,     1,     1,     1,     1,     1,     1,     3,     0,
+       1,     0,     3,     1,     1,     1,     1,     2,     2,     3,
+       3,     2,     2,     2,     1,     1,     2,     1,     2,     2,
+       1,     1,     2,     2,     2,     8,     1,     1,     1,     1,
+       2,     2,     2,     1,     1,     1,     3,     0,     2,     4,
+       5,     0,     1,     0,     3,     1,     3,     1,     1,     0,
+       3,     1,     3,     0,     1,     1,     0,     3,     1,     3,
+       1,     1,     0,     1,     0,     2,     5,     1,     2,     3,
+       6,     0,     2,     1,     3,     5,     5,     5,     5,     4,
+       3,     6,     6,     5,     5,     5,     5,     5,     4,     7,
+       0,     2,     0,     2,     2,     3,     2,     3,     1,     3,
+       4,     2,     2,     2,     2,     2,     1,     4,     0,     2,
+       2,     2,     2,     2,     3,     3,     3,     3,     6,     9,
+       3,     6,     3,     6,     9,     9,     1,     3,     1,     2,
+       3,     1,     7,     5,    12,     5,     2,     1,     1,     0,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     1,     1,     1,     1,
+       1,     0,     1,     3,     0,     1,     5,     5,     5,     4,
+       3,     1,     1,     1,     3,     4,     3,     1,     1,     1,
+       1,     4,     3,     4,     4,     4,     3,     7,     5,     6,
+       1,     3,     1,     3,     3,     2,     3,     2,     0,     3,
+       0,     1,     3,     1,     2,     1,     2,     0,     4,     1,
+       3,     1,     0,     6,     8,     4,     3,     5,     4,    11,
+       9,    12,    14,     6,     8,     5,     7,     3,     3,     0,
+       2,     4,     1,     3,     1,     1,     2,     5,     1,     3,
+       1,     1,     2,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -908,326 +909,326 @@ static const yytype_uint16 yydefact[] =
 {
        3,     0,     0,     0,     2,     3,     9,     0,     0,     1,
        4,    14,     5,    12,    13,     6,     0,     0,     0,     0,
-       0,     0,     0,     5,    32,    30,    31,     0,     0,    10,
-       0,   281,   282,   175,   210,   203,     0,    80,    80,    80,
-       0,    88,    88,    88,    88,     0,    82,     0,     0,     0,
-       5,    22,     0,     0,     0,    25,    26,    27,    28,     0,
-      29,    23,     0,     0,     7,    17,     5,     0,    21,     0,
-     204,   203,     0,     0,    56,     0,    42,    43,    44,    45,
-      53,    54,     0,    40,    59,    60,    65,    66,    67,    68,
-      72,     0,    81,     0,     0,     0,     0,   165,     0,     0,
-       0,     0,     0,     0,     0,     0,    95,     0,     0,     0,
-     167,     0,     0,     0,   149,   150,    24,    88,    88,    88,
-      88,     0,    82,   140,   141,   142,   143,   144,   152,   151,
-       8,    15,     0,    20,     0,   203,   200,   203,     0,   211,
-       0,     0,    69,    52,    55,    46,    47,    50,    51,    38,
-      58,    61,    62,    63,    70,     0,    71,    76,   159,   156,
-       0,   161,     0,   153,    99,   100,     0,    90,    40,   110,
-     110,   110,   110,    94,     0,     0,    97,     0,     0,     0,
-       0,     0,    86,    87,     0,    84,   108,   155,   154,     0,
-      68,     0,   137,     0,     7,     0,     0,     0,     0,     0,
-       0,    19,    11,     0,   201,     0,     0,   203,   174,     0,
-      48,    49,    34,    35,    36,    39,     0,    33,     0,     0,
-      76,    78,    80,     0,    80,    80,     0,    80,   166,    89,
-       0,    57,     0,     0,     0,     0,     0,     0,   119,     0,
-      96,   110,   110,    83,     0,   101,   129,     0,   135,   131,
-       0,   139,    18,   110,   110,   110,   110,   110,     0,   203,
-     200,   203,   203,   208,    79,     0,    41,     0,    73,    74,
-       0,    77,     0,     0,     0,     0,     0,     0,    91,   112,
-     111,   145,   147,   114,   115,   116,   117,   118,    98,     0,
-       0,    85,   102,     0,   101,     0,     0,   134,   132,   133,
-     136,   138,     0,     0,     0,     0,     0,   127,   101,   206,
-     202,   207,   205,    37,     0,    75,   160,     0,   157,     0,
-       0,   162,     0,   178,     0,     0,   170,   147,     0,   120,
-     121,     0,   107,   109,   130,   122,   123,   124,   125,   126,
-       0,     0,    80,    80,    80,   113,     0,     0,     0,     7,
-     148,   168,   103,     0,   212,   203,   229,     0,     0,     0,
-       0,   182,   183,   184,   185,   190,   191,   192,   186,   187,
-     188,   189,    92,   193,     0,   195,   196,     0,   180,    56,
-      10,     0,     0,   177,     0,   169,   146,     0,     0,   128,
-     101,     0,     0,    64,   158,   164,   163,    93,   194,     0,
-     179,     0,     0,   239,     0,   104,   105,   209,     0,   213,
-     215,   230,     0,   181,   234,     0,     0,     0,     0,     0,
-       0,   251,     0,     0,     0,   210,   203,   172,   240,   237,
-     198,   197,   199,   214,     0,   233,   274,   203,     0,   203,
-       0,   277,     0,     0,   250,     0,   271,     0,   203,     0,
-       0,   242,     0,     0,   239,     0,     0,     0,     0,   279,
-     275,   203,     0,   210,   255,     0,   244,   203,     0,   266,
-       0,     0,   241,   243,   267,     0,   171,     0,     0,   203,
-       0,   273,     0,     0,   278,   254,     0,   257,   245,     0,
-     272,     0,     0,   238,   216,   217,   218,   236,     0,     0,
-     231,     0,   203,     0,   203,   210,   264,   280,     0,   256,
-     246,   210,   268,     0,     0,     0,     0,   235,     0,   203,
-       0,     0,   276,     0,   252,     0,     0,   262,   203,     0,
-       0,   203,     0,   232,     0,     0,   203,   265,     0,   268,
-     210,   269,     0,   219,     0,     0,     0,     0,   173,     0,
-       0,   248,     0,   263,     0,   253,   227,     0,     0,     0,
-       0,     0,   225,     0,   210,   259,   203,     0,   247,   270,
-       0,     0,     0,     0,   221,     0,   228,     0,     0,   249,
-     224,   223,   222,   220,   226,   258,     0,   210,   260,     0,
-     261
+       0,     0,     0,     5,    33,    31,    32,     0,     0,     0,
+      10,     0,   282,   283,   176,   211,   204,     0,    81,    81,
+      81,     0,    89,    89,    89,    89,     0,    83,     0,     0,
+       0,     5,    22,     0,     0,     0,    25,    26,    27,    28,
+       0,    29,    23,     0,     0,     7,    17,    57,    43,    44,
+      45,    46,    54,    55,     0,    41,    60,    61,     0,   178,
+       0,     5,     0,    21,     0,   205,   204,     0,     0,    57,
+       0,    66,    67,    68,    69,    73,     0,    82,     0,     0,
+       0,     0,   166,     0,     0,     0,     0,     0,     0,     0,
+       0,    96,     0,     0,     0,   168,     0,     0,     0,   150,
+     151,    24,    89,    89,    89,    89,     0,    83,   141,   142,
+     143,   144,   145,   153,   152,     8,    15,    53,    56,    47,
+      48,    51,    52,    39,    59,    62,     0,     0,    20,     0,
+     204,   201,   204,     0,   212,     0,     0,    70,    63,    64,
+      71,     0,    72,    77,   160,   157,     0,   162,     0,   154,
+     100,   101,     0,    91,    41,   111,   111,   111,   111,    95,
+       0,     0,    98,     0,     0,     0,     0,     0,    87,    88,
+       0,    85,   109,   156,   155,     0,    69,     0,   138,     0,
+       7,     0,     0,     0,     0,     0,     0,    49,    50,    35,
+      36,    37,    40,     0,    34,    41,    19,    11,     0,   202,
+       0,     0,   204,   175,     0,     0,     0,    77,    79,    81,
+       0,    81,    81,     0,    81,   167,    90,     0,    58,     0,
+       0,     0,     0,     0,     0,   120,     0,    97,   111,   111,
+      84,     0,   102,   130,     0,   136,   132,     0,   140,    18,
+     111,   111,   111,   111,   111,     0,     0,    42,     0,   204,
+     201,   204,   204,   209,    80,     0,    74,    75,     0,    78,
+       0,     0,     0,     0,     0,     0,    92,   113,   112,   146,
+     148,   115,   116,   117,   118,   119,    99,     0,     0,    86,
+     103,     0,   102,     0,     0,   135,   133,   134,   137,   139,
+       0,     0,     0,     0,     0,   128,   102,    38,     0,     0,
+     207,   203,   208,   206,     0,    76,   161,     0,   158,     0,
+       0,   163,     0,   179,     0,     0,   171,   148,     0,   121,
+     122,     0,   108,   110,   131,   123,   124,   125,   126,   127,
+       0,   235,   213,   204,   230,     0,    30,     0,    81,    81,
+      81,   114,     0,     0,     0,     7,   149,   169,   104,     0,
+     102,     0,     0,   234,     0,     0,     0,     0,   183,   184,
+     185,   186,   191,   192,   193,   187,   188,   189,   190,    93,
+     194,     0,   196,   197,     0,   181,    10,     0,     0,   170,
+     147,     0,     0,   129,   210,     0,   214,   216,   231,    65,
+     159,   165,   164,    94,   195,     0,   180,     0,   240,     0,
+     105,   106,   199,   198,   200,   215,     0,   182,     0,     0,
+       0,     0,     0,   252,     0,     0,     0,   211,   204,   173,
+     241,   238,     0,   275,   204,     0,   204,     0,   278,     0,
+       0,   251,     0,   272,     0,   204,     0,     0,   243,     0,
+       0,   240,     0,     0,     0,     0,   280,   276,   204,     0,
+     211,   256,     0,   245,   204,     0,   267,     0,     0,   242,
+     244,   268,     0,   172,     0,     0,   204,     0,   274,     0,
+       0,   279,   255,     0,   258,   246,     0,   273,     0,     0,
+     239,   217,   218,   219,   237,     0,     0,   232,     0,   204,
+       0,   204,   211,   265,   281,     0,   257,   247,   211,   269,
+       0,     0,     0,     0,   236,     0,   204,     0,     0,   277,
+       0,   253,     0,     0,   263,   204,     0,     0,   204,     0,
+     233,     0,     0,   204,   266,     0,   269,   211,   270,     0,
+     220,     0,     0,     0,     0,   174,     0,     0,   249,     0,
+     264,     0,   254,   228,     0,     0,     0,     0,     0,   226,
+       0,   211,   260,   204,     0,   248,   271,     0,     0,     0,
+       0,   222,     0,   229,     0,     0,   250,   225,   224,   223,
+     221,   227,   259,     0,   211,   261,     0,   262
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     4,    21,   131,   168,    83,     5,    13,    22,
-      23,   214,   215,   216,   150,    84,   169,    85,    86,    87,
-      88,    89,    90,   217,   270,   220,   221,    52,    53,    93,
-     108,   184,   185,   100,   166,   398,   176,   105,   177,   167,
-     293,   388,   294,   295,    54,   233,   280,    55,    56,    57,
-     106,    58,   123,   124,   125,   126,   127,   297,   248,   192,
-     193,   324,    60,   283,   325,   326,    62,    63,    98,   111,
-     327,   328,    24,   384,   347,   377,   378,   433,   205,    72,
-     355,   426,   140,   356,   499,   544,   532,   500,   357,   501,
-     403,   478,   454,   427,   450,   465,   524,   552,   445,   451,
-     527,   447,   482,   437,   441,   442,   461,   508,    25,    26
+      -1,     3,     4,    21,   136,   174,    75,     5,    13,    22,
+      23,   211,   212,   213,   144,    76,   175,    77,    91,    92,
+      93,    94,    95,   214,   278,   227,   228,    53,    54,    98,
+     113,   190,   191,   105,   172,   414,   182,   110,   183,   173,
+     301,   402,   302,   303,    55,   240,   288,    56,    57,    58,
+     111,    59,   128,   129,   130,   131,   132,   305,   255,   198,
+     199,   334,    61,   291,   335,   336,    63,    64,   103,   116,
+     337,   338,    24,    80,   363,   394,   395,   425,   220,    87,
+     353,   438,   155,   354,   506,   551,   539,   507,   355,   508,
+     319,   485,   461,   439,   457,   472,   531,   559,   452,   458,
+     534,   454,   489,   444,   448,   449,   468,   515,    25,    26
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -506
+#define YYPACT_NINF -462
 static const yytype_int16 yypact[] =
 {
-     223,     4,     4,    47,  -506,   223,  -506,   240,   240,  -506,
-    -506,  -506,     9,  -506,  -506,  -506,     4,   218,     4,     4,
-     275,   271,    -2,     9,  -506,  -506,  -506,    38,    65,  -506,
-     141,  -506,  -506,  -506,  -506,   -21,   256,   117,   117,    23,
-      65,    79,    79,    79,    79,   104,   152,     4,   188,   181,
-       9,  -506,   190,   220,   234,  -506,  -506,  -506,  -506,   525,
-    -506,  -506,   241,   253,   257,  -506,     9,   176,  -506,   270,
-      56,   -21,   258,   372,  -506,   487,  -506,    60,  -506,  -506,
-    -506,  -506,   172,   107,  -506,  -506,   284,   287,   289,  -506,
-      12,    65,  -506,    65,    65,   309,    65,   301,   319,     6,
-       4,     4,     4,     4,   124,   313,   324,   230,     4,   336,
-    -506,   378,   351,   363,  -506,  -506,  -506,    79,    79,    79,
-      79,   313,   152,  -506,  -506,  -506,  -506,  -506,  -506,  -506,
-    -506,  -506,   376,  -506,   401,   -21,   406,   -21,   382,  -506,
-     385,   386,    13,  -506,  -506,  -506,   236,  -506,  -506,   277,
-    -506,  -506,  -506,  -506,  -506,   387,  -506,    40,   -41,    55,
-     388,    72,    65,  -506,  -506,  -506,   389,   395,   397,   403,
-     403,   403,   403,  -506,     4,   393,   402,   400,   326,     4,
-     430,     4,  -506,  -506,   409,   405,   411,  -506,  -506,     4,
-      75,     4,   420,   429,   257,     4,     4,     4,     4,     4,
-       4,  -506,  -506,   442,   443,   441,   439,   -21,  -506,     4,
-    -506,  -506,  -506,  -506,   448,  -506,   447,  -506,     4,   335,
-     445,  -506,   117,   277,   117,   117,   277,   117,  -506,  -506,
-       6,  -506,    65,   276,   276,   276,   276,   446,  -506,   430,
-    -506,   403,   403,  -506,   230,   514,   456,   339,  -506,   457,
-     351,  -506,  -506,   403,   403,   403,   403,   403,   290,   -21,
-     406,   -21,   -21,  -506,  -506,   277,  -506,   451,  -506,   470,
-     469,  -506,   475,   489,   488,    65,   501,   508,  -506,   515,
-    -506,  -506,   366,  -506,  -506,  -506,  -506,  -506,  -506,   276,
-     276,  -506,  -506,   487,    16,   518,   487,  -506,  -506,  -506,
-    -506,  -506,   276,   276,   276,   276,   276,  -506,   514,  -506,
-    -506,  -506,  -506,  -506,   524,  -506,  -506,   526,  -506,    67,
-     528,  -506,    65,   511,   572,   535,  -506,   366,   539,  -506,
-    -506,     4,  -506,  -506,  -506,  -506,  -506,  -506,  -506,  -506,
-     538,   487,   117,   117,   117,  -506,   398,   559,   542,   257,
-    -506,  -506,   532,   544,     4,   -21,   549,   545,   546,   547,
-     548,  -506,  -506,  -506,  -506,  -506,  -506,  -506,  -506,  -506,
-    -506,  -506,   575,  -506,   550,  -506,  -506,   551,   555,   580,
-     556,   557,   284,  -506,     4,  -506,  -506,   554,   567,  -506,
-      15,   560,   487,  -506,  -506,  -506,  -506,  -506,  -506,   607,
-    -506,   197,   427,   125,   557,  -506,  -506,  -506,   136,  -506,
-    -506,  -506,     4,  -506,  -506,   561,   563,   562,   563,   588,
-     573,   591,   595,   563,   569,   212,   -21,  -506,  -506,   632,
-    -506,  -506,   470,  -506,   557,  -506,  -506,   -21,   598,   -21,
-     129,   576,   459,   212,  -506,   579,   578,   583,   -21,   603,
-     582,   212,   258,   574,   125,   577,   586,   581,   585,  -506,
-    -506,   -21,   588,   260,  -506,   587,   212,   -21,   595,  -506,
-     585,   557,  -506,  -506,  -506,   609,  -506,   177,   579,   -21,
-     563,  -506,   471,   584,  -506,  -506,   589,  -506,  -506,   258,
-    -506,   521,   590,  -506,  -506,  -506,  -506,  -506,     4,   594,
-     593,   592,   -21,   600,   -21,   212,  -506,  -506,   557,  -506,
-     613,   212,   624,   579,   596,   487,   293,  -506,   258,   -21,
-     601,   602,  -506,   599,  -506,   605,   533,  -506,   -21,     4,
-       4,   -21,   604,  -506,     4,   585,   -21,  -506,   622,   624,
-     212,  -506,   608,  -506,    51,    -8,   606,     4,  -506,   543,
-     610,   611,   597,  -506,   614,  -506,  -506,     4,   348,   615,
-       4,     4,  -506,    96,   212,  -506,   -21,   622,  -506,  -506,
-     359,   612,   369,     4,  -506,   312,  -506,   616,   585,  -506,
-    -506,  -506,  -506,  -506,  -506,  -506,   558,   212,  -506,   617,
-    -506
+     306,    -2,    -2,    36,  -462,   306,  -462,    73,    73,  -462,
+    -462,  -462,    19,  -462,  -462,    24,    -2,   175,    -2,    -2,
+     203,   239,    43,    19,  -462,  -462,  -462,   494,    50,    83,
+    -462,   271,  -462,  -462,  -462,  -462,   -26,   357,   123,   123,
+      17,    83,    87,    87,    87,    87,    95,   100,    -2,   140,
+     127,    19,  -462,   159,   162,   185,  -462,  -462,  -462,  -462,
+     323,  -462,  -462,   198,   206,   223,  -462,   231,  -462,   156,
+    -462,  -462,  -462,  -462,   261,   187,  -462,  -462,   221,  -462,
+      83,    19,   282,  -462,   241,    52,   -26,   249,   600,  -462,
+     582,   221,   247,   262,  -462,    81,    83,  -462,    83,    83,
+     279,    83,   276,   275,     3,    -2,    -2,    -2,    -2,   165,
+     294,   299,   344,    -2,   291,  -462,   316,   409,   319,  -462,
+    -462,  -462,    87,    87,    87,    87,   294,   100,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+     327,  -462,  -462,   567,  -462,  -462,    -2,   322,  -462,   347,
+     -26,   353,   -26,   325,  -462,   356,   336,    40,  -462,  -462,
+    -462,   351,  -462,   -15,    66,    77,   360,   181,    83,  -462,
+    -462,  -462,   361,   355,   352,   367,   367,   367,   367,  -462,
+      -2,   362,   371,   364,   345,    -2,   400,    -2,  -462,  -462,
+     370,   375,   382,  -462,  -462,    -2,    53,    -2,   381,   383,
+     223,    -2,    -2,    -2,    -2,    -2,    -2,  -462,  -462,  -462,
+    -462,   384,  -462,   385,  -462,   352,  -462,  -462,   389,   390,
+     378,   399,   -26,  -462,    -2,    -2,   349,   402,  -462,   123,
+     567,   123,   123,   567,   123,  -462,  -462,     3,  -462,    83,
+     209,   209,   209,   209,   403,  -462,   400,  -462,   367,   367,
+    -462,   344,   452,   401,   350,  -462,   404,   409,  -462,  -462,
+     367,   367,   367,   367,   367,   213,   567,  -462,   423,   -26,
+     353,   -26,   -26,  -462,  -462,   424,  -462,   431,   422,  -462,
+     426,   430,   428,    83,   432,   440,  -462,   447,  -462,  -462,
+     311,  -462,  -462,  -462,  -462,  -462,  -462,   209,   209,  -462,
+    -462,   582,     6,   449,   582,  -462,  -462,  -462,  -462,  -462,
+     209,   209,   209,   209,   209,  -462,   452,  -462,   374,   453,
+    -462,  -462,  -462,  -462,   446,  -462,  -462,   450,  -462,    91,
+     451,  -462,    83,   467,   492,   457,  -462,   311,   463,  -462,
+    -462,    -2,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,
+     461,  -462,    -2,   -26,   476,   456,  -462,   582,   123,   123,
+     123,  -462,   280,   615,   488,   223,  -462,  -462,   480,   514,
+      10,   482,   582,  -462,   515,   517,   518,   521,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,  -462,   557,
+    -462,   533,  -462,  -462,   534,   543,   545,   423,    -2,  -462,
+    -462,   539,   562,  -462,  -462,   212,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,  -462,  -462,   603,  -462,   343,   168,   423,
+    -462,  -462,  -462,  -462,   431,  -462,    -2,  -462,   558,   554,
+     558,   586,   575,   595,   598,   558,   572,   454,   -26,  -462,
+    -462,   636,   423,  -462,   -26,   602,   -26,    75,   580,   475,
+     454,  -462,   583,   590,   597,   -26,   605,   592,   454,   249,
+     585,   168,   588,   601,   599,   591,  -462,  -462,   -26,   586,
+     437,  -462,   606,   454,   -26,   598,  -462,   591,   423,  -462,
+    -462,  -462,   628,  -462,    49,   583,   -26,   558,  -462,   501,
+     604,  -462,  -462,   609,  -462,  -462,   249,  -462,   529,   608,
+    -462,  -462,  -462,  -462,  -462,    -2,   612,   610,   607,   -26,
+     618,   -26,   454,  -462,  -462,   423,  -462,   639,   454,   646,
+     583,   616,   582,   229,  -462,   249,   -26,   621,   620,  -462,
+     617,  -462,   623,   540,  -462,   -26,    -2,    -2,   -26,   619,
+    -462,    -2,   591,   -26,  -462,   647,   646,   454,  -462,   624,
+    -462,   102,   -20,   622,    -2,  -462,   550,   625,   626,   627,
+    -462,   629,  -462,  -462,    -2,   358,   631,    -2,    -2,  -462,
+     193,   454,  -462,   -26,   647,  -462,  -462,   110,   630,    82,
+      -2,  -462,   298,  -462,   632,   591,  -462,  -462,  -462,  -462,
+    -462,  -462,  -462,   566,   454,  -462,   635,  -462
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -506,  -506,   679,  -506,  -188,    -1,    -9,   665,   682,     0,
-    -506,  -506,  -102,  -506,   519,  -506,   -63,   -27,   -71,   349,
-    -506,  -105,   625,   -31,  -506,  -506,   477,  -506,  -506,   -18,
-     618,   455,  -506,   -13,   472,  -506,  -506,   619,   462,  -506,
-     314,  -506,  -506,  -229,  -506,  -144,   381,  -506,  -506,  -506,
-     -54,  -506,  -506,  -506,  -506,  -506,  -506,  -506,   458,  -506,
-     460,   684,  -506,  -146,   379,   687,  -506,  -506,   552,  -506,
-    -506,   391,  -506,  -506,  -506,   308,  -506,  -506,   452,   -59,
-     196,   -17,  -417,  -506,  -506,  -505,  -506,  -506,  -273,   200,
-    -380,  -506,  -506,   259,  -441,  -506,  -506,   150,  -506,  -399,
-     179,   251,  -461,  -407,  -506,   261,  -506,  -506,  -506,  -506
+    -462,  -462,   700,  -462,  -196,    -1,    -7,   686,   705,   -10,
+    -462,  -462,  -202,  -462,   -86,  -462,   -62,   -32,   -22,   -19,
+    -462,  -106,   633,   -30,  -462,  -462,   487,  -462,  -462,     0,
+     593,   464,  -462,   -24,   481,  -462,  -462,   611,   471,  -462,
+     354,  -462,  -462,  -241,  -462,   -23,   387,  -462,  -462,  -462,
+     -68,  -462,  -462,  -462,  -462,  -462,  -462,  -462,   465,  -462,
+     468,   706,  -462,  -136,   391,   708,  -462,  -462,   563,  -462,
+    -462,   392,  -462,   369,  -462,   313,  -462,  -462,   466,   -83,
+     211,   -18,  -416,  -462,  -462,  -422,  -462,  -462,  -322,   214,
+    -385,  -462,  -462,   273,  -444,  -462,  -462,   161,  -462,  -412,
+     192,   264,  -461,  -405,  -462,   272,  -462,  -462,  -462,  -462
 };
 
 /* 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 -177
+#define YYTABLE_NINF -178
 static const yytype_int16 yytable[] =
 {
-       7,     8,   141,    35,   428,    91,   252,   190,    30,   491,
-     473,   439,   138,    97,    15,    27,   448,    31,    32,    67,
-      94,    96,   486,    65,   429,   488,   234,   235,   236,   101,
-     102,   103,   292,   292,    69,   474,   164,    70,   170,   171,
-     172,   222,   563,   464,   466,   186,   109,     9,   154,   154,
-     113,   179,   570,   572,   455,   428,   575,   165,    92,     6,
-     460,    71,    16,    17,   521,   332,   132,   199,    18,    19,
-     525,   561,   510,   504,   549,    64,   203,   407,   206,   340,
-      20,   191,   157,   506,   158,   159,   -16,   161,   284,   285,
-     286,   492,   512,  -106,   155,   155,   156,   289,   290,   554,
-     407,   534,   408,   175,   195,   196,   197,   198,    95,   302,
-     303,   304,   305,   306,    66,    69,   241,   586,   242,   411,
-      29,   273,   143,   577,   276,   219,   144,   541,   522,   415,
-      69,   556,   135,   557,   223,    97,   558,   224,   136,   559,
-     560,   137,    69,   329,   330,   190,   589,    69,   263,   343,
-     565,   226,    92,  -131,   227,  -131,   335,   336,   337,   338,
-     339,   386,   247,   313,    99,   416,   417,   418,   419,   420,
-     421,   422,   423,   237,   424,   173,   576,   175,   557,     6,
-     174,   558,    69,   494,   559,   560,   149,   588,   246,   104,
-     249,    29,   430,   431,   253,   254,   255,   256,   257,   258,
-     309,   425,   311,   312,   272,   279,   274,   275,   264,   277,
-     269,   402,    74,    75,   459,    68,    69,   267,   361,   191,
-     362,   363,   364,   365,   366,   367,     1,     2,   368,   369,
-     370,   371,    29,   145,   146,   147,   148,   107,    76,    77,
-      78,    79,    80,    81,    82,   110,   495,   496,   372,   373,
-     133,    69,   416,   417,   418,   419,   420,   421,   422,   423,
-     112,   424,   331,   497,   114,   334,   319,   182,   183,   375,
-     376,    28,    73,    29,     1,     2,   382,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    34,    47,
-      48,    74,    75,    49,   115,   279,   391,   210,   211,   494,
-     416,   417,   418,   419,   420,   421,   422,   423,   116,   424,
-     354,    29,    74,    75,    11,   128,    12,    76,    77,    78,
-      79,    80,    81,    82,   358,   359,   360,   129,    74,    75,
-     352,   130,    29,   212,   213,   139,    34,   485,    76,    77,
-      78,    79,    80,    81,    82,   134,   381,    50,    29,    33,
-     281,    34,   282,   390,    76,    77,    78,    79,    80,    81,
-      82,   354,   495,   496,   307,   151,   308,   452,   152,   189,
-     153,   354,    36,    37,    38,    39,    40,   160,   456,   162,
-     458,     6,   174,   404,    47,    48,    74,    75,    49,   470,
-      29,   268,   584,   163,   557,   298,   299,   558,   178,   432,
-     559,   560,   483,     6,   571,   323,    29,    74,   489,   180,
-     187,   434,    76,    77,    78,    79,    80,    81,    82,   361,
-     503,   362,   363,   364,   365,   366,   367,    29,   467,   368,
-     369,   370,   371,    76,    77,    78,    79,    80,    81,    82,
-     194,   557,   580,   518,   558,   520,   498,   559,   560,   372,
-     373,   557,   188,   201,   558,   582,   202,   559,   560,   208,
-     535,   502,    74,    75,   204,   207,   374,   209,   218,   542,
-     375,   376,   546,   230,   225,   229,   149,   550,   232,   238,
-     239,   173,    29,   244,   530,   498,   240,   245,    76,    77,
-      78,    79,    80,    81,    82,   243,   528,   514,   250,   416,
-     417,   418,   419,   420,   421,   422,   423,   578,   424,   251,
-     414,   416,   417,   418,   419,   420,   421,   422,   423,   259,
-     424,   260,    74,    75,   261,   262,   265,   266,   543,   545,
-     219,   292,   287,   548,   314,   463,   117,   118,   119,   120,
-     121,   122,    29,   296,   247,    69,   543,   505,    76,    77,
-      78,    79,    80,    81,    82,   315,   543,   543,   316,   574,
-     543,   416,   417,   418,   419,   420,   421,   422,   423,   317,
-     424,   318,   583,   416,   417,   418,   419,   420,   421,   422,
-     423,   320,   424,   416,   417,   418,   419,   420,   421,   422,
-     423,   321,   424,   322,   379,   333,   346,   511,   416,   417,
-     418,   419,   420,   421,   422,   423,   341,   424,   342,   540,
-     344,   323,   349,   351,   380,   353,   385,   387,   389,   564,
-      76,    77,    78,    79,    80,    81,    82,   392,   393,   394,
-     395,   396,   397,   401,   587,  -176,   399,   400,    -9,   402,
-     405,   406,   412,   440,   435,   436,   410,   438,   444,   443,
-     446,   449,   453,   457,   462,    34,   468,   469,   471,   472,
-     479,   475,   477,   523,   487,   493,   509,   480,   481,   515,
-     507,   516,   526,   513,   519,   529,   536,   551,   517,   537,
-     568,   538,   539,   547,    10,   555,    51,   231,   566,   567,
-      14,   569,   562,   585,   590,   573,   383,   271,   581,   291,
-     142,   288,   278,   345,   409,    59,   350,   300,    61,   413,
-     301,   531,   310,   476,   228,   348,   533,   579,   553,   490,
-       0,     0,     0,   484,     0,   181,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     200
+       7,     8,    36,   153,   259,    78,   440,    96,    79,   102,
+      31,   196,   418,    66,   480,    28,   498,    32,    33,   106,
+     107,   108,    82,   300,    15,   446,   493,   300,   281,   495,
+     455,   284,    85,   170,   441,   374,     9,   471,   473,    99,
+     101,   118,   185,   481,   176,   177,   178,   114,   146,   440,
+     408,   192,    97,     6,   171,   501,    86,   462,   205,   568,
+      84,   342,   467,    27,   317,   404,   156,   218,   528,   221,
+     226,   147,    16,    17,   532,   350,   160,   513,    18,    19,
+     517,   556,   511,  -107,    89,    90,   519,   197,   238,   163,
+      20,   164,   165,   499,   167,   404,   -16,   405,   201,   202,
+     203,   204,   100,   561,    30,   292,   293,   294,   181,   541,
+      68,    69,    70,    71,    72,    73,    74,   160,   502,   503,
+      65,   548,   161,   248,   593,   249,    81,   584,   150,   268,
+     529,  -132,   570,  -132,   151,   504,   102,   152,    30,   273,
+     254,    84,   577,   579,   572,   215,   582,    11,   229,    12,
+     596,   196,    84,   241,   242,   243,   230,   318,    97,   231,
+     466,   339,   340,   161,   564,   162,    84,   565,   589,   400,
+     566,   567,   104,   359,   345,   346,   347,   348,   349,   244,
+     109,   595,   563,   181,   564,   112,   320,   565,   322,   323,
+     566,   567,   564,   587,   253,   565,   256,   115,   566,   567,
+     260,   261,   262,   263,   264,   265,   117,   287,   428,   429,
+     430,   431,   432,   433,   434,   435,   179,   436,   137,   277,
+       6,   180,   138,   274,   275,   297,   298,   197,    29,   280,
+      30,   282,   283,   119,   285,   501,   120,   310,   311,   312,
+     313,   314,     1,     2,   437,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    84,    48,    49,   121,
+     233,    50,    84,   234,    89,    90,   143,    30,   422,   423,
+     371,   341,   133,   583,   344,   564,   329,    34,   565,    35,
+     134,   566,   567,   289,    30,   290,  -177,   315,   352,   316,
+      68,    69,    70,    71,    72,    73,    74,   135,   502,   503,
+     287,   378,   145,   379,   380,   381,   382,   383,   384,     1,
+       2,   385,   386,   387,   388,    51,   149,    37,    38,    39,
+      40,    41,   139,   140,   141,   142,   154,   352,   158,    48,
+      49,   389,   390,    50,   122,   123,   124,   125,   126,   127,
+     368,    78,   352,   159,    79,    83,    84,   166,   391,   169,
+     333,   370,   392,   393,   168,   459,   148,    84,   375,   376,
+     377,   463,   397,   465,   378,   193,   379,   380,   381,   382,
+     383,   384,   477,    88,   385,   386,   387,   388,   591,   184,
+     564,   188,   189,   565,   186,   490,   566,   567,   207,   208,
+     194,   496,    89,    90,   389,   390,   200,   419,   424,   216,
+       6,   180,   217,   510,    30,   276,   306,   307,   222,    89,
+      90,   219,    30,     6,   578,   392,   393,   224,    68,    69,
+      70,    71,    72,    73,    74,   442,   525,   195,   527,    30,
+     223,   143,   225,   237,   474,    68,    69,    70,    71,    72,
+      73,    74,   239,   542,    89,    90,   232,   236,   245,   246,
+     247,   179,   549,   251,   505,   553,   250,   351,   252,   257,
+     557,   271,   266,   258,    30,   267,   269,   509,   270,   300,
+      68,    69,    70,    71,    72,    73,    74,   428,   429,   430,
+     431,   432,   433,   434,   435,   272,   436,   226,   304,   295,
+     585,   254,   537,   505,   428,   429,   430,   431,   432,   433,
+     434,   435,   535,   436,   521,   318,    84,   324,   325,   326,
+     327,   328,   330,    35,   492,   428,   429,   430,   431,   432,
+     433,   434,   435,   331,   436,   332,   343,   356,   357,    67,
+      35,   333,   358,   360,   365,   550,   552,   367,   369,   373,
+     555,   428,   429,   430,   431,   432,   433,   434,   435,    30,
+     436,   470,   362,   550,   372,    68,    69,    70,    71,    72,
+      73,    74,   399,   550,   550,   401,   581,   550,   407,   428,
+     429,   430,   431,   432,   433,   434,   435,   512,   436,   590,
+     428,   429,   430,   431,   432,   433,   434,   435,   403,   436,
+     428,   429,   430,   431,   432,   433,   434,   435,   409,   436,
+     410,   411,    89,    90,   412,   518,   428,   429,   430,   431,
+     432,   433,   434,   435,   413,   436,   547,    89,    90,   415,
+     416,   417,    30,   209,   210,   420,   571,    -9,    68,    69,
+      70,    71,    72,    73,    74,    89,   421,    30,   426,   445,
+     443,   447,   594,    68,    69,    70,    71,    72,    73,    74,
+      67,   450,   451,   453,   456,    30,   460,   464,   469,    35,
+     478,    68,    69,    70,    71,    72,    73,    74,   475,   479,
+     396,   476,   482,   484,   488,   486,    68,    69,    70,    71,
+      72,    73,    74,   494,   500,   487,   516,   522,   523,   530,
+     514,   520,   526,   524,   533,   536,   543,   544,   554,   545,
+     546,   562,   558,   573,   574,    10,   576,    52,   569,   592,
+     575,   580,   597,    14,   279,   299,   588,   296,   286,   361,
+     206,   308,   187,   157,   406,   309,   364,    60,   366,    62,
+     427,   235,   398,   538,   483,   586,   321,   540,   560,   497,
+       0,   491
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,     2,    73,    20,   403,    36,   194,   112,    17,   470,
-     451,   418,    71,    40,     5,    16,   423,    18,    19,    28,
-      38,    39,   463,    23,   404,   466,   170,   171,   172,    42,
-      43,    44,    17,    17,    75,   452,    30,    58,   101,   102,
-     103,    82,   547,   442,   443,   108,    47,     0,    36,    36,
-      50,   105,   557,   558,   434,   454,   561,    51,    35,    55,
-     440,    82,    53,    54,   505,   294,    66,   121,    59,    60,
-     511,    79,   489,   480,   535,    77,   135,    85,   137,   308,
-      71,   112,    91,   482,    93,    94,    77,    96,   234,   235,
-     236,   471,   491,    77,    82,    82,    84,   241,   242,   540,
-      85,   518,    87,   104,   117,   118,   119,   120,    85,   253,
-     254,   255,   256,   257,    76,    75,   179,   578,   181,   392,
-      55,   223,    62,   564,   226,    85,    66,   526,   508,   402,
-      75,    80,    76,    82,    79,   162,    85,    82,    82,    88,
-      89,    85,    75,   289,   290,   250,   587,    75,   207,    82,
-     549,    79,    35,    78,    82,    80,   302,   303,   304,   305,
-     306,   349,    87,   265,    85,    40,    41,    42,    43,    44,
-      45,    46,    47,   174,    49,    51,    80,   178,    82,    55,
-      56,    85,    75,     6,    88,    89,    79,   586,   189,    85,
-     191,    55,    56,    57,   195,   196,   197,   198,   199,   200,
-     259,    76,   261,   262,   222,   232,   224,   225,   209,   227,
-     219,    82,    35,    36,    85,    74,    75,   218,    21,   250,
-      23,    24,    25,    26,    27,    28,     3,     4,    31,    32,
-      33,    34,    55,    61,    62,    63,    64,    85,    61,    62,
-      63,    64,    65,    66,    67,    57,    69,    70,    51,    52,
-      74,    75,    40,    41,    42,    43,    44,    45,    46,    47,
-      79,    49,   293,    86,    74,   296,   275,    37,    38,    72,
-      73,    53,    16,    55,     3,     4,   347,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    76,    18,
-      19,    35,    36,    22,    74,   322,   355,    61,    62,     6,
+       1,     2,    20,    86,   200,    27,   418,    37,    27,    41,
+      17,   117,   397,    23,   458,    16,   477,    18,    19,    43,
+      44,    45,    29,    17,     5,   430,   470,    17,   230,   473,
+     435,   233,    58,    30,   419,   357,     0,   449,   450,    39,
+      40,    51,   110,   459,   106,   107,   108,    48,    80,   461,
+     372,   113,    35,    55,    51,     6,    82,   442,   126,    79,
+      75,   302,   447,    39,   266,    85,    88,   150,   512,   152,
+      85,    81,    53,    54,   518,   316,    36,   489,    59,    60,
+     496,   542,   487,    77,    35,    36,   498,   117,   174,    96,
+      71,    98,    99,   478,   101,    85,    77,    87,   122,   123,
+     124,   125,    85,   547,    55,   241,   242,   243,   109,   525,
+      61,    62,    63,    64,    65,    66,    67,    36,    69,    70,
+      77,   533,    82,   185,   585,   187,    76,   571,    76,   215,
+     515,    78,   554,    80,    82,    86,   168,    85,    55,   222,
+      87,    75,   564,   565,   556,   146,   568,    74,    82,    76,
+     594,   257,    75,   176,   177,   178,    79,    82,    35,    82,
+      85,   297,   298,    82,    82,    84,    75,    85,    86,   365,
+      88,    89,    85,    82,   310,   311,   312,   313,   314,   180,
+      85,   593,    80,   184,    82,    85,   269,    85,   271,   272,
+      88,    89,    82,    83,   195,    85,   197,    57,    88,    89,
+     201,   202,   203,   204,   205,   206,    79,   239,    40,    41,
+      42,    43,    44,    45,    46,    47,    51,    49,    62,   226,
+      55,    56,    66,   224,   225,   248,   249,   257,    53,   229,
+      55,   231,   232,    74,   234,     6,    74,   260,   261,   262,
+     263,   264,     3,     4,    76,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    75,    18,    19,    74,
+      79,    22,    75,    82,    35,    36,    79,    55,    56,    57,
+     353,   301,    74,    80,   304,    82,   283,    74,    85,    76,
+      74,    88,    89,    74,    55,    76,    55,    74,   318,    76,
+      61,    62,    63,    64,    65,    66,    67,    74,    69,    70,
+     332,    21,    81,    23,    24,    25,    26,    27,    28,     3,
+       4,    31,    32,    33,    34,    76,    75,     6,     7,     8,
+       9,    10,    61,    62,    63,    64,    77,   357,    81,    18,
+      19,    51,    52,    22,    11,    12,    13,    14,    15,    16,
+     341,   363,   372,    81,   363,    74,    75,    68,    68,    74,
+      39,   352,    72,    73,    78,   438,    74,    75,   358,   359,
+     360,   444,   363,   446,    21,    74,    23,    24,    25,    26,
+      27,    28,   455,    16,    31,    32,    33,    34,    80,    85,
+      82,    37,    38,    85,    85,   468,    88,    89,    61,    62,
+      74,   474,    35,    36,    51,    52,    77,   398,   405,    77,
+      55,    56,    55,   486,    55,    56,    56,    57,    83,    35,
+      36,    58,    55,    55,    56,    72,    73,    81,    61,    62,
+      63,    64,    65,    66,    67,   426,   509,    18,   511,    55,
+      74,    79,    81,    78,   452,    61,    62,    63,    64,    65,
+      66,    67,    75,   526,    35,    36,    86,    86,    86,    78,
+      86,    51,   535,    78,   484,   538,    86,    83,    76,    78,
+     543,    83,    78,    80,    55,    80,    77,   485,    78,    17,
+      61,    62,    63,    64,    65,    66,    67,    40,    41,    42,
+      43,    44,    45,    46,    47,    86,    49,    85,    87,    86,
+     573,    87,   522,   523,    40,    41,    42,    43,    44,    45,
+      46,    47,   520,    49,   505,    82,    75,    83,    86,    83,
+      80,    83,    80,    76,    77,    40,    41,    42,    43,    44,
+      45,    46,    47,    83,    49,    78,    77,    74,    82,    35,
+      76,    39,    82,    82,    77,   536,   537,    74,    77,    83,
+     541,    40,    41,    42,    43,    44,    45,    46,    47,    55,
+      49,    76,    85,   554,    78,    61,    62,    63,    64,    65,
+      66,    67,    74,   564,   565,    85,   567,   568,    86,    40,
+      41,    42,    43,    44,    45,    46,    47,    76,    49,   580,
       40,    41,    42,    43,    44,    45,    46,    47,    74,    49,
-     341,    55,    35,    36,    74,    74,    76,    61,    62,    63,
-      64,    65,    66,    67,   342,   343,   344,    74,    35,    36,
-     331,    74,    55,    56,    57,    77,    76,    77,    61,    62,
-      63,    64,    65,    66,    67,    75,   347,    76,    55,    74,
-      74,    76,    76,   354,    61,    62,    63,    64,    65,    66,
-      67,   392,    69,    70,    74,    81,    76,   426,    81,    18,
-      81,   402,     6,     7,     8,     9,    10,    68,   437,    78,
-     439,    55,    56,   384,    18,    19,    35,    36,    22,   448,
-      55,    56,    80,    74,    82,    56,    57,    85,    85,   408,
-      88,    89,   461,    55,    56,    39,    55,    35,   467,    85,
-      74,   412,    61,    62,    63,    64,    65,    66,    67,    21,
-     479,    23,    24,    25,    26,    27,    28,    55,   445,    31,
-      32,    33,    34,    61,    62,    63,    64,    65,    66,    67,
-      77,    82,    83,   502,    85,   504,   477,    88,    89,    51,
-      52,    82,    74,    77,    85,    86,    55,    88,    89,    74,
-     519,   478,    35,    36,    58,    83,    68,    81,    81,   528,
-      72,    73,   531,    78,    86,    86,    79,   536,    75,    86,
-      78,    51,    55,    78,   515,   516,    86,    76,    61,    62,
-      63,    64,    65,    66,    67,    86,   513,   498,    78,    40,
-      41,    42,    43,    44,    45,    46,    47,   566,    49,    80,
-      83,    40,    41,    42,    43,    44,    45,    46,    47,    77,
-      49,    78,    35,    36,    83,    86,    78,    80,   529,   530,
-      85,    17,    86,   534,    83,    76,    11,    12,    13,    14,
-      15,    16,    55,    87,    87,    75,   547,    76,    61,    62,
-      63,    64,    65,    66,    67,    86,   557,   558,    83,   560,
-     561,    40,    41,    42,    43,    44,    45,    46,    47,    80,
-      49,    83,   573,    40,    41,    42,    43,    44,    45,    46,
-      47,    80,    49,    40,    41,    42,    43,    44,    45,    46,
-      47,    83,    49,    78,    35,    77,    85,    76,    40,    41,
-      42,    43,    44,    45,    46,    47,    82,    49,    82,    76,
-      82,    39,    77,    74,    55,    77,    74,    85,    74,    76,
-      61,    62,    63,    64,    65,    66,    67,    78,    83,    83,
-      83,    83,    57,    78,    76,    55,    86,    86,    82,    82,
-      86,    74,    35,    55,    83,    82,    86,    85,    57,    76,
-      55,    82,    20,    55,    78,    76,    78,    74,    55,    77,
-      74,    87,    85,    50,    77,    56,    77,    86,    83,    75,
-      86,    78,    48,    83,    74,    79,    75,    55,    86,    77,
-      83,    82,    77,    79,     5,    77,    21,   168,    78,    78,
-       8,    77,    86,    77,    77,    80,   347,   220,    86,   244,
-      75,   239,   230,   322,   390,    21,   327,   249,    21,   401,
-     250,   515,   260,   454,   162,   324,   516,   567,   539,   468,
-      -1,    -1,    -1,   462,    -1,   106,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     122
+      40,    41,    42,    43,    44,    45,    46,    47,    83,    49,
+      83,    83,    35,    36,    83,    76,    40,    41,    42,    43,
+      44,    45,    46,    47,    57,    49,    76,    35,    36,    86,
+      86,    78,    55,    56,    57,    86,    76,    82,    61,    62,
+      63,    64,    65,    66,    67,    35,    74,    55,    35,    85,
+      82,    55,    76,    61,    62,    63,    64,    65,    66,    67,
+      35,    76,    57,    55,    82,    55,    20,    55,    78,    76,
+      55,    61,    62,    63,    64,    65,    66,    67,    78,    77,
+      55,    74,    87,    85,    83,    74,    61,    62,    63,    64,
+      65,    66,    67,    77,    56,    86,    77,    75,    78,    50,
+      86,    83,    74,    86,    48,    79,    75,    77,    79,    82,
+      77,    77,    55,    78,    78,     5,    77,    21,    86,    77,
+      83,    80,    77,     8,   227,   251,    86,   246,   237,   332,
+     127,   256,   111,    90,   370,   257,   334,    21,   337,    21,
+     417,   168,   363,   522,   461,   574,   270,   523,   546,   475,
+      -1,   469
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1236,64 +1237,64 @@ static const yytype_uint8 yystos[] =
 {
        0,     3,     4,    91,    92,    97,    55,    95,    95,     0,
       92,    74,    76,    98,    98,     5,    53,    54,    59,    60,
-      71,    93,    99,   100,   162,   198,   199,    95,    53,    55,
-      96,    95,    95,    74,    76,   171,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    18,    19,    22,
-      76,    97,   117,   118,   134,   137,   138,   139,   141,   151,
-     152,   155,   156,   157,    77,    99,    76,    96,    74,    75,
-      58,    82,   169,    16,    35,    36,    61,    62,    63,    64,
-      65,    66,    67,    96,   105,   107,   108,   109,   110,   111,
-     112,   113,    35,   119,   119,    85,   119,   107,   158,    85,
-     123,   123,   123,   123,    85,   127,   140,    85,   120,    95,
-      57,   159,    79,    99,    74,    74,    74,    11,    12,    13,
-      14,    15,    16,   142,   143,   144,   145,   146,    74,    74,
-      74,    94,    99,    74,    75,    76,    82,    85,   169,    77,
-     172,   108,   112,    62,    66,    61,    62,    63,    64,    79,
-     104,    81,    81,    81,    36,    82,    84,    96,    96,    96,
-      68,    96,    78,    74,    30,    51,   124,   129,    95,   106,
-     106,   106,   106,    51,    56,    95,   126,   128,    85,   140,
-      85,   127,    37,    38,   121,   122,   106,    74,    74,    18,
-     111,   113,   149,   150,    77,   123,   123,   123,   123,   140,
-     120,    77,    55,   169,    58,   168,   169,    83,    74,    81,
-      61,    62,    56,    57,   101,   102,   103,   113,    81,    85,
-     115,   116,    82,    79,    82,    86,    79,    82,   158,    86,
-      78,   104,    75,   135,   135,   135,   135,    95,    86,    78,
-      86,   106,   106,    86,    78,    76,    95,    87,   148,    95,
-      78,    80,    94,    95,    95,    95,    95,    95,    95,    77,
-      78,    83,    86,   169,    95,    78,    80,    95,    56,    96,
-     114,   116,   119,   102,   119,   119,   102,   119,   124,   107,
-     136,    74,    76,   153,   153,   153,   153,    86,   128,   135,
-     135,   121,    17,   130,   132,   133,    87,   147,    56,    57,
-     148,   150,   135,   135,   135,   135,   135,    74,    76,   169,
-     168,   169,   169,   102,    83,    86,    83,    80,    83,    96,
+      71,    93,    99,   100,   162,   198,   199,    39,    95,    53,
+      55,    96,    95,    95,    74,    76,   171,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    18,    19,
+      22,    76,    97,   117,   118,   134,   137,   138,   139,   141,
+     151,   152,   155,   156,   157,    77,    99,    35,    61,    62,
+      63,    64,    65,    66,    67,    96,   105,   107,   108,   109,
+     163,    76,    96,    74,    75,    58,    82,   169,    16,    35,
+      36,   108,   109,   110,   111,   112,   113,    35,   119,   119,
+      85,   119,   107,   158,    85,   123,   123,   123,   123,    85,
+     127,   140,    85,   120,    95,    57,   159,    79,    99,    74,
+      74,    74,    11,    12,    13,    14,    15,    16,   142,   143,
+     144,   145,   146,    74,    74,    74,    94,    62,    66,    61,
+      62,    63,    64,    79,   104,    81,   107,    99,    74,    75,
+      76,    82,    85,   169,    77,   172,   108,   112,    81,    81,
+      36,    82,    84,    96,    96,    96,    68,    96,    78,    74,
+      30,    51,   124,   129,    95,   106,   106,   106,   106,    51,
+      56,    95,   126,   128,    85,   140,    85,   127,    37,    38,
+     121,   122,   106,    74,    74,    18,   111,   113,   149,   150,
+      77,   123,   123,   123,   123,   140,   120,    61,    62,    56,
+      57,   101,   102,   103,   113,    95,    77,    55,   169,    58,
+     168,   169,    83,    74,    81,    81,    85,   115,   116,    82,
+      79,    82,    86,    79,    82,   158,    86,    78,   104,    75,
+     135,   135,   135,   135,    95,    86,    78,    86,   106,   106,
+      86,    78,    76,    95,    87,   148,    95,    78,    80,    94,
+      95,    95,    95,    95,    95,    95,    78,    80,   104,    77,
+      78,    83,    86,   169,    95,    95,    56,    96,   114,   116,
+     119,   102,   119,   119,   102,   119,   124,   107,   136,    74,
+      76,   153,   153,   153,   153,    86,   128,   135,   135,   121,
+      17,   130,   132,   133,    87,   147,    56,    57,   148,   150,
+     135,   135,   135,   135,   135,    74,    76,   102,    82,   180,
+     169,   168,   169,   169,    83,    86,    83,    80,    83,    96,
       80,    83,    78,    39,   151,   154,   155,   160,   161,   153,
      153,   113,   133,    77,   113,   153,   153,   153,   153,   153,
-     133,    82,    82,    82,    82,   136,    85,   164,   161,    77,
-     154,    74,    95,    77,   113,   170,   173,   178,   119,   119,
-     119,    21,    23,    24,    25,    26,    27,    28,    31,    32,
-      33,    34,    51,    52,    68,    72,    73,   165,   166,    35,
-      55,    95,   108,   109,   163,    74,    94,    85,   131,    74,
-      95,   169,    78,    83,    83,    83,    83,    57,   125,    86,
-      86,    78,    82,   180,    95,    86,    74,    85,    87,   130,
-      86,   178,    35,   165,    83,   178,    40,    41,    42,    43,
-      44,    45,    46,    47,    49,    76,   171,   183,   189,   180,
-      56,    57,    96,   167,    95,    83,    82,   193,    85,   193,
-      55,   194,   195,    76,    57,   188,    55,   191,   193,    82,
-     184,   189,   169,    20,   182,   180,   169,    55,   169,    85,
-     180,   196,    78,    76,   189,   185,   189,   171,    78,    74,
-     169,    55,    77,   184,   172,    87,   183,    85,   181,    74,
-      86,    83,   192,   169,   195,    77,   184,    77,   184,   169,
-     191,   192,   180,    56,     6,    69,    70,    86,   113,   174,
-     177,   179,   171,   169,   193,    76,   189,    86,   197,    77,
-     172,    76,   189,    83,    95,    75,    78,    86,   169,    74,
-     169,   184,   180,    50,   186,   184,    48,   190,   171,    79,
-     113,   170,   176,   179,   172,   169,    75,    77,    82,    77,
-      76,   189,   169,    95,   175,    95,   169,    79,    95,   192,
-     169,    55,   187,   190,   184,    77,    80,    82,    85,    88,
-      89,    79,    86,   175,    76,   189,    78,    78,    83,    77,
-     175,    56,   175,    80,    95,   175,    80,   184,   169,   187,
-      83,    86,    86,    95,    80,    77,   192,    76,   189,   184,
-      77
+     133,    83,   113,   170,   173,   178,    74,    82,    82,    82,
+      82,   136,    85,   164,   161,    77,   154,    74,    95,    77,
+      95,   169,    78,    83,   178,   119,   119,   119,    21,    23,
+      24,    25,    26,    27,    28,    31,    32,    33,    34,    51,
+      52,    68,    72,    73,   165,   166,    55,    95,   163,    74,
+      94,    85,   131,    74,    85,    87,   130,    86,   178,    83,
+      83,    83,    83,    57,   125,    86,    86,    78,   180,    95,
+      86,    74,    56,    57,    96,   167,    35,   165,    40,    41,
+      42,    43,    44,    45,    46,    47,    49,    76,   171,   183,
+     189,   180,    95,    82,   193,    85,   193,    55,   194,   195,
+      76,    57,   188,    55,   191,   193,    82,   184,   189,   169,
+      20,   182,   180,   169,    55,   169,    85,   180,   196,    78,
+      76,   189,   185,   189,   171,    78,    74,   169,    55,    77,
+     184,   172,    87,   183,    85,   181,    74,    86,    83,   192,
+     169,   195,    77,   184,    77,   184,   169,   191,   192,   180,
+      56,     6,    69,    70,    86,   113,   174,   177,   179,   171,
+     169,   193,    76,   189,    86,   197,    77,   172,    76,   189,
+      83,    95,    75,    78,    86,   169,    74,   169,   184,   180,
+      50,   186,   184,    48,   190,   171,    79,   113,   170,   176,
+     179,   172,   169,    75,    77,    82,    77,    76,   189,   169,
+      95,   175,    95,   169,    79,    95,   192,   169,    55,   187,
+     190,   184,    77,    80,    82,    85,    88,    89,    79,    86,
+     175,    76,   189,    78,    78,    83,    77,   175,    56,   175,
+      80,    95,   175,    80,   184,   169,   187,    83,    86,    86,
+      95,    80,    77,   192,    76,   189,   184,    77
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2315,381 +2316,396 @@ yyreduce:
 
 /* Line 1455 of yacc.c  */
 #line 240 "xi-grammar.y"
-    { (yyval.construct) = NULL; }
+    {
+          Entry *e = new Entry(lineno, 0, (yyvsp[(3) - (8)].type), (yyvsp[(5) - (8)].strval), (yyvsp[(7) - (8)].plist), 0, 0, 0, 0, 0);
+          int isExtern = 1;
+          e->setExtern(isExtern);
+          e->targs = (yyvsp[(6) - (8)].tparlist);
+          e->label = new XStr;
+          (yyvsp[(4) - (8)].ntype)->print(*e->label);
+          (yyval.construct) = e;
+        }
     break;
 
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 242 "xi-grammar.y"
+#line 250 "xi-grammar.y"
     { (yyval.construct) = NULL; }
     break;
 
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 244 "xi-grammar.y"
-    { (yyval.construct) = (yyvsp[(1) - (1)].accelBlock); }
+#line 252 "xi-grammar.y"
+    { (yyval.construct) = NULL; }
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 248 "xi-grammar.y"
-    { (yyval.tparam) = new TParamType((yyvsp[(1) - (1)].type)); }
+#line 254 "xi-grammar.y"
+    { (yyval.construct) = (yyvsp[(1) - (1)].accelBlock); }
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 250 "xi-grammar.y"
-    { (yyval.tparam) = new TParamVal((yyvsp[(1) - (1)].strval)); }
+#line 258 "xi-grammar.y"
+    { (yyval.tparam) = new TParamType((yyvsp[(1) - (1)].type)); }
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 252 "xi-grammar.y"
+#line 260 "xi-grammar.y"
     { (yyval.tparam) = new TParamVal((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 256 "xi-grammar.y"
-    { (yyval.tparlist) = new TParamList((yyvsp[(1) - (1)].tparam)); }
+#line 262 "xi-grammar.y"
+    { (yyval.tparam) = new TParamVal((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 258 "xi-grammar.y"
-    { (yyval.tparlist) = new TParamList((yyvsp[(1) - (3)].tparam), (yyvsp[(3) - (3)].tparlist)); }
+#line 266 "xi-grammar.y"
+    { (yyval.tparlist) = new TParamList((yyvsp[(1) - (1)].tparam)); }
     break;
 
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 262 "xi-grammar.y"
-    { (yyval.tparlist) = 0; }
+#line 268 "xi-grammar.y"
+    { (yyval.tparlist) = new TParamList((yyvsp[(1) - (3)].tparam), (yyvsp[(3) - (3)].tparlist)); }
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 264 "xi-grammar.y"
-    { (yyval.tparlist) = (yyvsp[(1) - (1)].tparlist); }
+#line 272 "xi-grammar.y"
+    { (yyval.tparlist) = 0; }
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 268 "xi-grammar.y"
-    { (yyval.tparlist) = 0; }
+#line 274 "xi-grammar.y"
+    { (yyval.tparlist) = (yyvsp[(1) - (1)].tparlist); }
     break;
 
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 270 "xi-grammar.y"
-    { (yyval.tparlist) = (yyvsp[(2) - (3)].tparlist); }
+#line 278 "xi-grammar.y"
+    { (yyval.tparlist) = 0; }
     break;
 
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 274 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("int"); }
+#line 280 "xi-grammar.y"
+    { (yyval.tparlist) = (yyvsp[(2) - (3)].tparlist); }
     break;
 
   case 43:
 
 /* Line 1455 of yacc.c  */
-#line 276 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("long"); }
+#line 284 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("int"); }
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 278 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("short"); }
+#line 286 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("long"); }
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 280 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("char"); }
+#line 288 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("short"); }
     break;
 
   case 46:
 
 /* Line 1455 of yacc.c  */
-#line 282 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("unsigned int"); }
+#line 290 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("char"); }
     break;
 
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 284 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("unsigned long"); }
+#line 292 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("unsigned int"); }
     break;
 
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 286 "xi-grammar.y"
+#line 294 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned long"); }
     break;
 
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 288 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("unsigned long long"); }
+#line 296 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("unsigned long"); }
     break;
 
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 290 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("unsigned short"); }
+#line 298 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("unsigned long long"); }
     break;
 
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 292 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("unsigned char"); }
+#line 300 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("unsigned short"); }
     break;
 
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 294 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("long long"); }
+#line 302 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("unsigned char"); }
     break;
 
   case 53:
 
 /* Line 1455 of yacc.c  */
-#line 296 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("float"); }
+#line 304 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("long long"); }
     break;
 
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 298 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("double"); }
+#line 306 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("float"); }
     break;
 
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 300 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("long double"); }
+#line 308 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("double"); }
     break;
 
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 302 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("void"); }
+#line 310 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("long double"); }
     break;
 
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 305 "xi-grammar.y"
-    { (yyval.ntype) = new NamedType((yyvsp[(1) - (2)].strval),(yyvsp[(2) - (2)].tparlist)); }
+#line 312 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("void"); }
     break;
 
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 306 "xi-grammar.y"
-    { 
-                    const char* basename, *scope;
-                    splitScopedName((yyvsp[(1) - (2)].strval), &scope, &basename);
-                    (yyval.ntype) = new NamedType(basename, (yyvsp[(2) - (2)].tparlist), scope);
-                }
+#line 315 "xi-grammar.y"
+    { (yyval.ntype) = new NamedType((yyvsp[(1) - (2)].strval),(yyvsp[(2) - (2)].tparlist)); }
     break;
 
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 314 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].type); }
+#line 316 "xi-grammar.y"
+    { 
+                    const char* basename, *scope;
+                    splitScopedName((yyvsp[(1) - (2)].strval), &scope, &basename);
+                    (yyval.ntype) = new NamedType(basename, (yyvsp[(2) - (2)].tparlist), scope);
+                }
     break;
 
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 316 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].ntype); }
+#line 324 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 320 "xi-grammar.y"
-    { (yyval.ptype) = new PtrType((yyvsp[(1) - (2)].type)); }
+#line 326 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].ntype); }
     break;
 
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 324 "xi-grammar.y"
-    { (yyvsp[(1) - (2)].ptype)->indirect(); (yyval.ptype) = (yyvsp[(1) - (2)].ptype); }
+#line 330 "xi-grammar.y"
+    { (yyval.ptype) = new PtrType((yyvsp[(1) - (2)].type)); }
     break;
 
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 326 "xi-grammar.y"
+#line 334 "xi-grammar.y"
     { (yyvsp[(1) - (2)].ptype)->indirect(); (yyval.ptype) = (yyvsp[(1) - (2)].ptype); }
     break;
 
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 330 "xi-grammar.y"
-    { (yyval.ftype) = new FuncType((yyvsp[(1) - (8)].type), (yyvsp[(4) - (8)].strval), (yyvsp[(7) - (8)].plist)); }
+#line 336 "xi-grammar.y"
+    { (yyvsp[(1) - (2)].ptype)->indirect(); (yyval.ptype) = (yyvsp[(1) - (2)].ptype); }
     break;
 
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 334 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].type); }
+#line 340 "xi-grammar.y"
+    { (yyval.ftype) = new FuncType((yyvsp[(1) - (8)].type), (yyvsp[(4) - (8)].strval), (yyvsp[(7) - (8)].plist)); }
     break;
 
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 336 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
+#line 344 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 338 "xi-grammar.y"
+#line 346 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 340 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].ftype); }
+#line 348 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 343 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(2) - (2)].type); }
+#line 350 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].ftype); }
     break;
 
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 345 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (2)].type); }
+#line 353 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(2) - (2)].type); }
     break;
 
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 349 "xi-grammar.y"
-    { (yyval.type) = new ReferenceType((yyvsp[(1) - (2)].type)); }
+#line 355 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (2)].type); }
     break;
 
   case 72:
 
 /* Line 1455 of yacc.c  */
-#line 351 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].type); }
+#line 359 "xi-grammar.y"
+    { (yyval.type) = new ReferenceType((yyvsp[(1) - (2)].type)); }
     break;
 
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 355 "xi-grammar.y"
-    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
+#line 361 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 357 "xi-grammar.y"
+#line 365 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 75:
 
 /* Line 1455 of yacc.c  */
-#line 361 "xi-grammar.y"
-    { (yyval.val) = (yyvsp[(2) - (3)].val); }
+#line 367 "xi-grammar.y"
+    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 365 "xi-grammar.y"
-    { (yyval.vallist) = 0; }
+#line 371 "xi-grammar.y"
+    { (yyval.val) = (yyvsp[(2) - (3)].val); }
     break;
 
   case 77:
 
 /* Line 1455 of yacc.c  */
-#line 367 "xi-grammar.y"
-    { (yyval.vallist) = new ValueList((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].vallist)); }
+#line 375 "xi-grammar.y"
+    { (yyval.vallist) = 0; }
     break;
 
   case 78:
 
 /* Line 1455 of yacc.c  */
-#line 371 "xi-grammar.y"
-    { (yyval.readonly) = new Readonly(lineno, (yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].strval), (yyvsp[(4) - (4)].vallist)); }
+#line 377 "xi-grammar.y"
+    { (yyval.vallist) = new ValueList((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].vallist)); }
     break;
 
   case 79:
 
 /* Line 1455 of yacc.c  */
-#line 375 "xi-grammar.y"
-    { (yyval.readonly) = new Readonly(lineno, (yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].strval), 0, 1); }
+#line 381 "xi-grammar.y"
+    { (yyval.readonly) = new Readonly(lineno, (yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].strval), (yyvsp[(4) - (4)].vallist)); }
     break;
 
   case 80:
 
 /* Line 1455 of yacc.c  */
-#line 379 "xi-grammar.y"
-    { (yyval.intval) = 0;}
+#line 385 "xi-grammar.y"
+    { (yyval.readonly) = new Readonly(lineno, (yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].strval), 0, 1); }
     break;
 
   case 81:
 
 /* Line 1455 of yacc.c  */
-#line 381 "xi-grammar.y"
+#line 389 "xi-grammar.y"
     { (yyval.intval) = 0;}
     break;
 
   case 82:
 
 /* Line 1455 of yacc.c  */
-#line 385 "xi-grammar.y"
-    { (yyval.intval) = 0; }
+#line 391 "xi-grammar.y"
+    { (yyval.intval) = 0;}
     break;
 
   case 83:
 
 /* Line 1455 of yacc.c  */
-#line 387 "xi-grammar.y"
+#line 395 "xi-grammar.y"
+    { (yyval.intval) = 0; }
+    break;
+
+  case 84:
+
+/* Line 1455 of yacc.c  */
+#line 397 "xi-grammar.y"
     { 
                  /*
                  printf("Warning: Message attributes are being phased out.\n");
@@ -2699,248 +2715,248 @@ yyreduce:
                }
     break;
 
-  case 84:
+  case 85:
 
 /* Line 1455 of yacc.c  */
-#line 397 "xi-grammar.y"
+#line 407 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
     break;
 
-  case 85:
+  case 86:
 
 /* Line 1455 of yacc.c  */
-#line 399 "xi-grammar.y"
+#line 409 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (3)].intval) | (yyvsp[(3) - (3)].intval); }
     break;
 
-  case 86:
+  case 87:
 
 /* Line 1455 of yacc.c  */
-#line 403 "xi-grammar.y"
+#line 413 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
-  case 87:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 405 "xi-grammar.y"
+#line 415 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
-  case 88:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 409 "xi-grammar.y"
+#line 419 "xi-grammar.y"
     { (yyval.cattr) = 0; }
     break;
 
-  case 89:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 411 "xi-grammar.y"
+#line 421 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(2) - (3)].cattr); }
     break;
 
-  case 90:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 415 "xi-grammar.y"
+#line 425 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (1)].cattr); }
     break;
 
-  case 91:
+  case 92:
 
 /* Line 1455 of yacc.c  */
-#line 417 "xi-grammar.y"
+#line 427 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (3)].cattr) | (yyvsp[(3) - (3)].cattr); }
     break;
 
-  case 92:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 421 "xi-grammar.y"
+#line 431 "xi-grammar.y"
     { python_doc = NULL; (yyval.intval) = 0; }
     break;
 
-  case 93:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 423 "xi-grammar.y"
+#line 433 "xi-grammar.y"
     { python_doc = (yyvsp[(1) - (1)].strval); (yyval.intval) = 0; }
     break;
 
-  case 94:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 427 "xi-grammar.y"
+#line 437 "xi-grammar.y"
     { (yyval.cattr) = Chare::CPYTHON; }
     break;
 
-  case 95:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 431 "xi-grammar.y"
+#line 441 "xi-grammar.y"
     { (yyval.cattr) = 0; }
     break;
 
-  case 96:
+  case 97:
 
 /* Line 1455 of yacc.c  */
-#line 433 "xi-grammar.y"
+#line 443 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(2) - (3)].cattr); }
     break;
 
-  case 97:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 437 "xi-grammar.y"
+#line 447 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (1)].cattr); }
     break;
 
-  case 98:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 439 "xi-grammar.y"
+#line 449 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (3)].cattr) | (yyvsp[(3) - (3)].cattr); }
     break;
 
-  case 99:
+  case 100:
 
 /* Line 1455 of yacc.c  */
-#line 443 "xi-grammar.y"
+#line 453 "xi-grammar.y"
     { (yyval.cattr) = Chare::CMIGRATABLE; }
     break;
 
-  case 100:
+  case 101:
 
 /* Line 1455 of yacc.c  */
-#line 445 "xi-grammar.y"
+#line 455 "xi-grammar.y"
     { (yyval.cattr) = Chare::CPYTHON; }
     break;
 
-  case 101:
+  case 102:
 
 /* Line 1455 of yacc.c  */
-#line 449 "xi-grammar.y"
+#line 459 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
-  case 102:
+  case 103:
 
 /* Line 1455 of yacc.c  */
-#line 451 "xi-grammar.y"
+#line 461 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
-  case 103:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 454 "xi-grammar.y"
+#line 464 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
-  case 104:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 456 "xi-grammar.y"
+#line 466 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
-  case 105:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 459 "xi-grammar.y"
+#line 469 "xi-grammar.y"
     { (yyval.mv) = new MsgVar((yyvsp[(2) - (5)].type), (yyvsp[(3) - (5)].strval), (yyvsp[(1) - (5)].intval), (yyvsp[(4) - (5)].intval)); }
     break;
 
-  case 106:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 463 "xi-grammar.y"
+#line 473 "xi-grammar.y"
     { (yyval.mvlist) = new MsgVarList((yyvsp[(1) - (1)].mv)); }
     break;
 
-  case 107:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 465 "xi-grammar.y"
+#line 475 "xi-grammar.y"
     { (yyval.mvlist) = new MsgVarList((yyvsp[(1) - (2)].mv), (yyvsp[(2) - (2)].mvlist)); }
     break;
 
-  case 108:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 469 "xi-grammar.y"
+#line 479 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, (yyvsp[(3) - (3)].ntype)); }
     break;
 
-  case 109:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 471 "xi-grammar.y"
+#line 481 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, (yyvsp[(3) - (6)].ntype), (yyvsp[(5) - (6)].mvlist)); }
     break;
 
-  case 110:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 475 "xi-grammar.y"
+#line 485 "xi-grammar.y"
     { (yyval.typelist) = 0; }
     break;
 
-  case 111:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 477 "xi-grammar.y"
+#line 487 "xi-grammar.y"
     { (yyval.typelist) = (yyvsp[(2) - (2)].typelist); }
     break;
 
-  case 112:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 481 "xi-grammar.y"
+#line 491 "xi-grammar.y"
     { (yyval.typelist) = new TypeList((yyvsp[(1) - (1)].ntype)); }
     break;
 
-  case 113:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 483 "xi-grammar.y"
+#line 493 "xi-grammar.y"
     { (yyval.typelist) = new TypeList((yyvsp[(1) - (3)].ntype), (yyvsp[(3) - (3)].typelist)); }
     break;
 
-  case 114:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 487 "xi-grammar.y"
+#line 497 "xi-grammar.y"
     { (yyval.chare) = new Chare(lineno, (yyvsp[(2) - (5)].cattr)|Chare::CCHARE, (yyvsp[(3) - (5)].ntype), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
-  case 115:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 489 "xi-grammar.y"
+#line 499 "xi-grammar.y"
     { (yyval.chare) = new MainChare(lineno, (yyvsp[(2) - (5)].cattr), (yyvsp[(3) - (5)].ntype), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
-  case 116:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 493 "xi-grammar.y"
+#line 503 "xi-grammar.y"
     { (yyval.chare) = new Group(lineno, (yyvsp[(2) - (5)].cattr), (yyvsp[(3) - (5)].ntype), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
-  case 117:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 497 "xi-grammar.y"
+#line 507 "xi-grammar.y"
     { (yyval.chare) = new NodeGroup(lineno, (yyvsp[(2) - (5)].cattr), (yyvsp[(3) - (5)].ntype), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
-  case 118:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 501 "xi-grammar.y"
+#line 511 "xi-grammar.y"
     {/*Stupid special case for [1D] indices*/
                        char *buf=new char[40];
                        sprintf(buf,"%sD",(yyvsp[(2) - (4)].strval));
@@ -2948,206 +2964,206 @@ yyreduce:
                }
     break;
 
-  case 119:
-
-/* Line 1455 of yacc.c  */
-#line 507 "xi-grammar.y"
-    { (yyval.ntype) = new NamedType((yyvsp[(2) - (3)].strval)); }
-    break;
-
   case 120:
 
 /* Line 1455 of yacc.c  */
-#line 511 "xi-grammar.y"
-    {  (yyval.chare) = new Array(lineno, (yyvsp[(2) - (6)].cattr), (yyvsp[(3) - (6)].ntype), (yyvsp[(4) - (6)].ntype), (yyvsp[(5) - (6)].typelist), (yyvsp[(6) - (6)].mbrlist)); }
+#line 517 "xi-grammar.y"
+    { (yyval.ntype) = new NamedType((yyvsp[(2) - (3)].strval)); }
     break;
 
   case 121:
 
 /* Line 1455 of yacc.c  */
-#line 513 "xi-grammar.y"
-    {  (yyval.chare) = new Array(lineno, (yyvsp[(3) - (6)].cattr), (yyvsp[(2) - (6)].ntype), (yyvsp[(4) - (6)].ntype), (yyvsp[(5) - (6)].typelist), (yyvsp[(6) - (6)].mbrlist)); }
+#line 521 "xi-grammar.y"
+    {  (yyval.chare) = new Array(lineno, (yyvsp[(2) - (6)].cattr), (yyvsp[(3) - (6)].ntype), (yyvsp[(4) - (6)].ntype), (yyvsp[(5) - (6)].typelist), (yyvsp[(6) - (6)].mbrlist)); }
     break;
 
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 517 "xi-grammar.y"
-    { (yyval.chare) = new Chare(lineno, (yyvsp[(2) - (5)].cattr)|Chare::CCHARE, new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist));}
+#line 523 "xi-grammar.y"
+    {  (yyval.chare) = new Array(lineno, (yyvsp[(3) - (6)].cattr), (yyvsp[(2) - (6)].ntype), (yyvsp[(4) - (6)].ntype), (yyvsp[(5) - (6)].typelist), (yyvsp[(6) - (6)].mbrlist)); }
     break;
 
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 519 "xi-grammar.y"
-    { (yyval.chare) = new MainChare(lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
+#line 527 "xi-grammar.y"
+    { (yyval.chare) = new Chare(lineno, (yyvsp[(2) - (5)].cattr)|Chare::CCHARE, new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist));}
     break;
 
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 523 "xi-grammar.y"
-    { (yyval.chare) = new Group(lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
+#line 529 "xi-grammar.y"
+    { (yyval.chare) = new MainChare(lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 527 "xi-grammar.y"
-    { (yyval.chare) = new NodeGroup( lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
+#line 533 "xi-grammar.y"
+    { (yyval.chare) = new Group(lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 531 "xi-grammar.y"
-    { (yyval.chare) = new Array( lineno, 0, (yyvsp[(2) - (5)].ntype), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
+#line 537 "xi-grammar.y"
+    { (yyval.chare) = new NodeGroup( lineno, (yyvsp[(2) - (5)].cattr), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 535 "xi-grammar.y"
-    { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (4)].strval))); }
+#line 541 "xi-grammar.y"
+    { (yyval.chare) = new Array( lineno, 0, (yyvsp[(2) - (5)].ntype), new NamedType((yyvsp[(3) - (5)].strval)), (yyvsp[(4) - (5)].typelist), (yyvsp[(5) - (5)].mbrlist)); }
     break;
 
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 537 "xi-grammar.y"
-    { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (7)].strval)), (yyvsp[(5) - (7)].mvlist)); }
+#line 545 "xi-grammar.y"
+    { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (4)].strval))); }
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 541 "xi-grammar.y"
-    { (yyval.type) = 0; }
+#line 547 "xi-grammar.y"
+    { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (7)].strval)), (yyvsp[(5) - (7)].mvlist)); }
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 543 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(2) - (2)].type); }
+#line 551 "xi-grammar.y"
+    { (yyval.type) = 0; }
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 547 "xi-grammar.y"
-    { (yyval.strval) = 0; }
+#line 553 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(2) - (2)].type); }
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 549 "xi-grammar.y"
-    { (yyval.strval) = (yyvsp[(2) - (2)].strval); }
+#line 557 "xi-grammar.y"
+    { (yyval.strval) = 0; }
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
-#line 551 "xi-grammar.y"
+#line 559 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(2) - (2)].strval); }
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 555 "xi-grammar.y"
-    { (yyval.tvar) = new TType(new NamedType((yyvsp[(2) - (3)].strval)), (yyvsp[(3) - (3)].type)); }
+#line 561 "xi-grammar.y"
+    { (yyval.strval) = (yyvsp[(2) - (2)].strval); }
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 557 "xi-grammar.y"
-    { (yyval.tvar) = new TFunc((yyvsp[(1) - (2)].ftype), (yyvsp[(2) - (2)].strval)); }
+#line 565 "xi-grammar.y"
+    { (yyval.tvar) = new TType(new NamedType((yyvsp[(2) - (3)].strval)), (yyvsp[(3) - (3)].type)); }
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 559 "xi-grammar.y"
-    { (yyval.tvar) = new TName((yyvsp[(1) - (3)].type), (yyvsp[(2) - (3)].strval), (yyvsp[(3) - (3)].strval)); }
+#line 567 "xi-grammar.y"
+    { (yyval.tvar) = new TFunc((yyvsp[(1) - (2)].ftype), (yyvsp[(2) - (2)].strval)); }
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 563 "xi-grammar.y"
-    { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (1)].tvar)); }
+#line 569 "xi-grammar.y"
+    { (yyval.tvar) = new TName((yyvsp[(1) - (3)].type), (yyvsp[(2) - (3)].strval), (yyvsp[(3) - (3)].strval)); }
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 565 "xi-grammar.y"
-    { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (3)].tvar), (yyvsp[(3) - (3)].tvarlist)); }
+#line 573 "xi-grammar.y"
+    { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (1)].tvar)); }
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
-#line 569 "xi-grammar.y"
-    { (yyval.tvarlist) = (yyvsp[(3) - (4)].tvarlist); }
+#line 575 "xi-grammar.y"
+    { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (3)].tvar), (yyvsp[(3) - (3)].tvarlist)); }
     break;
 
   case 140:
 
 /* Line 1455 of yacc.c  */
-#line 573 "xi-grammar.y"
-    { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
+#line 579 "xi-grammar.y"
+    { (yyval.tvarlist) = (yyvsp[(3) - (4)].tvarlist); }
     break;
 
   case 141:
 
 /* Line 1455 of yacc.c  */
-#line 575 "xi-grammar.y"
+#line 583 "xi-grammar.y"
     { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
     break;
 
   case 142:
 
 /* Line 1455 of yacc.c  */
-#line 577 "xi-grammar.y"
+#line 585 "xi-grammar.y"
     { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
     break;
 
   case 143:
 
 /* Line 1455 of yacc.c  */
-#line 579 "xi-grammar.y"
+#line 587 "xi-grammar.y"
     { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
     break;
 
   case 144:
 
 /* Line 1455 of yacc.c  */
-#line 581 "xi-grammar.y"
-    { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].message)); (yyvsp[(2) - (2)].message)->setTemplate((yyval.templat)); }
+#line 589 "xi-grammar.y"
+    { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
     break;
 
   case 145:
 
 /* Line 1455 of yacc.c  */
-#line 585 "xi-grammar.y"
-    { (yyval.mbrlist) = 0; }
+#line 591 "xi-grammar.y"
+    { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].message)); (yyvsp[(2) - (2)].message)->setTemplate((yyval.templat)); }
     break;
 
   case 146:
 
 /* Line 1455 of yacc.c  */
-#line 587 "xi-grammar.y"
-    { (yyval.mbrlist) = (yyvsp[(2) - (4)].mbrlist); }
+#line 595 "xi-grammar.y"
+    { (yyval.mbrlist) = 0; }
     break;
 
   case 147:
 
 /* Line 1455 of yacc.c  */
-#line 591 "xi-grammar.y"
+#line 597 "xi-grammar.y"
+    { (yyval.mbrlist) = (yyvsp[(2) - (4)].mbrlist); }
+    break;
+
+  case 148:
+
+/* Line 1455 of yacc.c  */
+#line 601 "xi-grammar.y"
     { 
                  Entry *tempEntry;
                  if (!connectEntries->empty()) {
@@ -3168,73 +3184,73 @@ yyreduce:
                }
     break;
 
-  case 148:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 610 "xi-grammar.y"
+#line 620 "xi-grammar.y"
     { (yyval.mbrlist) = new MemberList((yyvsp[(1) - (2)].member), (yyvsp[(2) - (2)].mbrlist)); }
     break;
 
-  case 149:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 614 "xi-grammar.y"
+#line 624 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].readonly); }
     break;
 
-  case 150:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 616 "xi-grammar.y"
+#line 626 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].readonly); }
     break;
 
-  case 152:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 619 "xi-grammar.y"
+#line 629 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].member); }
     break;
 
-  case 153:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 621 "xi-grammar.y"
+#line 631 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(2) - (3)].pupable); }
     break;
 
-  case 154:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 623 "xi-grammar.y"
+#line 633 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(2) - (3)].includeFile); }
     break;
 
-  case 155:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 625 "xi-grammar.y"
+#line 635 "xi-grammar.y"
     { (yyval.member) = new ClassDeclaration(lineno,(yyvsp[(2) - (3)].strval)); }
     break;
 
-  case 156:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 629 "xi-grammar.y"
+#line 639 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (3)].strval), 1); }
     break;
 
-  case 157:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 631 "xi-grammar.y"
+#line 641 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (6)].strval), 1); }
     break;
 
-  case 158:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 633 "xi-grammar.y"
+#line 643 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno,
                                    strdup((std::string((yyvsp[(3) - (9)].strval)) + '<' +
                                            ((yyvsp[(5) - (9)].tparlist))->to_string() + '>').c_str()),
@@ -3242,40 +3258,40 @@ yyreduce:
                }
     break;
 
-  case 159:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 639 "xi-grammar.y"
+#line 649 "xi-grammar.y"
     { printf("Warning: deprecated use of initcall. Use initnode or initproc instead.\n"); 
                  (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (3)].strval), 1); }
     break;
 
-  case 160:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 642 "xi-grammar.y"
+#line 652 "xi-grammar.y"
     { printf("Warning: deprecated use of initcall. Use initnode or initproc instead.\n");
                  (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (6)].strval), 1); }
     break;
 
-  case 161:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 647 "xi-grammar.y"
+#line 657 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (3)].strval), 0); }
     break;
 
-  case 162:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 649 "xi-grammar.y"
+#line 659 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (6)].strval), 0); }
     break;
 
-  case 163:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 651 "xi-grammar.y"
+#line 661 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno,
                                    strdup((std::string((yyvsp[(3) - (9)].strval)) + '<' +
                                            ((yyvsp[(5) - (9)].tparlist))->to_string() + '>').c_str()),
@@ -3283,10 +3299,10 @@ yyreduce:
                }
     break;
 
-  case 164:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 657 "xi-grammar.y"
+#line 667 "xi-grammar.y"
     {
                   InitCall* rtn = new InitCall(lineno, (yyvsp[(6) - (9)].strval), 0);
                   rtn->setAccel();
@@ -3294,55 +3310,55 @@ yyreduce:
                }
     break;
 
-  case 165:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 665 "xi-grammar.y"
+#line 675 "xi-grammar.y"
     { (yyval.pupable) = new PUPableClass(lineno,(yyvsp[(1) - (1)].ntype),0); }
     break;
 
-  case 166:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 667 "xi-grammar.y"
+#line 677 "xi-grammar.y"
     { (yyval.pupable) = new PUPableClass(lineno,(yyvsp[(1) - (3)].ntype),(yyvsp[(3) - (3)].pupable)); }
     break;
 
-  case 167:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 670 "xi-grammar.y"
+#line 680 "xi-grammar.y"
     { (yyval.includeFile) = new IncludeFile(lineno,(yyvsp[(1) - (1)].strval)); }
     break;
 
-  case 168:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 674 "xi-grammar.y"
+#line 684 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].entry); }
     break;
 
-  case 169:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 676 "xi-grammar.y"
+#line 686 "xi-grammar.y"
     {
                   (yyvsp[(2) - (3)].entry)->tspec = (yyvsp[(1) - (3)].tvarlist);
                   (yyval.member) = (yyvsp[(2) - (3)].entry);
                 }
     break;
 
-  case 170:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 681 "xi-grammar.y"
+#line 691 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (1)].member); }
     break;
 
-  case 171:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 685 "xi-grammar.y"
+#line 695 "xi-grammar.y"
     { 
                  if ((yyvsp[(7) - (7)].sc) != 0) { 
                    (yyvsp[(7) - (7)].sc)->con1 = new SdagConstruct(SIDENT, (yyvsp[(4) - (7)].strval));
@@ -3352,10 +3368,10 @@ yyreduce:
                }
     break;
 
-  case 172:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 693 "xi-grammar.y"
+#line 703 "xi-grammar.y"
     { 
                  if ((yyvsp[(5) - (5)].sc) != 0) {
                    (yyvsp[(5) - (5)].sc)->con1 = new SdagConstruct(SIDENT, (yyvsp[(3) - (5)].strval));
@@ -3370,10 +3386,10 @@ yyreduce:
                }
     break;
 
-  case 173:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 706 "xi-grammar.y"
+#line 716 "xi-grammar.y"
     {
                   int attribs = SACCEL;
                   const char* name = (yyvsp[(6) - (12)].strval);
@@ -3391,206 +3407,206 @@ yyreduce:
                 }
     break;
 
-  case 174:
-
-/* Line 1455 of yacc.c  */
-#line 724 "xi-grammar.y"
-    { (yyval.accelBlock) = new AccelBlock(lineno, new XStr((yyvsp[(3) - (5)].strval))); }
-    break;
-
   case 175:
 
 /* Line 1455 of yacc.c  */
-#line 726 "xi-grammar.y"
-    { (yyval.accelBlock) = new AccelBlock(lineno, NULL); }
+#line 734 "xi-grammar.y"
+    { (yyval.accelBlock) = new AccelBlock(lineno, new XStr((yyvsp[(3) - (5)].strval))); }
     break;
 
   case 176:
 
 /* Line 1455 of yacc.c  */
-#line 730 "xi-grammar.y"
-    { (yyval.type) = new BuiltinType("void"); }
+#line 736 "xi-grammar.y"
+    { (yyval.accelBlock) = new AccelBlock(lineno, NULL); }
     break;
 
   case 177:
 
 /* Line 1455 of yacc.c  */
-#line 732 "xi-grammar.y"
-    { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
+#line 740 "xi-grammar.y"
+    { (yyval.type) = new BuiltinType("void"); }
     break;
 
   case 178:
 
 /* Line 1455 of yacc.c  */
-#line 736 "xi-grammar.y"
-    { (yyval.intval) = 0; }
+#line 742 "xi-grammar.y"
+    { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 179:
 
 /* Line 1455 of yacc.c  */
-#line 738 "xi-grammar.y"
-    { (yyval.intval) = (yyvsp[(2) - (3)].intval); }
+#line 746 "xi-grammar.y"
+    { (yyval.intval) = 0; }
     break;
 
   case 180:
 
 /* Line 1455 of yacc.c  */
-#line 742 "xi-grammar.y"
-    { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
+#line 748 "xi-grammar.y"
+    { (yyval.intval) = (yyvsp[(2) - (3)].intval); }
     break;
 
   case 181:
 
 /* Line 1455 of yacc.c  */
-#line 744 "xi-grammar.y"
-    { (yyval.intval) = (yyvsp[(1) - (3)].intval) | (yyvsp[(3) - (3)].intval); }
+#line 752 "xi-grammar.y"
+    { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
     break;
 
   case 182:
 
 /* Line 1455 of yacc.c  */
-#line 748 "xi-grammar.y"
-    { (yyval.intval) = STHREADED; }
+#line 754 "xi-grammar.y"
+    { (yyval.intval) = (yyvsp[(1) - (3)].intval) | (yyvsp[(3) - (3)].intval); }
     break;
 
   case 183:
 
 /* Line 1455 of yacc.c  */
-#line 750 "xi-grammar.y"
-    { (yyval.intval) = SSYNC; }
+#line 758 "xi-grammar.y"
+    { (yyval.intval) = STHREADED; }
     break;
 
   case 184:
 
 /* Line 1455 of yacc.c  */
-#line 752 "xi-grammar.y"
-    { (yyval.intval) = SIGET; }
+#line 760 "xi-grammar.y"
+    { (yyval.intval) = SSYNC; }
     break;
 
   case 185:
 
 /* Line 1455 of yacc.c  */
-#line 754 "xi-grammar.y"
-    { (yyval.intval) = SLOCKED; }
+#line 762 "xi-grammar.y"
+    { (yyval.intval) = SIGET; }
     break;
 
   case 186:
 
 /* Line 1455 of yacc.c  */
-#line 756 "xi-grammar.y"
-    { (yyval.intval) = SCREATEHERE; }
+#line 764 "xi-grammar.y"
+    { (yyval.intval) = SLOCKED; }
     break;
 
   case 187:
 
 /* Line 1455 of yacc.c  */
-#line 758 "xi-grammar.y"
-    { (yyval.intval) = SCREATEHOME; }
+#line 766 "xi-grammar.y"
+    { (yyval.intval) = SCREATEHERE; }
     break;
 
   case 188:
 
 /* Line 1455 of yacc.c  */
-#line 760 "xi-grammar.y"
-    { (yyval.intval) = SNOKEEP; }
+#line 768 "xi-grammar.y"
+    { (yyval.intval) = SCREATEHOME; }
     break;
 
   case 189:
 
 /* Line 1455 of yacc.c  */
-#line 762 "xi-grammar.y"
-    { (yyval.intval) = SNOTRACE; }
+#line 770 "xi-grammar.y"
+    { (yyval.intval) = SNOKEEP; }
     break;
 
   case 190:
 
 /* Line 1455 of yacc.c  */
-#line 764 "xi-grammar.y"
-    { (yyval.intval) = SIMMEDIATE; }
+#line 772 "xi-grammar.y"
+    { (yyval.intval) = SNOTRACE; }
     break;
 
   case 191:
 
 /* Line 1455 of yacc.c  */
-#line 766 "xi-grammar.y"
-    { (yyval.intval) = SSKIPSCHED; }
+#line 774 "xi-grammar.y"
+    { (yyval.intval) = SIMMEDIATE; }
     break;
 
   case 192:
 
 /* Line 1455 of yacc.c  */
-#line 768 "xi-grammar.y"
-    { (yyval.intval) = SINLINE; }
+#line 776 "xi-grammar.y"
+    { (yyval.intval) = SSKIPSCHED; }
     break;
 
   case 193:
 
 /* Line 1455 of yacc.c  */
-#line 770 "xi-grammar.y"
-    { (yyval.intval) = SLOCAL; }
+#line 778 "xi-grammar.y"
+    { (yyval.intval) = SINLINE; }
     break;
 
   case 194:
 
 /* Line 1455 of yacc.c  */
-#line 772 "xi-grammar.y"
-    { (yyval.intval) = SPYTHON; }
+#line 780 "xi-grammar.y"
+    { (yyval.intval) = SLOCAL; }
     break;
 
   case 195:
 
 /* Line 1455 of yacc.c  */
-#line 774 "xi-grammar.y"
-    { (yyval.intval) = SMEM; }
+#line 782 "xi-grammar.y"
+    { (yyval.intval) = SPYTHON; }
     break;
 
   case 196:
 
 /* Line 1455 of yacc.c  */
-#line 776 "xi-grammar.y"
-    { (yyval.intval) = SREDUCE; }
+#line 784 "xi-grammar.y"
+    { (yyval.intval) = SMEM; }
     break;
 
   case 197:
 
 /* Line 1455 of yacc.c  */
-#line 780 "xi-grammar.y"
-    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
+#line 786 "xi-grammar.y"
+    { (yyval.intval) = SREDUCE; }
     break;
 
   case 198:
 
 /* Line 1455 of yacc.c  */
-#line 782 "xi-grammar.y"
+#line 790 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 199:
 
 /* Line 1455 of yacc.c  */
-#line 784 "xi-grammar.y"
+#line 792 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 200:
 
 /* Line 1455 of yacc.c  */
-#line 788 "xi-grammar.y"
-    { (yyval.strval) = ""; }
+#line 794 "xi-grammar.y"
+    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 201:
 
 /* Line 1455 of yacc.c  */
-#line 790 "xi-grammar.y"
-    { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
+#line 798 "xi-grammar.y"
+    { (yyval.strval) = ""; }
     break;
 
   case 202:
 
 /* Line 1455 of yacc.c  */
-#line 792 "xi-grammar.y"
+#line 800 "xi-grammar.y"
+    { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
+    break;
+
+  case 203:
+
+/* Line 1455 of yacc.c  */
+#line 802 "xi-grammar.y"
     {  /*Returned only when in_bracket*/
                        char *tmp = new char[strlen((yyvsp[(1) - (3)].strval))+strlen((yyvsp[(3) - (3)].strval))+3];
                        sprintf(tmp,"%s, %s", (yyvsp[(1) - (3)].strval), (yyvsp[(3) - (3)].strval));
@@ -3598,24 +3614,24 @@ yyreduce:
                }
     break;
 
-  case 203:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 800 "xi-grammar.y"
+#line 810 "xi-grammar.y"
     { (yyval.strval) = ""; }
     break;
 
-  case 204:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 802 "xi-grammar.y"
+#line 812 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
-  case 205:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 804 "xi-grammar.y"
+#line 814 "xi-grammar.y"
     {  /*Returned only when in_bracket*/
                        char *tmp = new char[strlen((yyvsp[(1) - (5)].strval))+strlen((yyvsp[(3) - (5)].strval))+strlen((yyvsp[(5) - (5)].strval))+3];
                        sprintf(tmp,"%s[%s]%s", (yyvsp[(1) - (5)].strval), (yyvsp[(3) - (5)].strval), (yyvsp[(5) - (5)].strval));
@@ -3623,10 +3639,10 @@ yyreduce:
                }
     break;
 
-  case 206:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 810 "xi-grammar.y"
+#line 820 "xi-grammar.y"
     { /*Returned only when in_braces*/
                        char *tmp = new char[strlen((yyvsp[(1) - (5)].strval))+strlen((yyvsp[(3) - (5)].strval))+strlen((yyvsp[(5) - (5)].strval))+3];
                        sprintf(tmp,"%s{%s}%s", (yyvsp[(1) - (5)].strval), (yyvsp[(3) - (5)].strval), (yyvsp[(5) - (5)].strval));
@@ -3634,10 +3650,10 @@ yyreduce:
                }
     break;
 
-  case 207:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 816 "xi-grammar.y"
+#line 826 "xi-grammar.y"
     { /*Returned only when in_braces*/
                        char *tmp = new char[strlen((yyvsp[(1) - (5)].strval))+strlen((yyvsp[(3) - (5)].strval))+strlen((yyvsp[(5) - (5)].strval))+3];
                        sprintf(tmp,"%s(%s)%s", (yyvsp[(1) - (5)].strval), (yyvsp[(3) - (5)].strval), (yyvsp[(5) - (5)].strval));
@@ -3645,10 +3661,10 @@ yyreduce:
                }
     break;
 
-  case 208:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 822 "xi-grammar.y"
+#line 832 "xi-grammar.y"
     { /*Returned only when in_braces*/
                        char *tmp = new char[strlen((yyvsp[(2) - (4)].strval))+strlen((yyvsp[(4) - (4)].strval))+3];
                        sprintf(tmp,"(%s)%s", (yyvsp[(2) - (4)].strval), (yyvsp[(4) - (4)].strval));
@@ -3656,20 +3672,20 @@ yyreduce:
                }
     break;
 
-  case 209:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 830 "xi-grammar.y"
+#line 840 "xi-grammar.y"
     {  /*Start grabbing CPROGRAM segments*/
                        in_bracket=1;
                        (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (3)].type),(yyvsp[(2) - (3)].strval));
                }
     break;
 
-  case 210:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 837 "xi-grammar.y"
+#line 847 "xi-grammar.y"
     { 
                    /*Start grabbing CPROGRAM segments*/
                        in_braces=1;
@@ -3677,93 +3693,93 @@ yyreduce:
                }
     break;
 
-  case 211:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 845 "xi-grammar.y"
+#line 855 "xi-grammar.y"
     { 
                        in_braces=0;
                        (yyval.intval) = 0;
                }
     break;
 
-  case 212:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 852 "xi-grammar.y"
+#line 862 "xi-grammar.y"
     { (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (1)].type));}
     break;
 
-  case 213:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 854 "xi-grammar.y"
+#line 864 "xi-grammar.y"
     { (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (3)].type),(yyvsp[(2) - (3)].strval)); (yyval.pname)->setConditional((yyvsp[(3) - (3)].intval)); }
     break;
 
-  case 214:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 856 "xi-grammar.y"
+#line 866 "xi-grammar.y"
     { (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (4)].type),(yyvsp[(2) - (4)].strval),0,(yyvsp[(4) - (4)].val));}
     break;
 
-  case 215:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 858 "xi-grammar.y"
+#line 868 "xi-grammar.y"
     { /*Stop grabbing CPROGRAM segments*/
                        in_bracket=0;
                        (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (3)].pname)->getType(), (yyvsp[(1) - (3)].pname)->getName() ,(yyvsp[(2) - (3)].strval));
                }
     break;
 
-  case 216:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 864 "xi-grammar.y"
+#line 874 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_READONLY; }
     break;
 
-  case 217:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 865 "xi-grammar.y"
+#line 875 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_READWRITE; }
     break;
 
-  case 218:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 866 "xi-grammar.y"
+#line 876 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_WRITEONLY; }
     break;
 
-  case 219:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 869 "xi-grammar.y"
+#line 879 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr((yyvsp[(1) - (1)].strval)); }
     break;
 
-  case 220:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 870 "xi-grammar.y"
+#line 880 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr(""); *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "->" << (yyvsp[(4) - (4)].strval); }
     break;
 
-  case 221:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 871 "xi-grammar.y"
+#line 881 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr(""); *((yyval.xstrptr)) << *((yyvsp[(1) - (3)].xstrptr)) << "." << (yyvsp[(3) - (3)].strval); }
     break;
 
-  case 222:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 873 "xi-grammar.y"
+#line 883 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "[" << *((yyvsp[(3) - (4)].xstrptr)) << "]";
@@ -3772,10 +3788,10 @@ yyreduce:
                 }
     break;
 
-  case 223:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 880 "xi-grammar.y"
+#line 890 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "[" << (yyvsp[(3) - (4)].strval) << "]";
@@ -3783,10 +3799,10 @@ yyreduce:
                 }
     break;
 
-  case 224:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 886 "xi-grammar.y"
+#line 896 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "(" << *((yyvsp[(3) - (4)].xstrptr)) << ")";
@@ -3795,20 +3811,20 @@ yyreduce:
                 }
     break;
 
-  case 225:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 895 "xi-grammar.y"
+#line 905 "xi-grammar.y"
     {
                   in_bracket = 0;
                   (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (3)].pname)->getType(), (yyvsp[(1) - (3)].pname)->getName(), (yyvsp[(2) - (3)].strval));
                 }
     break;
 
-  case 226:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 902 "xi-grammar.y"
+#line 912 "xi-grammar.y"
     {
                   (yyval.pname) = new Parameter(lineno, (yyvsp[(3) - (7)].type), (yyvsp[(4) - (7)].strval));
                   (yyval.pname)->setAccelInstName((yyvsp[(6) - (7)].xstrptr));
@@ -3816,10 +3832,10 @@ yyreduce:
                 }
     break;
 
-  case 227:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 908 "xi-grammar.y"
+#line 918 "xi-grammar.y"
     {
                  (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (5)].type), (yyvsp[(2) - (5)].strval));
                   (yyval.pname)->setAccelInstName((yyvsp[(4) - (5)].xstrptr));
@@ -3827,10 +3843,10 @@ yyreduce:
                }
     break;
 
-  case 228:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 914 "xi-grammar.y"
+#line 924 "xi-grammar.y"
     {
                   (yyval.pname) = (yyvsp[(3) - (6)].pname);
                   (yyval.pname)->setAccelInstName((yyvsp[(5) - (6)].xstrptr));
@@ -3838,180 +3854,180 @@ yyreduce:
                }
     break;
 
-  case 229:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 922 "xi-grammar.y"
+#line 932 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (1)].pname)); }
     break;
 
-  case 230:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 924 "xi-grammar.y"
+#line 934 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (3)].pname),(yyvsp[(3) - (3)].plist)); }
     break;
 
-  case 231:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 928 "xi-grammar.y"
+#line 938 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (1)].pname)); }
     break;
 
-  case 232:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 930 "xi-grammar.y"
+#line 940 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (3)].pname),(yyvsp[(3) - (3)].plist)); }
     break;
 
-  case 233:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 934 "xi-grammar.y"
+#line 944 "xi-grammar.y"
     { (yyval.plist) = (yyvsp[(2) - (3)].plist); }
     break;
 
-  case 234:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 936 "xi-grammar.y"
+#line 946 "xi-grammar.y"
     { (yyval.plist) = new ParamList(new Parameter(0, new BuiltinType("void"))); }
     break;
 
-  case 235:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 940 "xi-grammar.y"
+#line 950 "xi-grammar.y"
     { (yyval.plist) = (yyvsp[(2) - (3)].plist); }
     break;
 
-  case 236:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 942 "xi-grammar.y"
+#line 952 "xi-grammar.y"
     { (yyval.plist) = 0; }
     break;
 
-  case 237:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 946 "xi-grammar.y"
+#line 956 "xi-grammar.y"
     { (yyval.val) = 0; }
     break;
 
-  case 238:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 948 "xi-grammar.y"
+#line 958 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(3) - (3)].strval)); }
     break;
 
-  case 239:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 952 "xi-grammar.y"
+#line 962 "xi-grammar.y"
     { (yyval.sc) = 0; }
     break;
 
-  case 240:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 954 "xi-grammar.y"
+#line 964 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSDAGENTRY, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 241:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 956 "xi-grammar.y"
+#line 966 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSDAGENTRY, (yyvsp[(2) - (3)].sc)); }
     break;
 
-  case 242:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 960 "xi-grammar.y"
+#line 970 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSLIST, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 243:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 962 "xi-grammar.y"
+#line 972 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSLIST, (yyvsp[(1) - (2)].sc), (yyvsp[(2) - (2)].sc));  }
     break;
 
-  case 244:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 966 "xi-grammar.y"
+#line 976 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SOLIST, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 245:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 968 "xi-grammar.y"
+#line 978 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SOLIST, (yyvsp[(1) - (2)].sc), (yyvsp[(2) - (2)].sc)); }
     break;
 
-  case 246:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 972 "xi-grammar.y"
+#line 982 "xi-grammar.y"
     { (yyval.sc) = 0; }
     break;
 
-  case 247:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 974 "xi-grammar.y"
+#line 984 "xi-grammar.y"
     { (yyval.sc) = (yyvsp[(3) - (4)].sc); }
     break;
 
-  case 248:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 978 "xi-grammar.y"
+#line 988 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SPUBLISHES, new SdagConstruct(SIDENT, (yyvsp[(1) - (1)].strval))); }
     break;
 
-  case 249:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 980 "xi-grammar.y"
+#line 990 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SPUBLISHES, new SdagConstruct(SIDENT, (yyvsp[(1) - (3)].strval)), (yyvsp[(3) - (3)].sc));  }
     break;
 
-  case 250:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 984 "xi-grammar.y"
+#line 994 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
-  case 251:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 986 "xi-grammar.y"
+#line 996 "xi-grammar.y"
     { (yyval.strval) = 0; }
     break;
 
-  case 252:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 990 "xi-grammar.y"
+#line 1000 "xi-grammar.y"
     {
                   (yyval.sc) = buildAtomic((yyvsp[(4) - (6)].strval), (yyvsp[(6) - (6)].sc), (yyvsp[(2) - (6)].strval));
                 }
     break;
 
-  case 253:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 994 "xi-grammar.y"
+#line 1004 "xi-grammar.y"
     {  
                   in_braces = 0;
                   if (((yyvsp[(4) - (8)].plist)->isVoid() == 0) && ((yyvsp[(4) - (8)].plist)->isMessage() == 0))
@@ -4027,217 +4043,217 @@ yyreduce:
                }
     break;
 
-  case 254:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1008 "xi-grammar.y"
+#line 1018 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, 0,  (yyvsp[(2) - (4)].entrylist)); }
     break;
 
-  case 255:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1010 "xi-grammar.y"
+#line 1020 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(3) - (3)].sc), (yyvsp[(2) - (3)].entrylist)); }
     break;
 
-  case 256:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1012 "xi-grammar.y"
+#line 1022 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(4) - (5)].sc), (yyvsp[(2) - (5)].entrylist)); }
     break;
 
-  case 257:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1014 "xi-grammar.y"
+#line 1024 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SOVERLAP,0, 0,0,0,0,(yyvsp[(3) - (4)].sc), 0); }
     break;
 
-  case 258:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1016 "xi-grammar.y"
+#line 1026 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFOR, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (11)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(5) - (11)].strval)),
                             new SdagConstruct(SINT_EXPR, (yyvsp[(7) - (11)].strval)), 0, (yyvsp[(10) - (11)].sc), 0); }
     break;
 
-  case 259:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1019 "xi-grammar.y"
+#line 1029 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFOR, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (9)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(5) - (9)].strval)), 
                         new SdagConstruct(SINT_EXPR, (yyvsp[(7) - (9)].strval)), 0, (yyvsp[(9) - (9)].sc), 0); }
     break;
 
-  case 260:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1022 "xi-grammar.y"
+#line 1032 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFORALL, 0, new SdagConstruct(SIDENT, (yyvsp[(3) - (12)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(6) - (12)].strval)), 
                             new SdagConstruct(SINT_EXPR, (yyvsp[(8) - (12)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(10) - (12)].strval)), (yyvsp[(12) - (12)].sc), 0); }
     break;
 
-  case 261:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1025 "xi-grammar.y"
+#line 1035 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFORALL, 0, new SdagConstruct(SIDENT, (yyvsp[(3) - (14)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(6) - (14)].strval)), 
                                 new SdagConstruct(SINT_EXPR, (yyvsp[(8) - (14)].strval)), new SdagConstruct(SINT_EXPR, (yyvsp[(10) - (14)].strval)), (yyvsp[(13) - (14)].sc), 0); }
     break;
 
-  case 262:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1028 "xi-grammar.y"
+#line 1038 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SIF, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (6)].strval)), (yyvsp[(6) - (6)].sc),0,0,(yyvsp[(5) - (6)].sc),0); }
     break;
 
-  case 263:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1030 "xi-grammar.y"
+#line 1040 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SIF, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (8)].strval)), (yyvsp[(8) - (8)].sc),0,0,(yyvsp[(6) - (8)].sc),0); }
     break;
 
-  case 264:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "xi-grammar.y"
+#line 1042 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SIF, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (5)].strval)), 0,0,0,(yyvsp[(5) - (5)].sc),0); }
     break;
 
-  case 265:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 1034 "xi-grammar.y"
+#line 1044 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SWHILE, 0, new SdagConstruct(SINT_EXPR, (yyvsp[(3) - (7)].strval)), 0,0,0,(yyvsp[(6) - (7)].sc),0); }
     break;
 
-  case 266:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1036 "xi-grammar.y"
+#line 1046 "xi-grammar.y"
     { (yyval.sc) = (yyvsp[(2) - (3)].sc); }
     break;
 
-  case 267:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 1038 "xi-grammar.y"
+#line 1048 "xi-grammar.y"
     { (yyval.sc) = buildAtomic((yyvsp[(2) - (3)].strval), NULL, NULL); }
     break;
 
-  case 268:
+  case 269:
 
 /* Line 1455 of yacc.c  */
-#line 1041 "xi-grammar.y"
+#line 1051 "xi-grammar.y"
     { (yyval.sc) = 0; }
     break;
 
-  case 269:
+  case 270:
 
 /* Line 1455 of yacc.c  */
-#line 1043 "xi-grammar.y"
+#line 1053 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(2) - (2)].sc),0); }
     break;
 
-  case 270:
+  case 271:
 
 /* Line 1455 of yacc.c  */
-#line 1045 "xi-grammar.y"
+#line 1055 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(3) - (4)].sc),0); }
     break;
 
-  case 271:
+  case 272:
 
 /* Line 1455 of yacc.c  */
-#line 1048 "xi-grammar.y"
+#line 1058 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (1)].strval))); }
     break;
 
-  case 272:
+  case 273:
 
 /* Line 1455 of yacc.c  */
-#line 1050 "xi-grammar.y"
+#line 1060 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (3)].strval)), (yyvsp[(3) - (3)].sc));  }
     break;
 
-  case 273:
+  case 274:
 
 /* Line 1455 of yacc.c  */
-#line 1054 "xi-grammar.y"
+#line 1064 "xi-grammar.y"
     { in_int_expr = 0; (yyval.intval) = 0; }
     break;
 
-  case 274:
+  case 275:
 
 /* Line 1455 of yacc.c  */
-#line 1058 "xi-grammar.y"
+#line 1068 "xi-grammar.y"
     { in_int_expr = 1; (yyval.intval) = 0; }
     break;
 
-  case 275:
+  case 276:
 
 /* Line 1455 of yacc.c  */
-#line 1062 "xi-grammar.y"
+#line 1072 "xi-grammar.y"
     { (yyval.entry) = new Entry(lineno, 0, 0, (yyvsp[(1) - (2)].strval), (yyvsp[(2) - (2)].plist), 0, 0, 0, 0); }
     break;
 
-  case 276:
+  case 277:
 
 /* Line 1455 of yacc.c  */
-#line 1064 "xi-grammar.y"
+#line 1074 "xi-grammar.y"
     { (yyval.entry) = new Entry(lineno, 0, 0, (yyvsp[(1) - (5)].strval), (yyvsp[(5) - (5)].plist), 0, 0, (yyvsp[(3) - (5)].strval), 0); }
     break;
 
-  case 277:
+  case 278:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "xi-grammar.y"
+#line 1078 "xi-grammar.y"
     { (yyval.entrylist) = new EntryList((yyvsp[(1) - (1)].entry)); }
     break;
 
-  case 278:
+  case 279:
 
 /* Line 1455 of yacc.c  */
-#line 1070 "xi-grammar.y"
+#line 1080 "xi-grammar.y"
     { (yyval.entrylist) = new EntryList((yyvsp[(1) - (3)].entry),(yyvsp[(3) - (3)].entrylist)); }
     break;
 
-  case 279:
+  case 280:
 
 /* Line 1455 of yacc.c  */
-#line 1074 "xi-grammar.y"
+#line 1084 "xi-grammar.y"
     { in_bracket=1; }
     break;
 
-  case 280:
+  case 281:
 
 /* Line 1455 of yacc.c  */
-#line 1077 "xi-grammar.y"
+#line 1087 "xi-grammar.y"
     { in_bracket=0; }
     break;
 
-  case 281:
+  case 282:
 
 /* Line 1455 of yacc.c  */
-#line 1081 "xi-grammar.y"
+#line 1091 "xi-grammar.y"
     { if (!macroDefined((yyvsp[(2) - (2)].strval), 1)) in_comment = 1; }
     break;
 
-  case 282:
+  case 283:
 
 /* Line 1455 of yacc.c  */
-#line 1085 "xi-grammar.y"
+#line 1095 "xi-grammar.y"
     { if (!macroDefined((yyvsp[(2) - (2)].strval), 0)) in_comment = 1; }
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 4241 "y.tab.c"
+#line 4257 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4449,7 +4465,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1088 "xi-grammar.y"
+#line 1098 "xi-grammar.y"
 
 void yyerror(const char *mesg)
 {
index 6a24f25b19d63631f3179af34f2bf17ed854bc4b..e590377fe217473f9d96abb2cc91244f5e12e65e 100644 (file)
@@ -236,6 +236,16 @@ Construct  : OptExtern '{' ConstructList '}' OptSemiColon
         { $2->setExtern($1); $$ = $2; }
         | OptExtern Template
         { $2->setExtern($1); $$ = $2; }
+        | EXTERN ENTRY EReturn QualNamedType Name OptTParams EParameters ';'
+        {
+          Entry *e = new Entry(lineno, 0, $3, $5, $7, 0, 0, 0, 0, 0);
+          int isExtern = 1;
+          e->setExtern(isExtern);
+          e->targs = $6;
+          e->label = new XStr;
+          $4->print(*e->label);
+          $$ = e;
+        }
         | HashIFComment
         { $$ = NULL; }
         | HashIFDefComment
index efc5c3c9cc4e0d89542061d8a8cb48217280bcd7..1891438469dba0c4f5860587146c2cd62682c86a 100644 (file)
@@ -2940,7 +2940,7 @@ void ParamList::checkParamList(){
 }
 
 Entry::Entry(int l, int a, Type *r, const char *n, ParamList *p, Value *sz, SdagConstruct *sc, const char *e, int connect, ParamList *connectPList) :
-      attribs(a), retType(r), stacksize(sz), sdagCon(sc), name((char *)n), intExpr(e), param(p), connectParam(connectPList), isConnect(connect)
+      attribs(a), retType(r), stacksize(sz), sdagCon(sc), name((char *)n), targs(0), intExpr(e), param(p), connectParam(connectPList), isConnect(connect)
 {
   line=l; container=NULL;
   entryCount=-1;
@@ -4333,6 +4333,9 @@ void Entry::genIndexDecls(XStr& str)
 
 void Entry::genDecls(XStr& str)
 {
+  if (external)
+    return;
+
   if(isConstructor() && retType && !retType->isVoid())
     die("Constructors cannot return a value",line);
 
@@ -4601,6 +4604,8 @@ void Entry::genCall(XStr& str, const XStr &preCall, bool redn_wrapper)
 
 void Entry::genDefs(XStr& str)
 {
+  if (external)
+    return;
   XStr containerType=container->baseName();
   XStr preMarshall,preCall,postCall;
 
@@ -4851,6 +4856,15 @@ void Entry::genReg(XStr& str)
   if (tspec)
     return;
 
+  if (external) {
+    str << "  CkIndex_" << label << "::idx_" << name;
+    if (targs)
+        str << "< " << targs << " >";
+    str << "( static_cast< "
+        << retType << " (" << label << "::*)(" << paramType(0,0) << ") >(NULL) );\n";
+    return;
+  }
+
   str << "  // REG: "<<*this;
   str << "  " << epIdx(0) << ";\n";
   if (isReductionTarget())
index da5e52962eb1de81318a1e508085d3aa27e8f7ff..df8439e12dfb10d1d06e58b49af4e9c2dc62f644 100644 (file)
@@ -971,6 +971,7 @@ class Entry : public Member {
   public:
     XStr *label;
     char *name;
+    TParamList *targs;
 
     // SDAG support
     SdagConstruct *sdagCon;
index 7a75675026e989665bc195e7367d25cea6bcdca2..2f3bcb41d9fbfa04842658d779d64c412188fbba 100644 (file)
@@ -13,14 +13,6 @@ typedef count< std::less<libdtype> > cntType;
 // Temporary initproc to register the instantiated EPs
 void register_instantiations()
 {
-    // Useless temporary variables just to feed the CkIndex functions
-    avg avger;
-    CkReduction::reducerType foo;
-    CkCallback bar;
-
-    CkIndex_libArray::idx_doSomething< cntType > (
-        static_cast<void (libArray::*) (const cntType&, const CkReduction::reducerType&, const CkCallback&)>(NULL));
-    CkIndex_libArray::doSomething(avger, foo, bar);
     CkReductionTarget(pgm, acceptResults<avg>);
     CkReductionTarget(pgm, acceptResults< cntType >);
 };
index acbed857ed12707ed95358e687425ff04295fed6..2c5da2d7b15b755e3a9300cd6b097e3a48b0bdd8 100644 (file)
@@ -3,6 +3,9 @@ mainmodule client  {
   include "utils.h";
 
   initproc register_instantiations();
+  extern entry void libArray doSomething(cntType&, CkReduction::reducerType&, CkCallback&);
+  extern entry void libArray doSomething(avg&, CkReduction::reducerType&, CkCallback&);
+
   initproc register_reducers();
 
   mainchare pgm {