Merge branch 'charm' of charmgit:charm into charm
authorAaron Becker <akbecker@gmail.com>
Wed, 1 Dec 2010 19:28:11 +0000 (13:28 -0600)
committerAaron Becker <akbecker@gmail.com>
Wed, 1 Dec 2010 19:28:11 +0000 (13:28 -0600)
src/xlat-i/xi-grammar.tab.C
src/xlat-i/xi-grammar.tab.h
src/xlat-i/xi-grammar.y
src/xlat-i/xi-scan.C
src/xlat-i/xi-scan.l
src/xlat-i/xi-symbol.C
src/xlat-i/xi-symbol.h

index 1954562144f076b0f38a1c2e79247d97f8ad82ea..3971da4d523c81f3a3fcf8218c97b7483cb2877e 100644 (file)
      READWRITE = 324,
      WRITEONLY = 325,
      ACCELBLOCK = 326,
-     MEMCRITICAL = 327
+     MEMCRITICAL = 327,
+     REDUCTIONTARGET = 328
    };
 #endif
 /* Tokens.  */
 #define WRITEONLY 325
 #define ACCELBLOCK 326
 #define MEMCRITICAL 327
+#define REDUCTIONTARGET 328
 
 
 
@@ -294,8 +296,8 @@ typedef union YYSTYPE
   XStr* xstrptr;
   AccelBlock* accelBlock;
 }
-/* Line 187 of yacc.c.  */
-#line 299 "y.tab.c"
+/* Line 193 of yacc.c.  */
+#line 301 "y.tab.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -308,7 +310,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 312 "y.tab.c"
+#line 314 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -358,7 +360,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -523,20 +525,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  9
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   715
+#define YYLAST   718
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  89
+#define YYNTOKENS  90
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  110
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  280
+#define YYNRULES  281
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  587
+#define YYNSTATES  588
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   327
+#define YYMAXUTOK   328
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -547,16 +549,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    83,     2,
-      81,    82,    80,     2,    77,    87,    88,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    74,    73,
-      78,    86,    79,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    84,     2,
+      82,    83,    81,     2,    78,    88,    89,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    75,    74,
+      79,    87,    80,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    84,     2,    85,     2,     2,     2,     2,     2,     2,
+       2,    85,     2,    86,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    75,     2,    76,     2,     2,     2,     2,
+       2,     2,     2,    76,     2,    77,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -576,7 +578,7 @@ static const yytype_uint8 yytranslate[] =
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72
+      65,    66,    67,    68,    69,    70,    71,    72,    73
 };
 
 #if YYDEBUG
@@ -603,155 +605,155 @@ static const yytype_uint16 yyprhs[] =
      511,   518,   522,   529,   539,   549,   551,   555,   557,   560,
      562,   570,   576,   589,   595,   598,   600,   602,   603,   607,
      609,   613,   615,   617,   619,   621,   623,   625,   627,   629,
-     631,   633,   635,   637,   640,   642,   644,   646,   648,   649,
-     651,   655,   656,   658,   664,   670,   676,   681,   685,   687,
-     689,   691,   695,   700,   704,   706,   708,   710,   712,   717,
-     721,   726,   731,   736,   740,   748,   754,   761,   763,   767,
-     769,   773,   777,   780,   784,   787,   788,   792,   793,   795,
-     799,   801,   804,   806,   809,   810,   815,   817,   821,   823,
-     824,   831,   840,   845,   849,   855,   860,   872,   882,   895,
-     910,   917,   926,   932,   940,   944,   948,   949,   952,   957,
-     959,   963,   965,   967,   970,   976,   978,   982,   984,   986,
-     989
+     631,   633,   635,   637,   640,   642,   644,   646,   648,   650,
+     651,   653,   657,   658,   660,   666,   672,   678,   683,   687,
+     689,   691,   693,   697,   702,   706,   708,   710,   712,   714,
+     719,   723,   728,   733,   738,   742,   750,   756,   763,   765,
+     769,   771,   775,   779,   782,   786,   789,   790,   794,   795,
+     797,   801,   803,   806,   808,   811,   812,   817,   819,   823,
+     825,   826,   833,   842,   847,   851,   857,   862,   874,   884,
+     897,   912,   919,   928,   934,   942,   946,   950,   951,   954,
+     959,   961,   965,   967,   969,   972,   978,   980,   984,   986,
+     988,   991
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      90,     0,    -1,    91,    -1,    -1,    96,    91,    -1,    -1,
-       5,    -1,    -1,    73,    -1,    55,    -1,    55,    -1,    95,
-      74,    74,    55,    -1,     3,    94,    97,    -1,     4,    94,
-      97,    -1,    73,    -1,    75,    98,    76,    93,    -1,    -1,
-      99,    98,    -1,    92,    75,    98,    76,    93,    -1,    53,
-      94,    75,    98,    76,    -1,    54,    53,    95,    73,    -1,
-      54,    95,    73,    -1,    92,    96,    -1,    92,   154,    -1,
-      92,   133,    73,    -1,    92,   136,    -1,    92,   137,    -1,
-      92,   138,    -1,    92,   140,    -1,    92,   151,    -1,   197,
-      -1,   198,    -1,   161,    -1,   112,    -1,    56,    -1,    57,
-      -1,   100,    -1,   100,    77,   101,    -1,    -1,   101,    -1,
-      -1,    78,   102,    79,    -1,    61,    -1,    62,    -1,    63,
+      91,     0,    -1,    92,    -1,    -1,    97,    92,    -1,    -1,
+       5,    -1,    -1,    74,    -1,    55,    -1,    55,    -1,    96,
+      75,    75,    55,    -1,     3,    95,    98,    -1,     4,    95,
+      98,    -1,    74,    -1,    76,    99,    77,    94,    -1,    -1,
+     100,    99,    -1,    93,    76,    99,    77,    94,    -1,    53,
+      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,    94,   103,    -1,    95,   103,
-      -1,   104,    -1,   106,    -1,   107,    80,    -1,   108,    80,
-      -1,   109,    80,    -1,   111,    81,    80,    94,    82,    81,
-     177,    82,    -1,   107,    -1,   108,    -1,   109,    -1,   110,
-      -1,    36,   111,    -1,   111,    36,    -1,   111,    83,    -1,
-     111,    -1,    56,    -1,    95,    -1,    84,   113,    85,    -1,
-      -1,   114,   115,    -1,     6,   112,    95,   115,    -1,     6,
-      16,   107,    80,    94,    -1,    -1,    35,    -1,    -1,    84,
-     120,    85,    -1,   121,    -1,   121,    77,   120,    -1,    37,
-      -1,    38,    -1,    -1,    84,   123,    85,    -1,   128,    -1,
-     128,    77,   123,    -1,    -1,    57,    -1,    51,    -1,    -1,
-      84,   127,    85,    -1,   125,    -1,   125,    77,   127,    -1,
-      30,    -1,    51,    -1,    -1,    17,    -1,    -1,    84,    85,
-      -1,   129,   112,    94,   130,    73,    -1,   131,    -1,   131,
-     132,    -1,    16,   119,   105,    -1,    16,   119,   105,    75,
-     132,    76,    -1,    -1,    74,   135,    -1,   106,    -1,   106,
-      77,   135,    -1,    11,   122,   105,   134,   152,    -1,    12,
-     122,   105,   134,   152,    -1,    13,   122,   105,   134,   152,
-      -1,    14,   122,   105,   134,   152,    -1,    84,    56,    94,
-      85,    -1,    84,    94,    85,    -1,    15,   126,   139,   105,
-     134,   152,    -1,    15,   139,   126,   105,   134,   152,    -1,
-      11,   122,    94,   134,   152,    -1,    12,   122,    94,   134,
-     152,    -1,    13,   122,    94,   134,   152,    -1,    14,   122,
-      94,   134,   152,    -1,    15,   139,    94,   134,   152,    -1,
-      16,   119,    94,    73,    -1,    16,   119,    94,    75,   132,
-      76,    73,    -1,    -1,    86,   112,    -1,    -1,    86,    56,
-      -1,    86,    57,    -1,    18,    94,   146,    -1,   110,   147,
-      -1,   112,    94,   147,    -1,   148,    -1,   148,    77,   149,
-      -1,    22,    78,   149,    79,    -1,   150,   141,    -1,   150,
-     142,    -1,   150,   143,    -1,   150,   144,    -1,   150,   145,
-      -1,    73,    -1,    75,   153,    76,    93,    -1,    -1,   159,
-     153,    -1,   116,    73,    -1,   117,    73,    -1,   156,    73,
-      -1,   155,    73,    -1,    10,   157,    73,    -1,    19,   158,
-      73,    -1,    18,    94,    73,    -1,     8,   118,    95,    -1,
-       8,   118,    95,    81,   118,    82,    -1,     8,   118,    95,
-      78,   101,    79,    81,   118,    82,    -1,     7,   118,    95,
-      -1,     7,   118,    95,    81,   118,    82,    -1,     9,   118,
-      95,    -1,     9,   118,    95,    81,   118,    82,    -1,     9,
-     118,    95,    78,   101,    79,    81,   118,    82,    -1,     9,
-      84,    68,    85,   118,    95,    81,   118,    82,    -1,   106,
-      -1,   106,    77,   157,    -1,    57,    -1,   160,    73,    -1,
-     154,    -1,    39,   163,   162,    94,   179,   181,   182,    -1,
-      39,   163,    94,   179,   182,    -1,    39,    84,    68,    85,
-      35,    94,   179,   180,   170,   168,   171,    94,    -1,    71,
-     170,   168,   171,    73,    -1,    71,    73,    -1,    35,    -1,
-     108,    -1,    -1,    84,   164,    85,    -1,   165,    -1,   165,
-      77,   164,    -1,    21,    -1,    23,    -1,    24,    -1,    25,
+      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,
+     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,   124,    -1,
-      72,    -1,    57,    -1,    56,    -1,    95,    -1,    -1,    58,
-      -1,    58,    77,   167,    -1,    -1,    58,    -1,    58,    84,
-     168,    85,   168,    -1,    58,    75,   168,    76,   168,    -1,
-      58,    81,   167,    82,   168,    -1,    81,   168,    82,   168,
-      -1,   112,    94,    84,    -1,    75,    -1,    76,    -1,   112,
-      -1,   112,    94,   129,    -1,   112,    94,    86,   166,    -1,
-     169,   168,    85,    -1,     6,    -1,    69,    -1,    70,    -1,
-      94,    -1,   174,    87,    79,    94,    -1,   174,    88,    94,
-      -1,   174,    84,   174,    85,    -1,   174,    84,    56,    85,
-      -1,   174,    81,   174,    82,    -1,   169,   168,    85,    -1,
-     173,    74,   112,    94,    78,   174,    79,    -1,   112,    94,
-      78,   174,    79,    -1,   173,    74,   175,    78,   174,    79,
-      -1,   172,    -1,   172,    77,   177,    -1,   176,    -1,   176,
-      77,   178,    -1,    81,   177,    82,    -1,    81,    82,    -1,
-      84,   178,    85,    -1,    84,    85,    -1,    -1,    20,    86,
-      56,    -1,    -1,   188,    -1,    75,   183,    76,    -1,   188,
-      -1,   188,   183,    -1,   188,    -1,   188,   183,    -1,    -1,
-      50,    81,   186,    82,    -1,    55,    -1,    55,    77,   186,
-      -1,    57,    -1,    -1,    45,   187,   170,   168,   171,   185,
-      -1,    49,    81,    55,   179,    82,   170,   168,    76,    -1,
-      43,   194,    75,    76,    -1,    43,   194,   188,    -1,    43,
-     194,    75,   183,    76,    -1,    44,    75,   184,    76,    -1,
-      40,   192,   168,    73,   168,    73,   168,   191,    75,   183,
-      76,    -1,    40,   192,   168,    73,   168,    73,   168,   191,
-     188,    -1,    41,    84,    55,    85,   192,   168,    74,   168,
-      77,   168,   191,   188,    -1,    41,    84,    55,    85,   192,
-     168,    74,   168,    77,   168,   191,    75,   183,    76,    -1,
-      47,   192,   168,   191,   188,   189,    -1,    47,   192,   168,
-     191,    75,   183,    76,   189,    -1,    42,   192,   168,   191,
-     188,    -1,    42,   192,   168,   191,    75,   183,    76,    -1,
-      46,   190,    73,    -1,   170,   168,   171,    -1,    -1,    48,
-     188,    -1,    48,    75,   183,    76,    -1,    55,    -1,    55,
-      77,   190,    -1,    82,    -1,    81,    -1,    55,   179,    -1,
-      55,   195,   168,   196,   179,    -1,   193,    -1,   193,    77,
-     194,    -1,    84,    -1,    85,    -1,    59,    94,    -1,    60,
-      94,    -1
+      -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.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   153,   153,   158,   161,   166,   167,   172,   173,   177,
-     181,   183,   191,   195,   202,   204,   209,   210,   214,   216,
-     218,   220,   222,   224,   226,   228,   230,   232,   234,   236,
-     238,   240,   242,   246,   248,   250,   254,   256,   261,   262,
-     267,   268,   272,   274,   276,   278,   280,   282,   284,   286,
-     288,   290,   292,   294,   296,   298,   300,   304,   305,   312,
-     314,   318,   322,   324,   328,   332,   334,   336,   338,   341,
-     343,   347,   349,   353,   355,   359,   364,   365,   369,   373,
-     378,   379,   384,   385,   395,   397,   401,   403,   408,   409,
-     413,   415,   420,   421,   425,   430,   431,   435,   437,   441,
-     443,   448,   449,   453,   454,   457,   461,   463,   467,   469,
-     474,   475,   479,   481,   485,   487,   491,   495,   499,   505,
-     509,   511,   515,   517,   521,   525,   529,   533,   535,   540,
-     541,   546,   547,   549,   553,   555,   557,   561,   563,   567,
-     571,   573,   575,   577,   579,   583,   585,   590,   608,   612,
-     614,   616,   617,   619,   621,   623,   627,   629,   631,   637,
-     640,   645,   647,   649,   655,   663,   665,   668,   672,   674,
-     678,   689,   700,   718,   720,   724,   726,   731,   732,   736,
-     738,   742,   744,   746,   748,   750,   752,   754,   756,   758,
-     760,   762,   764,   766,   768,   772,   774,   776,   781,   782,
-     784,   793,   794,   796,   802,   808,   814,   822,   829,   837,
-     844,   846,   848,   850,   857,   858,   859,   862,   863,   864,
-     865,   872,   878,   887,   894,   900,   906,   914,   916,   920,
-     922,   926,   928,   932,   934,   939,   940,   945,   946,   948,
-     952,   954,   958,   960,   965,   966,   970,   972,   976,   979,
-     982,   986,  1000,  1002,  1004,  1006,  1008,  1011,  1014,  1017,
-    1020,  1022,  1024,  1026,  1028,  1030,  1034,  1035,  1037,  1040,
-    1042,  1046,  1050,  1054,  1062,  1070,  1072,  1076,  1079,  1083,
-    1087
+       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,
+     679,   690,   701,   719,   721,   725,   727,   732,   733,   737,
+     739,   743,   745,   747,   749,   751,   753,   755,   757,   759,
+     761,   763,   765,   767,   769,   771,   775,   777,   779,   784,
+     785,   787,   796,   797,   799,   805,   811,   817,   825,   832,
+     840,   847,   849,   851,   853,   860,   861,   862,   865,   866,
+     867,   868,   875,   881,   890,   897,   903,   909,   917,   919,
+     923,   925,   929,   931,   935,   937,   942,   943,   948,   949,
+     951,   955,   957,   961,   963,   968,   969,   973,   975,   979,
+     982,   985,   989,  1003,  1005,  1007,  1009,  1011,  1014,  1017,
+    1020,  1023,  1025,  1027,  1029,  1031,  1033,  1037,  1038,  1040,
+    1043,  1045,  1049,  1053,  1057,  1065,  1073,  1075,  1079,  1082,
+    1086,  1090
 };
 #endif
 
@@ -771,19 +773,19 @@ static const char *const yytname[] =
   "PYTHON", "LOCAL", "NAMESPACE", "USING", "IDENT", "NUMBER", "LITERAL",
   "CPROGRAM", "HASHIF", "HASHIFDEF", "INT", "LONG", "SHORT", "CHAR",
   "FLOAT", "DOUBLE", "UNSIGNED", "ACCEL", "READWRITE", "WRITEONLY",
-  "ACCELBLOCK", "MEMCRITICAL", "';'", "':'", "'{'", "'}'", "','", "'<'",
-  "'>'", "'*'", "'('", "')'", "'&'", "'['", "']'", "'='", "'-'", "'.'",
-  "$accept", "File", "ModuleEList", "OptExtern", "OptSemiColon", "Name",
-  "QualName", "Module", "ConstructEList", "ConstructList", "Construct",
-  "TParam", "TParamList", "TParamEList", "OptTParams", "BuiltinType",
-  "NamedType", "QualNamedType", "SimpleType", "OnePtrType", "PtrType",
-  "FuncType", "BaseType", "Type", "ArrayDim", "Dim", "DimList", "Readonly",
-  "ReadonlyMsg", "OptVoid", "MAttribs", "MAttribList", "MAttrib",
-  "CAttribs", "CAttribList", "PythonOptions", "ArrayAttrib",
-  "ArrayAttribs", "ArrayAttribList", "CAttrib", "OptConditional",
-  "MsgArray", "Var", "VarList", "Message", "OptBaseList", "BaseList",
-  "Chare", "Group", "NodeGroup", "ArrayIndexType", "Array", "TChare",
-  "TGroup", "TNodeGroup", "TArray", "TMessage", "OptTypeInit",
+  "ACCELBLOCK", "MEMCRITICAL", "REDUCTIONTARGET", "';'", "':'", "'{'",
+  "'}'", "','", "'<'", "'>'", "'*'", "'('", "')'", "'&'", "'['", "']'",
+  "'='", "'-'", "'.'", "$accept", "File", "ModuleEList", "OptExtern",
+  "OptSemiColon", "Name", "QualName", "Module", "ConstructEList",
+  "ConstructList", "Construct", "TParam", "TParamList", "TParamEList",
+  "OptTParams", "BuiltinType", "NamedType", "QualNamedType", "SimpleType",
+  "OnePtrType", "PtrType", "FuncType", "BaseType", "Type", "ArrayDim",
+  "Dim", "DimList", "Readonly", "ReadonlyMsg", "OptVoid", "MAttribs",
+  "MAttribList", "MAttrib", "CAttribs", "CAttribList", "PythonOptions",
+  "ArrayAttrib", "ArrayAttribs", "ArrayAttribList", "CAttrib",
+  "OptConditional", "MsgArray", "Var", "VarList", "Message", "OptBaseList",
+  "BaseList", "Chare", "Group", "NodeGroup", "ArrayIndexType", "Array",
+  "TChare", "TGroup", "TNodeGroup", "TArray", "TMessage", "OptTypeInit",
   "OptNameInit", "TVar", "TVarList", "TemplateSpec", "Template",
   "MemberEList", "MemberList", "NonEntryMember", "InitNode", "InitProc",
   "PUPableClass", "IncludeFile", "Member", "Entry", "AccelBlock",
@@ -811,43 +813,43 @@ static const yytype_uint16 yytoknum[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,    59,    58,   123,   125,    44,    60,    62,
-      42,    40,    41,    38,    91,    93,    61,    45,    46
+     325,   326,   327,   328,    59,    58,   123,   125,    44,    60,
+      62,    42,    40,    41,    38,    91,    93,    61,    45,    46
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    89,    90,    91,    91,    92,    92,    93,    93,    94,
-      95,    95,    96,    96,    97,    97,    98,    98,    99,    99,
-      99,    99,    99,    99,    99,    99,    99,    99,    99,    99,
-      99,    99,    99,   100,   100,   100,   101,   101,   102,   102,
-     103,   103,   104,   104,   104,   104,   104,   104,   104,   104,
-     104,   104,   104,   104,   104,   104,   104,   105,   106,   107,
-     107,   108,   109,   109,   110,   111,   111,   111,   111,   111,
-     111,   112,   112,   113,   113,   114,   115,   115,   116,   117,
-     118,   118,   119,   119,   120,   120,   121,   121,   122,   122,
-     123,   123,   124,   124,   125,   126,   126,   127,   127,   128,
-     128,   129,   129,   130,   130,   131,   132,   132,   133,   133,
-     134,   134,   135,   135,   136,   136,   137,   138,   139,   139,
-     140,   140,   141,   141,   142,   143,   144,   145,   145,   146,
-     146,   147,   147,   147,   148,   148,   148,   149,   149,   150,
-     151,   151,   151,   151,   151,   152,   152,   153,   153,   154,
-     154,   154,   154,   154,   154,   154,   155,   155,   155,   155,
-     155,   156,   156,   156,   156,   157,   157,   158,   159,   159,
-     160,   160,   160,   161,   161,   162,   162,   163,   163,   164,
-     164,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   165,   165,   165,   165,   166,   166,   166,   167,   167,
-     167,   168,   168,   168,   168,   168,   168,   169,   170,   171,
-     172,   172,   172,   172,   173,   173,   173,   174,   174,   174,
-     174,   174,   174,   175,   176,   176,   176,   177,   177,   178,
-     178,   179,   179,   180,   180,   181,   181,   182,   182,   182,
-     183,   183,   184,   184,   185,   185,   186,   186,   187,   187,
-     188,   188,   188,   188,   188,   188,   188,   188,   188,   188,
-     188,   188,   188,   188,   188,   188,   189,   189,   189,   190,
-     190,   191,   192,   193,   193,   194,   194,   195,   196,   197,
-     198
+       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,
+     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.  */
@@ -872,16 +874,16 @@ static const yytype_uint8 yyr2[] =
        6,     3,     6,     9,     9,     1,     3,     1,     2,     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,     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
+       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
@@ -892,62 +894,62 @@ 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,   279,   280,   174,   208,   201,     0,    80,    80,    80,
+       0,   280,   281,   174,   209,   202,     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,
-     202,   201,     0,     0,    56,     0,    42,    43,    44,    45,
+     203,   202,     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,   201,   198,   201,     0,   209,
+       8,    15,     0,    20,     0,   202,   199,   202,     0,   210,
        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,   199,     0,     0,   201,   173,     0,
+       0,    19,    11,     0,   200,     0,     0,   202,   173,     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,   201,
-     198,   201,   201,   206,    79,     0,    41,     0,    73,    74,
+       0,   139,    18,   110,   110,   110,   110,   110,     0,   202,
+     199,   202,   202,   207,    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,   204,
-     200,   205,   203,    37,     0,    75,   160,     0,   157,     0,
+     136,   138,     0,     0,     0,     0,     0,   127,   101,   205,
+     201,   206,   204,    37,     0,    75,   160,     0,   157,     0,
        0,   162,     0,   177,     0,   169,   147,     0,   120,   121,
        0,   107,   109,   130,   122,   123,   124,   125,   126,     0,
        0,    80,    80,    80,   113,     0,     0,     7,   148,   168,
-     103,     0,   210,   201,   227,     0,     0,     0,     0,   181,
+     103,     0,   211,   202,   228,     0,     0,     0,     0,   181,
      182,   183,   184,   189,   190,   191,   185,   186,   187,   188,
-      92,   192,     0,   194,     0,   179,    56,    10,     0,     0,
-     176,     0,   146,     0,     0,   128,   101,     0,     0,    64,
-     158,   164,   163,    93,   193,     0,   178,     0,     0,   237,
-       0,   104,   105,   207,     0,   211,   213,   228,     0,   180,
-     232,     0,     0,     0,     0,     0,     0,   249,     0,     0,
-       0,   208,   201,   171,   238,   235,   196,   195,   197,   212,
-       0,   231,   272,   201,     0,   201,     0,   275,     0,     0,
-     248,     0,   269,     0,   201,     0,     0,   240,     0,     0,
-     237,     0,     0,     0,     0,   277,   273,   201,     0,   208,
-     253,     0,   242,   201,     0,   264,     0,     0,   239,   241,
-     265,     0,   170,     0,     0,   201,     0,   271,     0,     0,
-     276,   252,     0,   255,   243,     0,   270,     0,     0,   236,
-     214,   215,   216,   234,     0,     0,   229,     0,   201,     0,
-     201,   208,   262,   278,     0,   254,   244,   208,   266,     0,
-       0,     0,     0,   233,     0,   201,     0,     0,   274,     0,
-     250,     0,     0,   260,   201,     0,     0,   201,     0,   230,
-       0,     0,   201,   263,     0,   266,   208,   267,     0,   217,
-       0,     0,     0,     0,   172,     0,     0,   246,     0,   261,
-       0,   251,   225,     0,     0,     0,     0,     0,   223,     0,
-     208,   257,   201,     0,   245,   268,     0,     0,     0,     0,
-     219,     0,   226,     0,     0,   247,   222,   221,   220,   218,
-     224,   256,     0,   208,   258,     0,   259
+      92,   192,     0,   194,   195,     0,   179,    56,    10,     0,
+       0,   176,     0,   146,     0,     0,   128,   101,     0,     0,
+      64,   158,   164,   163,    93,   193,     0,   178,     0,     0,
+     238,     0,   104,   105,   208,     0,   212,   214,   229,     0,
+     180,   233,     0,     0,     0,     0,     0,     0,   250,     0,
+       0,     0,   209,   202,   171,   239,   236,   197,   196,   198,
+     213,     0,   232,   273,   202,     0,   202,     0,   276,     0,
+       0,   249,     0,   270,     0,   202,     0,     0,   241,     0,
+       0,   238,     0,     0,     0,     0,   278,   274,   202,     0,
+     209,   254,     0,   243,   202,     0,   265,     0,     0,   240,
+     242,   266,     0,   170,     0,     0,   202,     0,   272,     0,
+       0,   277,   253,     0,   256,   244,     0,   271,     0,     0,
+     237,   215,   216,   217,   235,     0,     0,   230,     0,   202,
+       0,   202,   209,   263,   279,     0,   255,   245,   209,   267,
+       0,     0,     0,     0,   234,     0,   202,     0,     0,   275,
+       0,   251,     0,     0,   261,   202,     0,     0,   202,     0,
+     231,     0,     0,   202,   264,     0,   267,   209,   268,     0,
+     218,     0,     0,     0,     0,   172,     0,     0,   247,     0,
+     262,     0,   252,   226,     0,     0,     0,     0,     0,   224,
+       0,   209,   258,   202,     0,   246,   269,     0,     0,     0,
+       0,   220,     0,   227,     0,     0,   248,   223,   222,   221,
+     219,   225,   257,     0,   209,   259,     0,   260
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -956,96 +958,96 @@ 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,   394,   176,   105,   177,   167,
-     293,   384,   294,   295,    54,   233,   280,    55,    56,    57,
+     108,   184,   185,   100,   166,   395,   176,   105,   177,   167,
+     293,   385,   294,   295,    54,   233,   280,    55,    56,    57,
      106,    58,   123,   124,   125,   126,   127,   297,   248,   192,
      193,    59,    60,   283,   324,   325,    62,    63,    98,   111,
-     326,   327,    24,   381,   346,   374,   375,   429,   205,    72,
-     353,   422,   140,   354,   495,   540,   528,   496,   355,   497,
-     399,   474,   450,   423,   446,   461,   520,   548,   441,   447,
-     523,   443,   478,   433,   437,   438,   457,   504,    25,    26
+     326,   327,    24,   382,   346,   375,   376,   430,   205,    72,
+     353,   423,   140,   354,   496,   541,   529,   497,   355,   498,
+     400,   475,   451,   424,   447,   462,   521,   549,   442,   448,
+     524,   444,   479,   434,   438,   439,   458,   505,    25,    26
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -458
+#define YYPACT_NINF -459
 static const yytype_int16 yypact[] =
 {
-      38,    -5,    -5,    86,  -458,    38,  -458,    21,    21,  -458,
-    -458,  -458,   187,  -458,  -458,  -458,    -5,    67,    -5,    -5,
-     116,   217,    30,   187,  -458,  -458,  -458,    44,    83,  -458,
-     175,  -458,  -458,  -458,  -458,   -22,   348,   109,   109,   -12,
-      83,    63,    63,    63,    63,    74,    85,    -5,   136,   123,
-     187,  -458,   143,   149,   161,  -458,  -458,  -458,  -458,   439,
-    -458,  -458,   171,   183,   196,  -458,   187,   205,  -458,   186,
-      20,   -22,   204,   588,  -458,   567,  -458,     5,  -458,  -458,
-    -458,  -458,   371,    75,  -458,  -458,   209,   213,   216,  -458,
-      -6,    83,  -458,    83,    83,   239,    83,   227,   249,     1,
-      -5,    -5,    -5,    -5,   124,   244,   247,   289,    -5,   277,
-    -458,   281,   364,   280,  -458,  -458,  -458,    63,    63,    63,
-      63,   244,    85,  -458,  -458,  -458,  -458,  -458,  -458,  -458,
-    -458,  -458,   282,  -458,   307,   -22,   315,   -22,   295,  -458,
-     298,   306,    -2,  -458,  -458,  -458,   286,  -458,  -458,   554,
-    -458,  -458,  -458,  -458,  -458,   317,  -458,   -37,    40,   -13,
-     323,   137,    83,  -458,  -458,  -458,   335,   344,   358,   349,
-     349,   349,   349,  -458,    -5,   353,   363,   373,   310,    -5,
-     408,    -5,  -458,  -458,   375,   384,   387,  -458,  -458,    -5,
-      99,    -5,   386,   388,   196,    -5,    -5,    -5,    -5,    -5,
-      -5,  -458,  -458,   390,   392,   389,   385,   -22,  -458,    -5,
-    -458,  -458,  -458,  -458,   395,  -458,   396,  -458,    -5,   313,
-     393,  -458,   109,   554,   109,   109,   554,   109,  -458,  -458,
-       1,  -458,    83,   170,   170,   170,   170,   391,  -458,   408,
-    -458,   349,   349,  -458,   289,   457,   404,   345,  -458,   427,
-     364,  -458,  -458,   349,   349,   349,   349,   349,   182,   -22,
-     315,   -22,   -22,  -458,  -458,   554,  -458,   397,  -458,   420,
-     430,  -458,   434,   399,   436,    83,   440,   438,  -458,   444,
-    -458,  -458,   133,  -458,  -458,  -458,  -458,  -458,  -458,   170,
-     170,  -458,  -458,   567,    12,   446,   567,  -458,  -458,  -458,
-    -458,  -458,   170,   170,   170,   170,   170,  -458,   457,  -458,
-    -458,  -458,  -458,  -458,   445,  -458,  -458,   447,  -458,   100,
-     450,  -458,    83,   443,   467,  -458,   133,   471,  -458,  -458,
-      -5,  -458,  -458,  -458,  -458,  -458,  -458,  -458,  -458,   469,
-     567,   109,   109,   109,  -458,   287,   601,   196,  -458,  -458,
-     462,   474,    -5,   -22,   472,   441,   466,   468,   483,  -458,
-    -458,  -458,  -458,  -458,  -458,  -458,  -458,  -458,  -458,  -458,
-     494,  -458,   502,  -458,   506,   477,   522,   512,   513,   209,
-    -458,    -5,  -458,   510,   523,  -458,    16,   514,   567,  -458,
-    -458,  -458,  -458,  -458,  -458,   562,  -458,   309,   382,   347,
-     513,  -458,  -458,  -458,   157,  -458,  -458,  -458,    -5,  -458,
-    -458,   516,   519,   521,   519,   546,   531,   550,   553,   519,
-     532,   442,   -22,  -458,  -458,   592,  -458,  -458,   420,  -458,
-     513,  -458,  -458,   -22,   569,   -22,     9,   548,   455,   442,
-    -458,   551,   558,   564,   -22,   572,   563,   442,   204,   552,
-     347,   556,   568,   557,   565,  -458,  -458,   -22,   546,   241,
-    -458,   570,   442,   -22,   553,  -458,   565,   513,  -458,  -458,
-    -458,   589,  -458,   101,   551,   -22,   519,  -458,   465,   559,
-    -458,  -458,   581,  -458,  -458,   204,  -458,   492,   566,  -458,
-    -458,  -458,  -458,  -458,    -5,   584,   582,   575,   -22,   596,
-     -22,   442,  -458,  -458,   513,  -458,   611,   442,   622,   551,
-     593,   567,   236,  -458,   204,   -22,   598,   597,  -458,   594,
-    -458,   600,   517,  -458,   -22,    -5,    -5,   -22,   599,  -458,
-      -5,   565,   -22,  -458,   619,   622,   442,  -458,   602,  -458,
-     180,    46,   595,    -5,  -458,   529,   604,   605,   603,  -458,
-     607,  -458,  -458,    -5,   350,   608,    -5,    -5,  -458,   265,
-     442,  -458,   -22,   619,  -458,  -458,    73,   606,   189,    -5,
-    -458,   291,  -458,   610,   565,  -458,  -458,  -458,  -458,  -458,
-    -458,  -458,   539,   442,  -458,   612,  -458
+     149,   -20,   -20,    58,  -459,   149,  -459,   222,   222,  -459,
+    -459,  -459,     9,  -459,  -459,  -459,   -20,   108,   -20,   -20,
+     252,   270,    -6,     9,  -459,  -459,  -459,    44,   109,  -459,
+     117,  -459,  -459,  -459,  -459,   -26,   255,   145,   145,    30,
+     109,   101,   101,   101,   101,   116,   129,   -20,   180,   166,
+       9,  -459,   176,   198,   225,  -459,  -459,  -459,  -459,   422,
+    -459,  -459,   228,   241,   253,  -459,     9,   152,  -459,   269,
+      62,   -26,   277,   569,  -459,   556,  -459,    77,  -459,  -459,
+    -459,  -459,   172,   114,  -459,  -459,   249,   286,   295,  -459,
+      12,   109,  -459,   109,   109,   282,   109,   302,   308,     6,
+     -20,   -20,   -20,   -20,   160,   313,   321,   323,   -20,   333,
+    -459,   335,   365,   310,  -459,  -459,  -459,   101,   101,   101,
+     101,   313,   129,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+    -459,  -459,   344,  -459,   367,   -26,   381,   -26,   340,  -459,
+     378,   360,    13,  -459,  -459,  -459,   304,  -459,  -459,   484,
+    -459,  -459,  -459,  -459,  -459,   373,  -459,    -8,   -41,   100,
+     369,   218,   109,  -459,  -459,  -459,   370,   384,   391,   388,
+     388,   388,   388,  -459,   -20,   385,   394,   387,   316,   -20,
+     425,   -20,  -459,  -459,   389,   399,   402,  -459,  -459,   -20,
+      87,   -20,   405,   412,   253,   -20,   -20,   -20,   -20,   -20,
+     -20,  -459,  -459,   407,   417,   423,   430,   -26,  -459,   -20,
+    -459,  -459,  -459,  -459,   440,  -459,   441,  -459,   -20,   318,
+     437,  -459,   145,   484,   145,   145,   484,   145,  -459,  -459,
+       6,  -459,   109,   267,   267,   267,   267,   438,  -459,   425,
+    -459,   388,   388,  -459,   323,   506,   442,   322,  -459,   444,
+     365,  -459,  -459,   388,   388,   388,   388,   388,   273,   -26,
+     381,   -26,   -26,  -459,  -459,   484,  -459,   445,  -459,   452,
+     447,  -459,   451,   455,   453,   109,   457,   459,  -459,   460,
+    -459,  -459,   123,  -459,  -459,  -459,  -459,  -459,  -459,   267,
+     267,  -459,  -459,   556,    16,   475,   556,  -459,  -459,  -459,
+    -459,  -459,   267,   267,   267,   267,   267,  -459,   506,  -459,
+    -459,  -459,  -459,  -459,   473,  -459,  -459,   486,  -459,   -23,
+     496,  -459,   109,   481,   511,  -459,   123,   516,  -459,  -459,
+     -20,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,   519,
+     556,   145,   145,   145,  -459,   280,   590,   253,  -459,  -459,
+     508,   521,   -20,   -26,   520,   514,   517,   522,   524,  -459,
+    -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,  -459,
+     542,  -459,   515,  -459,  -459,   523,   525,   547,   526,   528,
+     249,  -459,   -20,  -459,   527,   538,  -459,    34,   529,   556,
+    -459,  -459,  -459,  -459,  -459,  -459,   579,  -459,   197,   424,
+     211,   528,  -459,  -459,  -459,    33,  -459,  -459,  -459,   -20,
+    -459,  -459,   543,   545,   544,   545,   573,   561,   581,   584,
+     545,   558,   348,   -26,  -459,  -459,   621,  -459,  -459,   452,
+    -459,   528,  -459,  -459,   -26,   587,   -26,    40,   565,   404,
+     348,  -459,   568,   570,   572,   -26,   592,   582,   348,   277,
+     562,   211,   575,   576,   577,   578,  -459,  -459,   -26,   573,
+     293,  -459,   585,   348,   -26,   584,  -459,   578,   528,  -459,
+    -459,  -459,   602,  -459,   177,   568,   -26,   545,  -459,   456,
+     580,  -459,  -459,   588,  -459,  -459,   277,  -459,   468,   586,
+    -459,  -459,  -459,  -459,  -459,   -20,   589,   593,   591,   -26,
+     594,   -26,   348,  -459,  -459,   528,  -459,   617,   348,   622,
+     568,   595,   556,   349,  -459,   277,   -26,   597,   596,  -459,
+     598,  -459,   599,   518,  -459,   -26,   -20,   -20,   -26,   600,
+    -459,   -20,   578,   -26,  -459,   620,   622,   348,  -459,   601,
+    -459,    69,    81,   603,   -20,  -459,   530,   604,   605,   607,
+    -459,   608,  -459,  -459,   -20,   347,   606,   -20,   -20,  -459,
+      96,   348,  -459,   -26,   620,  -459,  -459,   274,   609,   379,
+     -20,  -459,   179,  -459,   610,   578,  -459,  -459,  -459,  -459,
+    -459,  -459,  -459,   540,   348,  -459,   611,  -459
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -458,  -458,   674,  -458,  -188,    -1,    -9,   663,   681,    39,
-    -458,  -458,  -157,  -458,   524,  -458,   -63,   -27,   -71,   351,
-    -458,  -105,   615,   -31,  -458,  -458,   473,  -458,  -458,   -18,
-     573,   452,  -458,    14,   464,  -458,  -458,   609,   459,  -458,
-     314,  -458,  -458,  -259,  -458,  -144,   377,  -458,  -458,  -458,
-     -73,  -458,  -458,  -458,  -458,  -458,  -458,  -458,   453,  -458,
-     451,  -458,  -458,   -52,   378,   682,  -458,  -458,   543,  -458,
-    -458,  -458,  -458,  -458,  -458,   311,  -458,  -458,   449,   -59,
-     195,   -17,  -434,  -458,  -458,  -428,  -458,  -458,  -335,   198,
-    -376,  -458,  -458,   257,  -437,  -458,  -458,   148,  -458,  -395,
-     177,   250,  -457,  -403,  -458,   255,  -458,  -458,  -458,  -458
+    -459,  -459,   676,  -459,  -188,    -1,    -9,   663,   683,     0,
+    -459,  -459,  -151,  -459,   531,  -459,   -63,   -27,   -71,   346,
+    -459,  -105,   618,   -31,  -459,  -459,   474,  -459,  -459,   -18,
+     574,   454,  -459,   -13,   467,  -459,  -459,   612,   461,  -459,
+     314,  -459,  -459,  -247,  -459,  -144,   380,  -459,  -459,  -459,
+     -68,  -459,  -459,  -459,  -459,  -459,  -459,  -459,   458,  -459,
+     462,  -459,  -459,  -134,   377,   684,  -459,  -459,   546,  -459,
+    -459,  -459,  -459,  -459,  -459,   306,  -459,  -459,   446,   -59,
+     199,   -17,  -407,  -459,  -459,  -418,  -459,  -459,  -265,   196,
+    -377,  -459,  -459,   259,  -438,  -459,  -459,   150,  -459,  -396,
+     181,   248,  -458,  -404,  -459,   256,  -459,  -459,  -459,  -459
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1055,219 +1057,219 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -176
 static const yytype_int16 yytable[] =
 {
-       7,     8,   141,    35,   424,    91,   252,   190,    30,   487,
-     469,   435,   138,    97,   470,    27,   444,    31,    32,    67,
-      94,    96,   482,    92,   425,   484,   234,   235,   236,   292,
-     154,   164,   179,   292,   154,   331,    70,    69,   170,   171,
-     172,     1,     2,   460,   462,   186,   109,   219,   199,   339,
-       6,   506,   165,   407,   451,   424,   101,   102,   103,    71,
-     456,    69,    65,   411,   517,   223,   273,   143,   224,   276,
-     521,   144,    95,   500,   545,   155,   203,   156,   206,   155,
-     530,   191,   157,   502,   158,   159,     9,   161,  -106,   113,
-     398,   488,   508,   455,    11,   135,    12,   289,   290,   550,
-     403,   136,   404,   175,   137,   132,    64,   490,   313,   302,
-     303,   304,   305,   306,    69,   559,   241,   582,   242,    66,
-      28,   222,    29,   573,   557,   566,   568,   537,   518,   571,
-     403,   195,   196,   197,   198,    97,    74,    75,    29,    36,
-      37,    38,    39,    40,    92,   190,   585,    99,   263,    69,
-     561,    47,    48,   149,   553,   576,    29,   554,   104,   382,
-     555,   556,    76,    77,    78,    79,    80,    81,    82,   107,
-     491,   492,   323,   237,    69,   173,  -131,   175,  -131,     6,
-     174,   342,   284,   285,   286,   247,   493,   584,   246,    33,
-     249,    34,    15,   110,   253,   254,   255,   256,   257,   258,
-     309,   112,   311,   312,   272,   279,   274,   275,   264,   277,
-     269,    69,    29,   426,   427,   226,   114,   267,   227,   191,
-       1,     2,   115,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,   116,    47,    48,   328,   329,    49,
-      16,    17,   490,   281,   128,   282,    18,    19,    68,    69,
-     334,   335,   336,   337,   338,   307,   129,   308,    20,   552,
-     134,   553,   330,   -16,   554,   333,   319,   555,   556,   130,
-     553,    74,    75,   554,   578,   379,   555,   556,   133,    69,
-     139,   412,   413,   414,   415,   416,   417,   418,   419,   151,
-     420,    29,    50,   152,   387,   279,   153,    76,    77,    78,
-      79,    80,    81,    82,   162,   491,   492,   160,   359,   352,
-     360,   361,   362,   363,   364,   365,    34,   481,   366,   367,
-     368,   369,   163,   356,   357,   358,   182,   183,   178,   350,
-     359,   180,   360,   361,   362,   363,   364,   365,   370,   371,
-     366,   367,   368,   369,   572,   378,   553,   210,   211,   554,
-     187,   386,   555,   556,   188,   372,   194,   352,   201,   373,
-     370,   371,   202,   448,    73,     6,   174,   352,    29,   268,
-     580,   208,   553,   204,   452,   554,   454,   207,   555,   556,
-     400,   373,   189,    74,    75,   466,   209,   412,   413,   414,
-     415,   416,   417,   418,   419,   428,   420,   218,   479,    74,
-      75,   298,   299,    29,   485,     6,   567,   430,   225,    76,
-      77,    78,    79,    80,    81,    82,   499,    74,    75,    29,
-     229,   230,   421,   232,   463,    76,    77,    78,    79,    80,
-      81,    82,   145,   146,   147,   148,   149,    29,   238,   514,
-     239,   516,   494,    76,    77,    78,    79,    80,    81,    82,
-     117,   118,   119,   120,   121,   122,   531,   498,   240,   173,
-     243,   244,   245,   250,   410,   538,   259,   251,   542,   260,
-     262,   261,   265,   546,   292,   266,   287,   219,   317,   314,
-     526,   494,   412,   413,   414,   415,   416,   417,   418,   419,
-     296,   420,   524,   510,    69,   412,   413,   414,   415,   416,
-     417,   418,   419,   574,   420,   412,   413,   414,   415,   416,
-     417,   418,   419,   247,   420,   315,   316,    34,   318,   320,
-     321,   322,   332,   389,   539,   541,   340,   345,   341,   544,
-     459,   343,   412,   413,   414,   415,   416,   417,   418,   419,
-     501,   420,   539,   347,   349,   351,   383,   385,   390,   388,
-     391,   393,   539,   539,   397,   570,   539,   412,   413,   414,
-     415,   416,   417,   418,   419,   392,   420,   507,   579,   412,
-     413,   414,   415,   416,   417,   418,   419,  -175,   420,   412,
-     413,   414,   415,   416,   417,   418,   419,   395,   420,    74,
-      75,   396,   536,    -9,   398,   401,   402,   408,   431,   406,
-     432,   436,    74,    75,   560,   434,   439,   440,   442,    29,
-     212,   213,   449,   445,   583,    76,    77,    78,    79,    80,
-      81,    82,    29,    74,   453,   458,    34,   467,    76,    77,
-      78,    79,    80,    81,    82,   464,   376,   465,   471,   468,
-     473,   475,   476,    29,   503,   489,   483,   477,   509,    76,
-      77,    78,    79,    80,    81,    82,   377,   505,   511,   512,
-     513,   519,    76,    77,    78,    79,    80,    81,    82,   515,
-     522,   525,   532,   533,   547,   534,   535,   543,   551,    10,
-     558,   562,   563,   565,    51,   564,   581,   569,   586,    14,
-     142,   577,   231,   271,   278,   200,   291,   380,   288,   344,
-     405,   301,   300,    61,   348,   228,   527,   472,   409,   310,
-     529,   575,   549,   480,   486,   181
+       7,     8,   141,    35,   425,    91,   252,   190,    30,   488,
+     470,   436,   138,    97,    15,    27,   445,    31,    32,    67,
+      94,    96,   483,    65,   426,   485,   234,   235,   236,   101,
+     102,   103,    70,   292,    69,     6,   164,   179,   170,   171,
+     172,   222,   471,   461,   463,   186,   109,   331,   154,   154,
+     113,   292,    69,   199,   452,   425,    71,   165,     9,   342,
+     457,   339,    16,    17,   518,    92,   132,    69,    18,    19,
+     522,    64,   273,   501,   546,   276,   203,   219,   206,   507,
+      20,   191,   157,   503,   158,   159,   -16,   161,    29,   427,
+     428,   489,   509,  -106,   155,   155,   156,   289,   290,   551,
+     284,   285,   286,   175,   195,   196,   197,   198,   531,   302,
+     303,   304,   305,   306,   313,    95,   241,   583,   242,   404,
+      66,   405,   399,   574,   408,   456,   560,   538,   519,    36,
+      37,    38,    39,    40,   412,    97,   567,   569,   135,   143,
+     572,    47,    48,   144,   136,   190,   586,   137,   263,   553,
+     562,   554,     1,     2,   555,   328,   329,   556,   557,   383,
+     558,    28,   323,    29,    29,  -131,   404,  -131,   334,   335,
+     336,   337,   338,   237,   247,    69,   573,   175,   554,   223,
+      92,   555,   224,   491,   556,   557,    99,   585,   246,    69,
+     249,    68,    69,   149,   253,   254,   255,   256,   257,   258,
+     309,   104,   311,   312,   272,   279,   274,   275,   264,   277,
+     269,   173,    74,    75,   107,     6,   174,   267,   359,   191,
+     360,   361,   362,   363,   364,   365,   133,    69,   366,   367,
+     368,   369,    29,   145,   146,   147,   148,   110,    76,    77,
+      78,    79,    80,    81,    82,   112,   492,   493,   370,   371,
+     114,   413,   414,   415,   416,   417,   418,   419,   420,   581,
+     421,   554,   330,   494,   555,   333,   319,   556,   557,   373,
+     374,    73,   115,     1,     2,   380,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,   422,    47,    48,
+      74,    75,    49,    69,   388,   279,    11,   226,    12,   116,
+     227,   359,   128,   360,   361,   362,   363,   364,   365,   352,
+      29,   366,   367,   368,   369,   129,    76,    77,    78,    79,
+      80,    81,    82,   356,   357,   358,    33,   130,    34,   350,
+     151,   370,   371,   413,   414,   415,   416,   417,   418,   419,
+     420,   281,   421,   282,   134,   379,    50,   307,   372,   308,
+     160,   387,   373,   374,   139,   491,   554,   577,   352,   555,
+     182,   183,   556,   557,   449,   210,   211,   152,   352,    34,
+     482,     6,   174,    29,   268,   453,   153,   455,   298,   299,
+     162,   401,   163,   189,    74,    75,   467,   194,   413,   414,
+     415,   416,   417,   418,   419,   420,   429,   421,   178,   480,
+      74,    75,     6,   568,    29,   486,   180,   187,   431,   188,
+      76,    77,    78,    79,    80,    81,    82,   500,   492,   493,
+      29,   201,   202,   207,    34,   464,    76,    77,    78,    79,
+      80,    81,    82,   117,   118,   119,   120,   121,   122,   204,
+     515,   209,   517,   495,   413,   414,   415,   416,   417,   418,
+     419,   420,   208,   421,   218,   225,   229,   532,   499,    74,
+      75,   554,   230,   232,   555,   579,   539,   556,   557,   543,
+     149,   238,   239,   240,   547,   243,   173,   244,   245,    29,
+     460,   527,   495,   250,   259,    76,    77,    78,    79,    80,
+      81,    82,   251,   525,   511,   260,   413,   414,   415,   416,
+     417,   418,   419,   420,   575,   421,   261,   411,   413,   414,
+     415,   416,   417,   418,   419,   420,   262,   421,   265,    74,
+      75,   266,   219,   292,   287,   540,   542,    69,   314,   296,
+     545,   247,   502,   315,   316,   317,   318,   320,   322,    29,
+     212,   213,   321,   540,   508,    76,    77,    78,    79,    80,
+      81,    82,   332,   540,   540,   340,   571,   540,   413,   414,
+     415,   416,   417,   418,   419,   420,   345,   421,   341,   580,
+     413,   414,   415,   416,   417,   418,   419,   420,   343,   421,
+     413,   414,   415,   416,   417,   418,   419,   420,   347,   421,
+     349,    74,    75,   384,   537,   386,   351,   390,   389,   394,
+     391,   396,  -175,   398,    74,   392,   561,   393,    -9,   397,
+     399,    29,   403,   402,   409,   407,   584,    76,    77,    78,
+      79,    80,    81,    82,    29,   377,   432,   433,   437,   435,
+      76,    77,    78,    79,    80,    81,    82,   440,   441,   443,
+     446,   450,   454,   459,    34,   378,   466,   468,   465,   472,
+     476,    76,    77,    78,    79,    80,    81,    82,   490,   469,
+     474,   478,   484,   477,   512,   506,   504,   520,   516,   510,
+     523,   513,   533,   534,   526,   548,   536,   514,   552,   544,
+     535,    10,   563,   564,    51,   566,   570,   582,   587,   559,
+     565,    14,   381,   142,   271,   578,   200,   278,   291,   231,
+     288,   406,   344,   348,   410,    61,   310,   300,   228,   530,
+     473,   528,   301,   487,   576,   481,     0,   550,   181
 };
 
-static const yytype_uint16 yycheck[] =
+static const yytype_int16 yycheck[] =
 {
-       1,     2,    73,    20,   399,    36,   194,   112,    17,   466,
-     447,   414,    71,    40,   448,    16,   419,    18,    19,    28,
-      38,    39,   459,    35,   400,   462,   170,   171,   172,    17,
-      36,    30,   105,    17,    36,   294,    58,    74,   101,   102,
-     103,     3,     4,   438,   439,   108,    47,    84,   121,   308,
-      55,   485,    51,   388,   430,   450,    42,    43,    44,    81,
-     436,    74,    23,   398,   501,    78,   223,    62,    81,   226,
-     507,    66,    84,   476,   531,    81,   135,    83,   137,    81,
-     514,   112,    91,   478,    93,    94,     0,    96,    76,    50,
-      81,   467,   487,    84,    73,    75,    75,   241,   242,   536,
-      84,    81,    86,   104,    84,    66,    76,     6,   265,   253,
-     254,   255,   256,   257,    74,   543,   179,   574,   181,    75,
-      53,    81,    55,   560,    78,   553,   554,   522,   504,   557,
-      84,   117,   118,   119,   120,   162,    35,    36,    55,     6,
-       7,     8,     9,    10,    35,   250,   583,    84,   207,    74,
-     545,    18,    19,    78,    81,    82,    55,    84,    84,   347,
-      87,    88,    61,    62,    63,    64,    65,    66,    67,    84,
-      69,    70,    39,   174,    74,    51,    77,   178,    79,    55,
-      56,    81,   234,   235,   236,    86,    85,   582,   189,    73,
-     191,    75,     5,    57,   195,   196,   197,   198,   199,   200,
-     259,    78,   261,   262,   222,   232,   224,   225,   209,   227,
-     219,    74,    55,    56,    57,    78,    73,   218,    81,   250,
-       3,     4,    73,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    73,    18,    19,   289,   290,    22,
-      53,    54,     6,    73,    73,    75,    59,    60,    73,    74,
-     302,   303,   304,   305,   306,    73,    73,    75,    71,    79,
-      74,    81,   293,    76,    84,   296,   275,    87,    88,    73,
-      81,    35,    36,    84,    85,   346,    87,    88,    73,    74,
-      76,    40,    41,    42,    43,    44,    45,    46,    47,    80,
-      49,    55,    75,    80,   353,   322,    80,    61,    62,    63,
-      64,    65,    66,    67,    77,    69,    70,    68,    21,   340,
-      23,    24,    25,    26,    27,    28,    75,    76,    31,    32,
-      33,    34,    73,   341,   342,   343,    37,    38,    84,   330,
-      21,    84,    23,    24,    25,    26,    27,    28,    51,    52,
-      31,    32,    33,    34,    79,   346,    81,    61,    62,    84,
-      73,   352,    87,    88,    73,    68,    76,   388,    76,    72,
-      51,    52,    55,   422,    16,    55,    56,   398,    55,    56,
-      79,    73,    81,    58,   433,    84,   435,    82,    87,    88,
-     381,    72,    18,    35,    36,   444,    80,    40,    41,    42,
-      43,    44,    45,    46,    47,   404,    49,    80,   457,    35,
-      36,    56,    57,    55,   463,    55,    56,   408,    85,    61,
-      62,    63,    64,    65,    66,    67,   475,    35,    36,    55,
-      85,    77,    75,    74,   441,    61,    62,    63,    64,    65,
-      66,    67,    61,    62,    63,    64,    78,    55,    85,   498,
-      77,   500,   473,    61,    62,    63,    64,    65,    66,    67,
-      11,    12,    13,    14,    15,    16,   515,   474,    85,    51,
-      85,    77,    75,    77,    82,   524,    76,    79,   527,    77,
-      85,    82,    77,   532,    17,    79,    85,    84,    79,    82,
-     511,   512,    40,    41,    42,    43,    44,    45,    46,    47,
-      86,    49,   509,   494,    74,    40,    41,    42,    43,    44,
-      45,    46,    47,   562,    49,    40,    41,    42,    43,    44,
-      45,    46,    47,    86,    49,    85,    82,    75,    82,    79,
-      82,    77,    76,    82,   525,   526,    81,    84,    81,   530,
-      75,    81,    40,    41,    42,    43,    44,    45,    46,    47,
-      75,    49,   543,    76,    73,    76,    84,    73,    82,    77,
-      82,    57,   553,   554,    77,   556,   557,    40,    41,    42,
-      43,    44,    45,    46,    47,    82,    49,    75,   569,    40,
-      41,    42,    43,    44,    45,    46,    47,    55,    49,    40,
-      41,    42,    43,    44,    45,    46,    47,    85,    49,    35,
-      36,    85,    75,    81,    81,    85,    73,    35,    82,    85,
-      81,    55,    35,    36,    75,    84,    75,    57,    55,    55,
-      56,    57,    20,    81,    75,    61,    62,    63,    64,    65,
-      66,    67,    55,    35,    55,    77,    75,    55,    61,    62,
-      63,    64,    65,    66,    67,    77,    35,    73,    86,    76,
-      84,    73,    85,    55,    85,    56,    76,    82,    82,    61,
-      62,    63,    64,    65,    66,    67,    55,    76,    74,    77,
-      85,    50,    61,    62,    63,    64,    65,    66,    67,    73,
-      48,    78,    74,    76,    55,    81,    76,    78,    76,     5,
-      85,    77,    77,    76,    21,    82,    76,    79,    76,     8,
-      75,    85,   168,   220,   230,   122,   244,   346,   239,   322,
-     386,   250,   249,    21,   326,   162,   511,   450,   397,   260,
-     512,   563,   535,   458,   464,   106
+       1,     2,    73,    20,   400,    36,   194,   112,    17,   467,
+     448,   415,    71,    40,     5,    16,   420,    18,    19,    28,
+      38,    39,   460,    23,   401,   463,   170,   171,   172,    42,
+      43,    44,    58,    17,    75,    55,    30,   105,   101,   102,
+     103,    82,   449,   439,   440,   108,    47,   294,    36,    36,
+      50,    17,    75,   121,   431,   451,    82,    51,     0,    82,
+     437,   308,    53,    54,   502,    35,    66,    75,    59,    60,
+     508,    77,   223,   477,   532,   226,   135,    85,   137,   486,
+      71,   112,    91,   479,    93,    94,    77,    96,    55,    56,
+      57,   468,   488,    77,    82,    82,    84,   241,   242,   537,
+     234,   235,   236,   104,   117,   118,   119,   120,   515,   253,
+     254,   255,   256,   257,   265,    85,   179,   575,   181,    85,
+      76,    87,    82,   561,   389,    85,   544,   523,   505,     6,
+       7,     8,     9,    10,   399,   162,   554,   555,    76,    62,
+     558,    18,    19,    66,    82,   250,   584,    85,   207,    80,
+     546,    82,     3,     4,    85,   289,   290,    88,    89,   347,
+      79,    53,    39,    55,    55,    78,    85,    80,   302,   303,
+     304,   305,   306,   174,    87,    75,    80,   178,    82,    79,
+      35,    85,    82,     6,    88,    89,    85,   583,   189,    75,
+     191,    74,    75,    79,   195,   196,   197,   198,   199,   200,
+     259,    85,   261,   262,   222,   232,   224,   225,   209,   227,
+     219,    51,    35,    36,    85,    55,    56,   218,    21,   250,
+      23,    24,    25,    26,    27,    28,    74,    75,    31,    32,
+      33,    34,    55,    61,    62,    63,    64,    57,    61,    62,
+      63,    64,    65,    66,    67,    79,    69,    70,    51,    52,
+      74,    40,    41,    42,    43,    44,    45,    46,    47,    80,
+      49,    82,   293,    86,    85,   296,   275,    88,    89,    72,
+      73,    16,    74,     3,     4,   346,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    76,    18,    19,
+      35,    36,    22,    75,   353,   322,    74,    79,    76,    74,
+      82,    21,    74,    23,    24,    25,    26,    27,    28,   340,
+      55,    31,    32,    33,    34,    74,    61,    62,    63,    64,
+      65,    66,    67,   341,   342,   343,    74,    74,    76,   330,
+      81,    51,    52,    40,    41,    42,    43,    44,    45,    46,
+      47,    74,    49,    76,    75,   346,    76,    74,    68,    76,
+      68,   352,    72,    73,    77,     6,    82,    83,   389,    85,
+      37,    38,    88,    89,   423,    61,    62,    81,   399,    76,
+      77,    55,    56,    55,    56,   434,    81,   436,    56,    57,
+      78,   382,    74,    18,    35,    36,   445,    77,    40,    41,
+      42,    43,    44,    45,    46,    47,   405,    49,    85,   458,
+      35,    36,    55,    56,    55,   464,    85,    74,   409,    74,
+      61,    62,    63,    64,    65,    66,    67,   476,    69,    70,
+      55,    77,    55,    83,    76,   442,    61,    62,    63,    64,
+      65,    66,    67,    11,    12,    13,    14,    15,    16,    58,
+     499,    81,   501,   474,    40,    41,    42,    43,    44,    45,
+      46,    47,    74,    49,    81,    86,    86,   516,   475,    35,
+      36,    82,    78,    75,    85,    86,   525,    88,    89,   528,
+      79,    86,    78,    86,   533,    86,    51,    78,    76,    55,
+      76,   512,   513,    78,    77,    61,    62,    63,    64,    65,
+      66,    67,    80,   510,   495,    78,    40,    41,    42,    43,
+      44,    45,    46,    47,   563,    49,    83,    83,    40,    41,
+      42,    43,    44,    45,    46,    47,    86,    49,    78,    35,
+      36,    80,    85,    17,    86,   526,   527,    75,    83,    87,
+     531,    87,    76,    86,    83,    80,    83,    80,    78,    55,
+      56,    57,    83,   544,    76,    61,    62,    63,    64,    65,
+      66,    67,    77,   554,   555,    82,   557,   558,    40,    41,
+      42,    43,    44,    45,    46,    47,    85,    49,    82,   570,
+      40,    41,    42,    43,    44,    45,    46,    47,    82,    49,
+      40,    41,    42,    43,    44,    45,    46,    47,    77,    49,
+      74,    35,    36,    85,    76,    74,    77,    83,    78,    57,
+      83,    86,    55,    78,    35,    83,    76,    83,    82,    86,
+      82,    55,    74,    86,    35,    86,    76,    61,    62,    63,
+      64,    65,    66,    67,    55,    35,    83,    82,    55,    85,
+      61,    62,    63,    64,    65,    66,    67,    76,    57,    55,
+      82,    20,    55,    78,    76,    55,    74,    55,    78,    87,
+      74,    61,    62,    63,    64,    65,    66,    67,    56,    77,
+      85,    83,    77,    86,    75,    77,    86,    50,    74,    83,
+      48,    78,    75,    77,    79,    55,    77,    86,    77,    79,
+      82,     5,    78,    78,    21,    77,    80,    77,    77,    86,
+      83,     8,   346,    75,   220,    86,   122,   230,   244,   168,
+     239,   387,   322,   326,   398,    21,   260,   249,   162,   513,
+     451,   512,   250,   465,   564,   459,    -1,   536,   106
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,    90,    91,    96,    55,    94,    94,     0,
-      91,    73,    75,    97,    97,     5,    53,    54,    59,    60,
-      71,    92,    98,    99,   161,   197,   198,    94,    53,    55,
-      95,    94,    94,    73,    75,   170,     6,     7,     8,     9,
+       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,
-      75,    96,   116,   117,   133,   136,   137,   138,   140,   150,
-     151,   154,   155,   156,    76,    98,    75,    95,    73,    74,
-      58,    81,   168,    16,    35,    36,    61,    62,    63,    64,
-      65,    66,    67,    95,   104,   106,   107,   108,   109,   110,
-     111,   112,    35,   118,   118,    84,   118,   106,   157,    84,
-     122,   122,   122,   122,    84,   126,   139,    84,   119,    94,
-      57,   158,    78,    98,    73,    73,    73,    11,    12,    13,
-      14,    15,    16,   141,   142,   143,   144,   145,    73,    73,
-      73,    93,    98,    73,    74,    75,    81,    84,   168,    76,
-     171,   107,   111,    62,    66,    61,    62,    63,    64,    78,
-     103,    80,    80,    80,    36,    81,    83,    95,    95,    95,
-      68,    95,    77,    73,    30,    51,   123,   128,    94,   105,
-     105,   105,   105,    51,    56,    94,   125,   127,    84,   139,
-      84,   126,    37,    38,   120,   121,   105,    73,    73,    18,
-     110,   112,   148,   149,    76,   122,   122,   122,   122,   139,
-     119,    76,    55,   168,    58,   167,   168,    82,    73,    80,
-      61,    62,    56,    57,   100,   101,   102,   112,    80,    84,
-     114,   115,    81,    78,    81,    85,    78,    81,   157,    85,
-      77,   103,    74,   134,   134,   134,   134,    94,    85,    77,
-      85,   105,   105,    85,    77,    75,    94,    86,   147,    94,
-      77,    79,    93,    94,    94,    94,    94,    94,    94,    76,
-      77,    82,    85,   168,    94,    77,    79,    94,    56,    95,
-     113,   115,   118,   101,   118,   118,   101,   118,   123,   106,
-     135,    73,    75,   152,   152,   152,   152,    85,   127,   134,
-     134,   120,    17,   129,   131,   132,    86,   146,    56,    57,
-     147,   149,   134,   134,   134,   134,   134,    73,    75,   168,
-     167,   168,   168,   101,    82,    85,    82,    79,    82,    95,
-      79,    82,    77,    39,   153,   154,   159,   160,   152,   152,
-     112,   132,    76,   112,   152,   152,   152,   152,   152,   132,
-      81,    81,    81,    81,   135,    84,   163,    76,   153,    73,
-      94,    76,   112,   169,   172,   177,   118,   118,   118,    21,
+      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,
+      80,    83,    78,    39,   154,   155,   160,   161,   153,   153,
+     113,   133,    77,   113,   153,   153,   153,   153,   153,   133,
+      82,    82,    82,    82,   136,    85,   164,    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,   164,   165,    35,    55,    94,   107,
-     108,   162,    93,    84,   130,    73,    94,   168,    77,    82,
-      82,    82,    82,    57,   124,    85,    85,    77,    81,   179,
-      94,    85,    73,    84,    86,   129,    85,   177,    35,   164,
-      82,   177,    40,    41,    42,    43,    44,    45,    46,    47,
-      49,    75,   170,   182,   188,   179,    56,    57,    95,   166,
-      94,    82,    81,   192,    84,   192,    55,   193,   194,    75,
-      57,   187,    55,   190,   192,    81,   183,   188,   168,    20,
-     181,   179,   168,    55,   168,    84,   179,   195,    77,    75,
-     188,   184,   188,   170,    77,    73,   168,    55,    76,   183,
-     171,    86,   182,    84,   180,    73,    85,    82,   191,   168,
-     194,    76,   183,    76,   183,   168,   190,   191,   179,    56,
-       6,    69,    70,    85,   112,   173,   176,   178,   170,   168,
-     192,    75,   188,    85,   196,    76,   171,    75,   188,    82,
-      94,    74,    77,    85,   168,    73,   168,   183,   179,    50,
-     185,   183,    48,   189,   170,    78,   112,   169,   175,   178,
-     171,   168,    74,    76,    81,    76,    75,   188,   168,    94,
-     174,    94,   168,    78,    94,   191,   168,    55,   186,   189,
-     183,    76,    79,    81,    84,    87,    88,    78,    85,   174,
-      75,   188,    77,    77,    82,    76,   174,    56,   174,    79,
-      94,   174,    79,   183,   168,   186,    82,    85,    85,    94,
-      79,    76,   191,    75,   188,   183,    76
+      51,    52,    68,    72,    73,   165,   166,    35,    55,    95,
+     108,   109,   163,    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
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1341,7 +1343,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)                 \
      fprintf (File, "%d.%d-%d.%d",                     \
              (Loc).first_line, (Loc).first_column,     \
@@ -2082,54 +2084,54 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 154 "xi-grammar.y"
+#line 155 "xi-grammar.y"
     { (yyval.modlist) = (yyvsp[(1) - (1)].modlist); modlist = (yyvsp[(1) - (1)].modlist); }
     break;
 
   case 3:
-#line 158 "xi-grammar.y"
+#line 159 "xi-grammar.y"
     { 
                  (yyval.modlist) = 0; 
                }
     break;
 
   case 4:
-#line 162 "xi-grammar.y"
+#line 163 "xi-grammar.y"
     { (yyval.modlist) = new ModuleList(lineno, (yyvsp[(1) - (2)].module), (yyvsp[(2) - (2)].modlist)); }
     break;
 
   case 5:
-#line 166 "xi-grammar.y"
+#line 167 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 6:
-#line 168 "xi-grammar.y"
+#line 169 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
   case 7:
-#line 172 "xi-grammar.y"
+#line 173 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 8:
-#line 174 "xi-grammar.y"
+#line 175 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
   case 9:
-#line 178 "xi-grammar.y"
+#line 179 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
   case 10:
-#line 182 "xi-grammar.y"
+#line 183 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
   case 11:
-#line 184 "xi-grammar.y"
+#line 185 "xi-grammar.y"
     {
                  char *tmp = new char[strlen((yyvsp[(1) - (4)].strval))+strlen((yyvsp[(4) - (4)].strval))+3];
                  sprintf(tmp,"%s::%s", (yyvsp[(1) - (4)].strval), (yyvsp[(4) - (4)].strval));
@@ -2138,14 +2140,14 @@ yyreduce:
     break;
 
   case 12:
-#line 192 "xi-grammar.y"
+#line 193 "xi-grammar.y"
     { 
                    (yyval.module) = new Module(lineno, (yyvsp[(2) - (3)].strval), (yyvsp[(3) - (3)].conslist)); 
                }
     break;
 
   case 13:
-#line 196 "xi-grammar.y"
+#line 197 "xi-grammar.y"
     {  
                    (yyval.module) = new Module(lineno, (yyvsp[(2) - (3)].strval), (yyvsp[(3) - (3)].conslist)); 
                    (yyval.module)->setMain();
@@ -2153,227 +2155,227 @@ yyreduce:
     break;
 
   case 14:
-#line 203 "xi-grammar.y"
+#line 204 "xi-grammar.y"
     { (yyval.conslist) = 0; }
     break;
 
   case 15:
-#line 205 "xi-grammar.y"
+#line 206 "xi-grammar.y"
     { (yyval.conslist) = (yyvsp[(2) - (4)].conslist); }
     break;
 
   case 16:
-#line 209 "xi-grammar.y"
+#line 210 "xi-grammar.y"
     { (yyval.conslist) = 0; }
     break;
 
   case 17:
-#line 211 "xi-grammar.y"
+#line 212 "xi-grammar.y"
     { (yyval.conslist) = new ConstructList(lineno, (yyvsp[(1) - (2)].construct), (yyvsp[(2) - (2)].conslist)); }
     break;
 
   case 18:
-#line 215 "xi-grammar.y"
+#line 216 "xi-grammar.y"
     { if((yyvsp[(3) - (5)].conslist)) (yyvsp[(3) - (5)].conslist)->setExtern((yyvsp[(1) - (5)].intval)); (yyval.construct) = (yyvsp[(3) - (5)].conslist); }
     break;
 
   case 19:
-#line 217 "xi-grammar.y"
+#line 218 "xi-grammar.y"
     { (yyval.construct) = new Scope((yyvsp[(2) - (5)].strval), (yyvsp[(4) - (5)].conslist)); }
     break;
 
   case 20:
-#line 219 "xi-grammar.y"
+#line 220 "xi-grammar.y"
     { (yyval.construct) = new UsingScope((yyvsp[(3) - (4)].strval), false); }
     break;
 
   case 21:
-#line 221 "xi-grammar.y"
+#line 222 "xi-grammar.y"
     { (yyval.construct) = new UsingScope((yyvsp[(2) - (3)].strval), true); }
     break;
 
   case 22:
-#line 223 "xi-grammar.y"
+#line 224 "xi-grammar.y"
     { (yyvsp[(2) - (2)].module)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].module); }
     break;
 
   case 23:
-#line 225 "xi-grammar.y"
+#line 226 "xi-grammar.y"
     { (yyvsp[(2) - (2)].member)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].member); }
     break;
 
   case 24:
-#line 227 "xi-grammar.y"
+#line 228 "xi-grammar.y"
     { (yyvsp[(2) - (3)].message)->setExtern((yyvsp[(1) - (3)].intval)); (yyval.construct) = (yyvsp[(2) - (3)].message); }
     break;
 
   case 25:
-#line 229 "xi-grammar.y"
+#line 230 "xi-grammar.y"
     { (yyvsp[(2) - (2)].chare)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].chare); }
     break;
 
   case 26:
-#line 231 "xi-grammar.y"
+#line 232 "xi-grammar.y"
     { (yyvsp[(2) - (2)].chare)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].chare); }
     break;
 
   case 27:
-#line 233 "xi-grammar.y"
+#line 234 "xi-grammar.y"
     { (yyvsp[(2) - (2)].chare)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].chare); }
     break;
 
   case 28:
-#line 235 "xi-grammar.y"
+#line 236 "xi-grammar.y"
     { (yyvsp[(2) - (2)].chare)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].chare); }
     break;
 
   case 29:
-#line 237 "xi-grammar.y"
+#line 238 "xi-grammar.y"
     { (yyvsp[(2) - (2)].templat)->setExtern((yyvsp[(1) - (2)].intval)); (yyval.construct) = (yyvsp[(2) - (2)].templat); }
     break;
 
   case 30:
-#line 239 "xi-grammar.y"
+#line 240 "xi-grammar.y"
     { (yyval.construct) = NULL; }
     break;
 
   case 31:
-#line 241 "xi-grammar.y"
+#line 242 "xi-grammar.y"
     { (yyval.construct) = NULL; }
     break;
 
   case 32:
-#line 243 "xi-grammar.y"
+#line 244 "xi-grammar.y"
     { (yyval.construct) = (yyvsp[(1) - (1)].accelBlock); }
     break;
 
   case 33:
-#line 247 "xi-grammar.y"
+#line 248 "xi-grammar.y"
     { (yyval.tparam) = new TParamType((yyvsp[(1) - (1)].type)); }
     break;
 
   case 34:
-#line 249 "xi-grammar.y"
+#line 250 "xi-grammar.y"
     { (yyval.tparam) = new TParamVal((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 35:
-#line 251 "xi-grammar.y"
+#line 252 "xi-grammar.y"
     { (yyval.tparam) = new TParamVal((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 36:
-#line 255 "xi-grammar.y"
+#line 256 "xi-grammar.y"
     { (yyval.tparlist) = new TParamList((yyvsp[(1) - (1)].tparam)); }
     break;
 
   case 37:
-#line 257 "xi-grammar.y"
+#line 258 "xi-grammar.y"
     { (yyval.tparlist) = new TParamList((yyvsp[(1) - (3)].tparam), (yyvsp[(3) - (3)].tparlist)); }
     break;
 
   case 38:
-#line 261 "xi-grammar.y"
+#line 262 "xi-grammar.y"
     { (yyval.tparlist) = 0; }
     break;
 
   case 39:
-#line 263 "xi-grammar.y"
+#line 264 "xi-grammar.y"
     { (yyval.tparlist) = (yyvsp[(1) - (1)].tparlist); }
     break;
 
   case 40:
-#line 267 "xi-grammar.y"
+#line 268 "xi-grammar.y"
     { (yyval.tparlist) = 0; }
     break;
 
   case 41:
-#line 269 "xi-grammar.y"
+#line 270 "xi-grammar.y"
     { (yyval.tparlist) = (yyvsp[(2) - (3)].tparlist); }
     break;
 
   case 42:
-#line 273 "xi-grammar.y"
+#line 274 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("int"); }
     break;
 
   case 43:
-#line 275 "xi-grammar.y"
+#line 276 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("long"); }
     break;
 
   case 44:
-#line 277 "xi-grammar.y"
+#line 278 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("short"); }
     break;
 
   case 45:
-#line 279 "xi-grammar.y"
+#line 280 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("char"); }
     break;
 
   case 46:
-#line 281 "xi-grammar.y"
+#line 282 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned int"); }
     break;
 
   case 47:
-#line 283 "xi-grammar.y"
+#line 284 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned long"); }
     break;
 
   case 48:
-#line 285 "xi-grammar.y"
+#line 286 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned long"); }
     break;
 
   case 49:
-#line 287 "xi-grammar.y"
+#line 288 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned long long"); }
     break;
 
   case 50:
-#line 289 "xi-grammar.y"
+#line 290 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned short"); }
     break;
 
   case 51:
-#line 291 "xi-grammar.y"
+#line 292 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("unsigned char"); }
     break;
 
   case 52:
-#line 293 "xi-grammar.y"
+#line 294 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("long long"); }
     break;
 
   case 53:
-#line 295 "xi-grammar.y"
+#line 296 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("float"); }
     break;
 
   case 54:
-#line 297 "xi-grammar.y"
+#line 298 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("double"); }
     break;
 
   case 55:
-#line 299 "xi-grammar.y"
+#line 300 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("long double"); }
     break;
 
   case 56:
-#line 301 "xi-grammar.y"
+#line 302 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("void"); }
     break;
 
   case 57:
-#line 304 "xi-grammar.y"
+#line 305 "xi-grammar.y"
     { (yyval.ntype) = new NamedType((yyvsp[(1) - (2)].strval),(yyvsp[(2) - (2)].tparlist)); }
     break;
 
   case 58:
-#line 305 "xi-grammar.y"
+#line 306 "xi-grammar.y"
     { 
                     const char* basename, *scope;
                     splitScopedName((yyvsp[(1) - (2)].strval), &scope, &basename);
@@ -2382,127 +2384,127 @@ yyreduce:
     break;
 
   case 59:
-#line 313 "xi-grammar.y"
+#line 314 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 60:
-#line 315 "xi-grammar.y"
+#line 316 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ntype); }
     break;
 
   case 61:
-#line 319 "xi-grammar.y"
+#line 320 "xi-grammar.y"
     { (yyval.ptype) = new PtrType((yyvsp[(1) - (2)].type)); }
     break;
 
   case 62:
-#line 323 "xi-grammar.y"
+#line 324 "xi-grammar.y"
     { (yyvsp[(1) - (2)].ptype)->indirect(); (yyval.ptype) = (yyvsp[(1) - (2)].ptype); }
     break;
 
   case 63:
-#line 325 "xi-grammar.y"
+#line 326 "xi-grammar.y"
     { (yyvsp[(1) - (2)].ptype)->indirect(); (yyval.ptype) = (yyvsp[(1) - (2)].ptype); }
     break;
 
   case 64:
-#line 329 "xi-grammar.y"
+#line 330 "xi-grammar.y"
     { (yyval.ftype) = new FuncType((yyvsp[(1) - (8)].type), (yyvsp[(4) - (8)].strval), (yyvsp[(7) - (8)].plist)); }
     break;
 
   case 65:
-#line 333 "xi-grammar.y"
+#line 334 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 66:
-#line 335 "xi-grammar.y"
+#line 336 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 67:
-#line 337 "xi-grammar.y"
+#line 338 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 68:
-#line 339 "xi-grammar.y"
+#line 340 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ftype); }
     break;
 
   case 69:
-#line 342 "xi-grammar.y"
+#line 343 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); }
     break;
 
   case 70:
-#line 344 "xi-grammar.y"
+#line 345 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); }
     break;
 
   case 71:
-#line 348 "xi-grammar.y"
+#line 349 "xi-grammar.y"
     { (yyval.type) = new ReferenceType((yyvsp[(1) - (2)].type)); }
     break;
 
   case 72:
-#line 350 "xi-grammar.y"
+#line 351 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); }
     break;
 
   case 73:
-#line 354 "xi-grammar.y"
+#line 355 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 74:
-#line 356 "xi-grammar.y"
+#line 357 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 75:
-#line 360 "xi-grammar.y"
+#line 361 "xi-grammar.y"
     { (yyval.val) = (yyvsp[(2) - (3)].val); }
     break;
 
   case 76:
-#line 364 "xi-grammar.y"
+#line 365 "xi-grammar.y"
     { (yyval.vallist) = 0; }
     break;
 
   case 77:
-#line 366 "xi-grammar.y"
+#line 367 "xi-grammar.y"
     { (yyval.vallist) = new ValueList((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].vallist)); }
     break;
 
   case 78:
-#line 370 "xi-grammar.y"
+#line 371 "xi-grammar.y"
     { (yyval.readonly) = new Readonly(lineno, (yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].strval), (yyvsp[(4) - (4)].vallist)); }
     break;
 
   case 79:
-#line 374 "xi-grammar.y"
+#line 375 "xi-grammar.y"
     { (yyval.readonly) = new Readonly(lineno, (yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].strval), 0, 1); }
     break;
 
   case 80:
-#line 378 "xi-grammar.y"
+#line 379 "xi-grammar.y"
     { (yyval.intval) = 0;}
     break;
 
   case 81:
-#line 380 "xi-grammar.y"
+#line 381 "xi-grammar.y"
     { (yyval.intval) = 0;}
     break;
 
   case 82:
-#line 384 "xi-grammar.y"
+#line 385 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 83:
-#line 386 "xi-grammar.y"
+#line 387 "xi-grammar.y"
     { 
                  /*
                  printf("Warning: Message attributes are being phased out.\n");
@@ -2513,177 +2515,177 @@ yyreduce:
     break;
 
   case 84:
-#line 396 "xi-grammar.y"
+#line 397 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
     break;
 
   case 85:
-#line 398 "xi-grammar.y"
+#line 399 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (3)].intval) | (yyvsp[(3) - (3)].intval); }
     break;
 
   case 86:
-#line 402 "xi-grammar.y"
+#line 403 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 87:
-#line 404 "xi-grammar.y"
+#line 405 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 88:
-#line 408 "xi-grammar.y"
+#line 409 "xi-grammar.y"
     { (yyval.cattr) = 0; }
     break;
 
   case 89:
-#line 410 "xi-grammar.y"
+#line 411 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(2) - (3)].cattr); }
     break;
 
   case 90:
-#line 414 "xi-grammar.y"
+#line 415 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (1)].cattr); }
     break;
 
   case 91:
-#line 416 "xi-grammar.y"
+#line 417 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (3)].cattr) | (yyvsp[(3) - (3)].cattr); }
     break;
 
   case 92:
-#line 420 "xi-grammar.y"
+#line 421 "xi-grammar.y"
     { python_doc = NULL; (yyval.intval) = 0; }
     break;
 
   case 93:
-#line 422 "xi-grammar.y"
+#line 423 "xi-grammar.y"
     { python_doc = (yyvsp[(1) - (1)].strval); (yyval.intval) = 0; }
     break;
 
   case 94:
-#line 426 "xi-grammar.y"
+#line 427 "xi-grammar.y"
     { (yyval.cattr) = Chare::CPYTHON; }
     break;
 
   case 95:
-#line 430 "xi-grammar.y"
+#line 431 "xi-grammar.y"
     { (yyval.cattr) = 0; }
     break;
 
   case 96:
-#line 432 "xi-grammar.y"
+#line 433 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(2) - (3)].cattr); }
     break;
 
   case 97:
-#line 436 "xi-grammar.y"
+#line 437 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (1)].cattr); }
     break;
 
   case 98:
-#line 438 "xi-grammar.y"
+#line 439 "xi-grammar.y"
     { (yyval.cattr) = (yyvsp[(1) - (3)].cattr) | (yyvsp[(3) - (3)].cattr); }
     break;
 
   case 99:
-#line 442 "xi-grammar.y"
+#line 443 "xi-grammar.y"
     { (yyval.cattr) = Chare::CMIGRATABLE; }
     break;
 
   case 100:
-#line 444 "xi-grammar.y"
+#line 445 "xi-grammar.y"
     { (yyval.cattr) = Chare::CPYTHON; }
     break;
 
   case 101:
-#line 448 "xi-grammar.y"
+#line 449 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 102:
-#line 450 "xi-grammar.y"
+#line 451 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
   case 103:
-#line 453 "xi-grammar.y"
+#line 454 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 104:
-#line 455 "xi-grammar.y"
+#line 456 "xi-grammar.y"
     { (yyval.intval) = 1; }
     break;
 
   case 105:
-#line 458 "xi-grammar.y"
+#line 459 "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:
-#line 462 "xi-grammar.y"
+#line 463 "xi-grammar.y"
     { (yyval.mvlist) = new MsgVarList((yyvsp[(1) - (1)].mv)); }
     break;
 
   case 107:
-#line 464 "xi-grammar.y"
+#line 465 "xi-grammar.y"
     { (yyval.mvlist) = new MsgVarList((yyvsp[(1) - (2)].mv), (yyvsp[(2) - (2)].mvlist)); }
     break;
 
   case 108:
-#line 468 "xi-grammar.y"
+#line 469 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, (yyvsp[(3) - (3)].ntype)); }
     break;
 
   case 109:
-#line 470 "xi-grammar.y"
+#line 471 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, (yyvsp[(3) - (6)].ntype), (yyvsp[(5) - (6)].mvlist)); }
     break;
 
   case 110:
-#line 474 "xi-grammar.y"
+#line 475 "xi-grammar.y"
     { (yyval.typelist) = 0; }
     break;
 
   case 111:
-#line 476 "xi-grammar.y"
+#line 477 "xi-grammar.y"
     { (yyval.typelist) = (yyvsp[(2) - (2)].typelist); }
     break;
 
   case 112:
-#line 480 "xi-grammar.y"
+#line 481 "xi-grammar.y"
     { (yyval.typelist) = new TypeList((yyvsp[(1) - (1)].ntype)); }
     break;
 
   case 113:
-#line 482 "xi-grammar.y"
+#line 483 "xi-grammar.y"
     { (yyval.typelist) = new TypeList((yyvsp[(1) - (3)].ntype), (yyvsp[(3) - (3)].typelist)); }
     break;
 
   case 114:
-#line 486 "xi-grammar.y"
+#line 487 "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:
-#line 488 "xi-grammar.y"
+#line 489 "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:
-#line 492 "xi-grammar.y"
+#line 493 "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:
-#line 496 "xi-grammar.y"
+#line 497 "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:
-#line 500 "xi-grammar.y"
+#line 501 "xi-grammar.y"
     {/*Stupid special case for [1D] indices*/
                        char *buf=new char[40];
                        sprintf(buf,"%sD",(yyvsp[(2) - (4)].strval));
@@ -2692,147 +2694,147 @@ yyreduce:
     break;
 
   case 119:
-#line 506 "xi-grammar.y"
+#line 507 "xi-grammar.y"
     { (yyval.ntype) = new NamedType((yyvsp[(2) - (3)].strval)); }
     break;
 
   case 120:
-#line 510 "xi-grammar.y"
+#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)); }
     break;
 
   case 121:
-#line 512 "xi-grammar.y"
+#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)); }
     break;
 
   case 122:
-#line 516 "xi-grammar.y"
+#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));}
     break;
 
   case 123:
-#line 518 "xi-grammar.y"
+#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)); }
     break;
 
   case 124:
-#line 522 "xi-grammar.y"
+#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)); }
     break;
 
   case 125:
-#line 526 "xi-grammar.y"
+#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)); }
     break;
 
   case 126:
-#line 530 "xi-grammar.y"
+#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)); }
     break;
 
   case 127:
-#line 534 "xi-grammar.y"
+#line 535 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (4)].strval))); }
     break;
 
   case 128:
-#line 536 "xi-grammar.y"
+#line 537 "xi-grammar.y"
     { (yyval.message) = new Message(lineno, new NamedType((yyvsp[(3) - (7)].strval)), (yyvsp[(5) - (7)].mvlist)); }
     break;
 
   case 129:
-#line 540 "xi-grammar.y"
+#line 541 "xi-grammar.y"
     { (yyval.type) = 0; }
     break;
 
   case 130:
-#line 542 "xi-grammar.y"
+#line 543 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); }
     break;
 
   case 131:
-#line 546 "xi-grammar.y"
+#line 547 "xi-grammar.y"
     { (yyval.strval) = 0; }
     break;
 
   case 132:
-#line 548 "xi-grammar.y"
+#line 549 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(2) - (2)].strval); }
     break;
 
   case 133:
-#line 550 "xi-grammar.y"
+#line 551 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(2) - (2)].strval); }
     break;
 
   case 134:
-#line 554 "xi-grammar.y"
+#line 555 "xi-grammar.y"
     { (yyval.tvar) = new TType(new NamedType((yyvsp[(2) - (3)].strval)), (yyvsp[(3) - (3)].type)); }
     break;
 
   case 135:
-#line 556 "xi-grammar.y"
+#line 557 "xi-grammar.y"
     { (yyval.tvar) = new TFunc((yyvsp[(1) - (2)].ftype), (yyvsp[(2) - (2)].strval)); }
     break;
 
   case 136:
-#line 558 "xi-grammar.y"
+#line 559 "xi-grammar.y"
     { (yyval.tvar) = new TName((yyvsp[(1) - (3)].type), (yyvsp[(2) - (3)].strval), (yyvsp[(3) - (3)].strval)); }
     break;
 
   case 137:
-#line 562 "xi-grammar.y"
+#line 563 "xi-grammar.y"
     { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (1)].tvar)); }
     break;
 
   case 138:
-#line 564 "xi-grammar.y"
+#line 565 "xi-grammar.y"
     { (yyval.tvarlist) = new TVarList((yyvsp[(1) - (3)].tvar), (yyvsp[(3) - (3)].tvarlist)); }
     break;
 
   case 139:
-#line 568 "xi-grammar.y"
+#line 569 "xi-grammar.y"
     { (yyval.tvarlist) = (yyvsp[(3) - (4)].tvarlist); }
     break;
 
   case 140:
-#line 572 "xi-grammar.y"
+#line 573 "xi-grammar.y"
     { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].chare)); (yyvsp[(2) - (2)].chare)->setTemplate((yyval.templat)); }
     break;
 
   case 141:
-#line 574 "xi-grammar.y"
+#line 575 "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 576 "xi-grammar.y"
+#line 577 "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 578 "xi-grammar.y"
+#line 579 "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 580 "xi-grammar.y"
+#line 581 "xi-grammar.y"
     { (yyval.templat) = new Template((yyvsp[(1) - (2)].tvarlist), (yyvsp[(2) - (2)].message)); (yyvsp[(2) - (2)].message)->setTemplate((yyval.templat)); }
     break;
 
   case 145:
-#line 584 "xi-grammar.y"
+#line 585 "xi-grammar.y"
     { (yyval.mbrlist) = 0; }
     break;
 
   case 146:
-#line 586 "xi-grammar.y"
+#line 587 "xi-grammar.y"
     { (yyval.mbrlist) = (yyvsp[(2) - (4)].mbrlist); }
     break;
 
   case 147:
-#line 590 "xi-grammar.y"
+#line 591 "xi-grammar.y"
     { 
                  Entry *tempEntry;
                  if (!connectEntries->empty()) {
@@ -2854,52 +2856,52 @@ yyreduce:
     break;
 
   case 148:
-#line 609 "xi-grammar.y"
+#line 610 "xi-grammar.y"
     { (yyval.mbrlist) = new MemberList((yyvsp[(1) - (2)].member), (yyvsp[(2) - (2)].mbrlist)); }
     break;
 
   case 149:
-#line 613 "xi-grammar.y"
+#line 614 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].readonly); }
     break;
 
   case 150:
-#line 615 "xi-grammar.y"
+#line 616 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].readonly); }
     break;
 
   case 152:
-#line 618 "xi-grammar.y"
+#line 619 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].member); }
     break;
 
   case 153:
-#line 620 "xi-grammar.y"
+#line 621 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(2) - (3)].pupable); }
     break;
 
   case 154:
-#line 622 "xi-grammar.y"
+#line 623 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(2) - (3)].includeFile); }
     break;
 
   case 155:
-#line 624 "xi-grammar.y"
+#line 625 "xi-grammar.y"
     { (yyval.member) = new ClassDeclaration(lineno,(yyvsp[(2) - (3)].strval)); }
     break;
 
   case 156:
-#line 628 "xi-grammar.y"
+#line 629 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (3)].strval), 1); }
     break;
 
   case 157:
-#line 630 "xi-grammar.y"
+#line 631 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (6)].strval), 1); }
     break;
 
   case 158:
-#line 632 "xi-grammar.y"
+#line 633 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno,
                                    strdup((std::string((yyvsp[(3) - (9)].strval)) + '<' +
                                            ((yyvsp[(5) - (9)].tparlist))->to_string() + '>').c_str()),
@@ -2908,29 +2910,29 @@ yyreduce:
     break;
 
   case 159:
-#line 638 "xi-grammar.y"
+#line 639 "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:
-#line 641 "xi-grammar.y"
+#line 642 "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:
-#line 646 "xi-grammar.y"
+#line 647 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (3)].strval), 0); }
     break;
 
   case 162:
-#line 648 "xi-grammar.y"
+#line 649 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno, (yyvsp[(3) - (6)].strval), 0); }
     break;
 
   case 163:
-#line 650 "xi-grammar.y"
+#line 651 "xi-grammar.y"
     { (yyval.member) = new InitCall(lineno,
                                    strdup((std::string((yyvsp[(3) - (9)].strval)) + '<' +
                                            ((yyvsp[(5) - (9)].tparlist))->to_string() + '>').c_str()),
@@ -2939,7 +2941,7 @@ yyreduce:
     break;
 
   case 164:
-#line 656 "xi-grammar.y"
+#line 657 "xi-grammar.y"
     {
                   InitCall* rtn = new InitCall(lineno, (yyvsp[(6) - (9)].strval), 0);
                   rtn->setAccel();
@@ -2948,32 +2950,32 @@ yyreduce:
     break;
 
   case 165:
-#line 664 "xi-grammar.y"
+#line 665 "xi-grammar.y"
     { (yyval.pupable) = new PUPableClass(lineno,(yyvsp[(1) - (1)].ntype),0); }
     break;
 
   case 166:
-#line 666 "xi-grammar.y"
+#line 667 "xi-grammar.y"
     { (yyval.pupable) = new PUPableClass(lineno,(yyvsp[(1) - (3)].ntype),(yyvsp[(3) - (3)].pupable)); }
     break;
 
   case 167:
-#line 669 "xi-grammar.y"
+#line 670 "xi-grammar.y"
     { (yyval.includeFile) = new IncludeFile(lineno,(yyvsp[(1) - (1)].strval)); }
     break;
 
   case 168:
-#line 673 "xi-grammar.y"
+#line 674 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (2)].entry); }
     break;
 
   case 169:
-#line 675 "xi-grammar.y"
+#line 676 "xi-grammar.y"
     { (yyval.member) = (yyvsp[(1) - (1)].member); }
     break;
 
   case 170:
-#line 679 "xi-grammar.y"
+#line 680 "xi-grammar.y"
     { 
                  if ((yyvsp[(7) - (7)].sc) != 0) { 
                    (yyvsp[(7) - (7)].sc)->con1 = new SdagConstruct(SIDENT, (yyvsp[(4) - (7)].strval));
@@ -2987,7 +2989,7 @@ yyreduce:
     break;
 
   case 171:
-#line 690 "xi-grammar.y"
+#line 691 "xi-grammar.y"
     { 
                  if ((yyvsp[(5) - (5)].sc) != 0) {
                    (yyvsp[(5) - (5)].sc)->con1 = new SdagConstruct(SIDENT, (yyvsp[(3) - (5)].strval));
@@ -3001,7 +3003,7 @@ yyreduce:
     break;
 
   case 172:
-#line 701 "xi-grammar.y"
+#line 702 "xi-grammar.y"
     {
                   int attribs = SACCEL;
                   const char* name = (yyvsp[(6) - (12)].strval);
@@ -3020,142 +3022,147 @@ yyreduce:
     break;
 
   case 173:
-#line 719 "xi-grammar.y"
+#line 720 "xi-grammar.y"
     { (yyval.accelBlock) = new AccelBlock(lineno, new XStr((yyvsp[(3) - (5)].strval))); }
     break;
 
   case 174:
-#line 721 "xi-grammar.y"
+#line 722 "xi-grammar.y"
     { (yyval.accelBlock) = new AccelBlock(lineno, NULL); }
     break;
 
   case 175:
-#line 725 "xi-grammar.y"
+#line 726 "xi-grammar.y"
     { (yyval.type) = new BuiltinType("void"); }
     break;
 
   case 176:
-#line 727 "xi-grammar.y"
+#line 728 "xi-grammar.y"
     { (yyval.type) = (yyvsp[(1) - (1)].ptype); }
     break;
 
   case 177:
-#line 731 "xi-grammar.y"
+#line 732 "xi-grammar.y"
     { (yyval.intval) = 0; }
     break;
 
   case 178:
-#line 733 "xi-grammar.y"
+#line 734 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(2) - (3)].intval); }
     break;
 
   case 179:
-#line 737 "xi-grammar.y"
+#line 738 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
     break;
 
   case 180:
-#line 739 "xi-grammar.y"
+#line 740 "xi-grammar.y"
     { (yyval.intval) = (yyvsp[(1) - (3)].intval) | (yyvsp[(3) - (3)].intval); }
     break;
 
   case 181:
-#line 743 "xi-grammar.y"
+#line 744 "xi-grammar.y"
     { (yyval.intval) = STHREADED; }
     break;
 
   case 182:
-#line 745 "xi-grammar.y"
+#line 746 "xi-grammar.y"
     { (yyval.intval) = SSYNC; }
     break;
 
   case 183:
-#line 747 "xi-grammar.y"
+#line 748 "xi-grammar.y"
     { (yyval.intval) = SIGET; }
     break;
 
   case 184:
-#line 749 "xi-grammar.y"
+#line 750 "xi-grammar.y"
     { (yyval.intval) = SLOCKED; }
     break;
 
   case 185:
-#line 751 "xi-grammar.y"
+#line 752 "xi-grammar.y"
     { (yyval.intval) = SCREATEHERE; }
     break;
 
   case 186:
-#line 753 "xi-grammar.y"
+#line 754 "xi-grammar.y"
     { (yyval.intval) = SCREATEHOME; }
     break;
 
   case 187:
-#line 755 "xi-grammar.y"
+#line 756 "xi-grammar.y"
     { (yyval.intval) = SNOKEEP; }
     break;
 
   case 188:
-#line 757 "xi-grammar.y"
+#line 758 "xi-grammar.y"
     { (yyval.intval) = SNOTRACE; }
     break;
 
   case 189:
-#line 759 "xi-grammar.y"
+#line 760 "xi-grammar.y"
     { (yyval.intval) = SIMMEDIATE; }
     break;
 
   case 190:
-#line 761 "xi-grammar.y"
+#line 762 "xi-grammar.y"
     { (yyval.intval) = SSKIPSCHED; }
     break;
 
   case 191:
-#line 763 "xi-grammar.y"
+#line 764 "xi-grammar.y"
     { (yyval.intval) = SINLINE; }
     break;
 
   case 192:
-#line 765 "xi-grammar.y"
+#line 766 "xi-grammar.y"
     { (yyval.intval) = SLOCAL; }
     break;
 
   case 193:
-#line 767 "xi-grammar.y"
+#line 768 "xi-grammar.y"
     { (yyval.intval) = SPYTHON; }
     break;
 
   case 194:
-#line 769 "xi-grammar.y"
+#line 770 "xi-grammar.y"
     { (yyval.intval) = SMEM; }
     break;
 
   case 195:
-#line 773 "xi-grammar.y"
-    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
+#line 772 "xi-grammar.y"
+    { (yyval.intval) = SREDUCE; }
     break;
 
   case 196:
-#line 775 "xi-grammar.y"
+#line 776 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 197:
-#line 777 "xi-grammar.y"
+#line 778 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 198:
-#line 781 "xi-grammar.y"
-    { (yyval.strval) = ""; }
+#line 780 "xi-grammar.y"
+    { (yyval.val) = new Value((yyvsp[(1) - (1)].strval)); }
     break;
 
   case 199:
-#line 783 "xi-grammar.y"
-    { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
+#line 784 "xi-grammar.y"
+    { (yyval.strval) = ""; }
     break;
 
   case 200:
-#line 785 "xi-grammar.y"
+#line 786 "xi-grammar.y"
+    { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
+    break;
+
+  case 201:
+#line 788 "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));
@@ -3163,18 +3170,18 @@ yyreduce:
                }
     break;
 
-  case 201:
-#line 793 "xi-grammar.y"
+  case 202:
+#line 796 "xi-grammar.y"
     { (yyval.strval) = ""; }
     break;
 
-  case 202:
-#line 795 "xi-grammar.y"
+  case 203:
+#line 798 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
-  case 203:
-#line 797 "xi-grammar.y"
+  case 204:
+#line 800 "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));
@@ -3182,8 +3189,8 @@ yyreduce:
                }
     break;
 
-  case 204:
-#line 803 "xi-grammar.y"
+  case 205:
+#line 806 "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));
@@ -3191,8 +3198,8 @@ yyreduce:
                }
     break;
 
-  case 205:
-#line 809 "xi-grammar.y"
+  case 206:
+#line 812 "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));
@@ -3200,8 +3207,8 @@ yyreduce:
                }
     break;
 
-  case 206:
-#line 815 "xi-grammar.y"
+  case 207:
+#line 818 "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));
@@ -3209,16 +3216,16 @@ yyreduce:
                }
     break;
 
-  case 207:
-#line 823 "xi-grammar.y"
+  case 208:
+#line 826 "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 208:
-#line 830 "xi-grammar.y"
+  case 209:
+#line 833 "xi-grammar.y"
     { 
                    /*Start grabbing CPROGRAM segments*/
                        in_braces=1;
@@ -3226,69 +3233,69 @@ yyreduce:
                }
     break;
 
-  case 209:
-#line 838 "xi-grammar.y"
+  case 210:
+#line 841 "xi-grammar.y"
     { 
                        in_braces=0;
                        (yyval.intval) = 0;
                }
     break;
 
-  case 210:
-#line 845 "xi-grammar.y"
+  case 211:
+#line 848 "xi-grammar.y"
     { (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (1)].type));}
     break;
 
-  case 211:
-#line 847 "xi-grammar.y"
+  case 212:
+#line 850 "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 212:
-#line 849 "xi-grammar.y"
+  case 213:
+#line 852 "xi-grammar.y"
     { (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (4)].type),(yyvsp[(2) - (4)].strval),0,(yyvsp[(4) - (4)].val));}
     break;
 
-  case 213:
-#line 851 "xi-grammar.y"
+  case 214:
+#line 854 "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 214:
-#line 857 "xi-grammar.y"
+  case 215:
+#line 860 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_READONLY; }
     break;
 
-  case 215:
-#line 858 "xi-grammar.y"
+  case 216:
+#line 861 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_READWRITE; }
     break;
 
-  case 216:
-#line 859 "xi-grammar.y"
+  case 217:
+#line 862 "xi-grammar.y"
     { (yyval.intval) = Parameter::ACCEL_BUFFER_TYPE_WRITEONLY; }
     break;
 
-  case 217:
-#line 862 "xi-grammar.y"
+  case 218:
+#line 865 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr((yyvsp[(1) - (1)].strval)); }
     break;
 
-  case 218:
-#line 863 "xi-grammar.y"
+  case 219:
+#line 866 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr(""); *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "->" << (yyvsp[(4) - (4)].strval); }
     break;
 
-  case 219:
-#line 864 "xi-grammar.y"
+  case 220:
+#line 867 "xi-grammar.y"
     { (yyval.xstrptr) = new XStr(""); *((yyval.xstrptr)) << *((yyvsp[(1) - (3)].xstrptr)) << "." << (yyvsp[(3) - (3)].strval); }
     break;
 
-  case 220:
-#line 866 "xi-grammar.y"
+  case 221:
+#line 869 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "[" << *((yyvsp[(3) - (4)].xstrptr)) << "]";
@@ -3297,8 +3304,8 @@ yyreduce:
                 }
     break;
 
-  case 221:
-#line 873 "xi-grammar.y"
+  case 222:
+#line 876 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "[" << (yyvsp[(3) - (4)].strval) << "]";
@@ -3306,8 +3313,8 @@ yyreduce:
                 }
     break;
 
-  case 222:
-#line 879 "xi-grammar.y"
+  case 223:
+#line 882 "xi-grammar.y"
     {
                   (yyval.xstrptr) = new XStr("");
                   *((yyval.xstrptr)) << *((yyvsp[(1) - (4)].xstrptr)) << "(" << *((yyvsp[(3) - (4)].xstrptr)) << ")";
@@ -3316,16 +3323,16 @@ yyreduce:
                 }
     break;
 
-  case 223:
-#line 888 "xi-grammar.y"
+  case 224:
+#line 891 "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 224:
-#line 895 "xi-grammar.y"
+  case 225:
+#line 898 "xi-grammar.y"
     {
                   (yyval.pname) = new Parameter(lineno, (yyvsp[(3) - (7)].type), (yyvsp[(4) - (7)].strval));
                   (yyval.pname)->setAccelInstName((yyvsp[(6) - (7)].xstrptr));
@@ -3333,8 +3340,8 @@ yyreduce:
                 }
     break;
 
-  case 225:
-#line 901 "xi-grammar.y"
+  case 226:
+#line 904 "xi-grammar.y"
     {
                  (yyval.pname) = new Parameter(lineno, (yyvsp[(1) - (5)].type), (yyvsp[(2) - (5)].strval));
                   (yyval.pname)->setAccelInstName((yyvsp[(4) - (5)].xstrptr));
@@ -3342,8 +3349,8 @@ yyreduce:
                }
     break;
 
-  case 226:
-#line 907 "xi-grammar.y"
+  case 227:
+#line 910 "xi-grammar.y"
     {
                   (yyval.pname) = (yyvsp[(3) - (6)].pname);
                   (yyval.pname)->setAccelInstName((yyvsp[(5) - (6)].xstrptr));
@@ -3351,130 +3358,130 @@ yyreduce:
                }
     break;
 
-  case 227:
-#line 915 "xi-grammar.y"
+  case 228:
+#line 918 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (1)].pname)); }
     break;
 
-  case 228:
-#line 917 "xi-grammar.y"
+  case 229:
+#line 920 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (3)].pname),(yyvsp[(3) - (3)].plist)); }
     break;
 
-  case 229:
-#line 921 "xi-grammar.y"
+  case 230:
+#line 924 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (1)].pname)); }
     break;
 
-  case 230:
-#line 923 "xi-grammar.y"
+  case 231:
+#line 926 "xi-grammar.y"
     { (yyval.plist) = new ParamList((yyvsp[(1) - (3)].pname),(yyvsp[(3) - (3)].plist)); }
     break;
 
-  case 231:
-#line 927 "xi-grammar.y"
+  case 232:
+#line 930 "xi-grammar.y"
     { (yyval.plist) = (yyvsp[(2) - (3)].plist); }
     break;
 
-  case 232:
-#line 929 "xi-grammar.y"
+  case 233:
+#line 932 "xi-grammar.y"
     { (yyval.plist) = 0; }
     break;
 
-  case 233:
-#line 933 "xi-grammar.y"
+  case 234:
+#line 936 "xi-grammar.y"
     { (yyval.plist) = (yyvsp[(2) - (3)].plist); }
     break;
 
-  case 234:
-#line 935 "xi-grammar.y"
+  case 235:
+#line 938 "xi-grammar.y"
     { (yyval.plist) = 0; }
     break;
 
-  case 235:
-#line 939 "xi-grammar.y"
+  case 236:
+#line 942 "xi-grammar.y"
     { (yyval.val) = 0; }
     break;
 
-  case 236:
-#line 941 "xi-grammar.y"
+  case 237:
+#line 944 "xi-grammar.y"
     { (yyval.val) = new Value((yyvsp[(3) - (3)].strval)); }
     break;
 
-  case 237:
-#line 945 "xi-grammar.y"
+  case 238:
+#line 948 "xi-grammar.y"
     { (yyval.sc) = 0; }
     break;
 
-  case 238:
-#line 947 "xi-grammar.y"
+  case 239:
+#line 950 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSDAGENTRY, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 239:
-#line 949 "xi-grammar.y"
+  case 240:
+#line 952 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSDAGENTRY, (yyvsp[(2) - (3)].sc)); }
     break;
 
-  case 240:
-#line 953 "xi-grammar.y"
+  case 241:
+#line 956 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSLIST, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 241:
-#line 955 "xi-grammar.y"
+  case 242:
+#line 958 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SSLIST, (yyvsp[(1) - (2)].sc), (yyvsp[(2) - (2)].sc));  }
     break;
 
-  case 242:
-#line 959 "xi-grammar.y"
+  case 243:
+#line 962 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SOLIST, (yyvsp[(1) - (1)].sc)); }
     break;
 
-  case 243:
-#line 961 "xi-grammar.y"
+  case 244:
+#line 964 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SOLIST, (yyvsp[(1) - (2)].sc), (yyvsp[(2) - (2)].sc)); }
     break;
 
-  case 244:
-#line 965 "xi-grammar.y"
+  case 245:
+#line 968 "xi-grammar.y"
     { (yyval.sc) = 0; }
     break;
 
-  case 245:
-#line 967 "xi-grammar.y"
+  case 246:
+#line 970 "xi-grammar.y"
     { (yyval.sc) = (yyvsp[(3) - (4)].sc); }
     break;
 
-  case 246:
-#line 971 "xi-grammar.y"
+  case 247:
+#line 974 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SPUBLISHES, new SdagConstruct(SIDENT, (yyvsp[(1) - (1)].strval))); }
     break;
 
-  case 247:
-#line 973 "xi-grammar.y"
+  case 248:
+#line 976 "xi-grammar.y"
     { (yyval.sc) = new SdagConstruct(SPUBLISHES, new SdagConstruct(SIDENT, (yyvsp[(1) - (3)].strval)), (yyvsp[(3) - (3)].sc));  }
     break;
 
-  case 248:
-#line 977 "xi-grammar.y"
+  case 249:
+#line 980 "xi-grammar.y"
     { (yyval.strval) = (yyvsp[(1) - (1)].strval); }
     break;
 
-  case 249:
-#line 979 "xi-grammar.y"
+  case 250:
+#line 982 "xi-grammar.y"
     { (yyval.strval) = 0; }
     break;
 
-  case 250:
-#line 983 "xi-grammar.y"
+  case 251:
+#line 986 "xi-grammar.y"
     {
                   (yyval.sc) = buildAtomic((yyvsp[(4) - (6)].strval), (yyvsp[(6) - (6)].sc), (yyvsp[(2) - (6)].strval));
                 }
     break;
 
-  case 251:
-#line 987 "xi-grammar.y"
+  case 252:
+#line 990 "xi-grammar.y"
     {  
                   in_braces = 0;
                   if (((yyvsp[(4) - (8)].plist)->isVoid() == 0) && ((yyvsp[(4) - (8)].plist)->isMessage() == 0))
@@ -3490,117 +3497,117 @@ yyreduce:
                }
     break;
 
-  case 252:
-#line 1001 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0,0,0,0,0,(yyvsp[(2) - (4)].entrylist)); }
-    break;
-
   case 253:
-#line 1003 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(3) - (3)].sc), (yyvsp[(2) - (3)].entrylist)); }
+#line 1004 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, 0,  (yyvsp[(2) - (4)].entrylist)); }
     break;
 
   case 254:
-#line 1005 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(4) - (5)].sc), (yyvsp[(2) - (5)].entrylist)); }
+#line 1006 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(3) - (3)].sc), (yyvsp[(2) - (3)].entrylist)); }
     break;
 
   case 255:
-#line 1007 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SOVERLAP,0, 0,0,0,0,(yyvsp[(3) - (4)].sc), 0); }
+#line 1008 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SWHEN, 0, 0, 0,0,0, (yyvsp[(4) - (5)].sc), (yyvsp[(2) - (5)].entrylist)); }
     break;
 
   case 256:
-#line 1009 "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); }
+#line 1010 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SOVERLAP,0, 0,0,0,0,(yyvsp[(3) - (4)].sc), 0); }
     break;
 
   case 257:
 #line 1012 "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); }
+    { (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 258:
 #line 1015 "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); }
+    { (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 259:
 #line 1018 "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); }
+    { (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 260:
 #line 1021 "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); }
+    { (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 261:
-#line 1023 "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); }
+#line 1024 "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 262:
-#line 1025 "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); }
+#line 1026 "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 263:
-#line 1027 "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); }
+#line 1028 "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 264:
-#line 1029 "xi-grammar.y"
-    { (yyval.sc) = (yyvsp[(2) - (3)].sc); }
+#line 1030 "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 265:
-#line 1031 "xi-grammar.y"
-    { (yyval.sc) = buildAtomic((yyvsp[(2) - (3)].strval), NULL, NULL); }
+#line 1032 "xi-grammar.y"
+    { (yyval.sc) = (yyvsp[(2) - (3)].sc); }
     break;
 
   case 266:
 #line 1034 "xi-grammar.y"
-    { (yyval.sc) = 0; }
+    { (yyval.sc) = buildAtomic((yyvsp[(2) - (3)].strval), NULL, NULL); }
     break;
 
   case 267:
-#line 1036 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(2) - (2)].sc),0); }
+#line 1037 "xi-grammar.y"
+    { (yyval.sc) = 0; }
     break;
 
   case 268:
-#line 1038 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(3) - (4)].sc),0); }
+#line 1039 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(2) - (2)].sc),0); }
     break;
 
   case 269:
 #line 1041 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (1)].strval))); }
+    { (yyval.sc) = new SdagConstruct(SELSE, 0,0,0,0,0, (yyvsp[(3) - (4)].sc),0); }
     break;
 
   case 270:
-#line 1043 "xi-grammar.y"
-    { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (3)].strval)), (yyvsp[(3) - (3)].sc));  }
+#line 1044 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (1)].strval))); }
     break;
 
   case 271:
-#line 1047 "xi-grammar.y"
-    { in_int_expr = 0; (yyval.intval) = 0; }
+#line 1046 "xi-grammar.y"
+    { (yyval.sc) = new SdagConstruct(SFORWARD, new SdagConstruct(SIDENT, (yyvsp[(1) - (3)].strval)), (yyvsp[(3) - (3)].sc));  }
     break;
 
   case 272:
-#line 1051 "xi-grammar.y"
-    { in_int_expr = 1; (yyval.intval) = 0; }
+#line 1050 "xi-grammar.y"
+    { in_int_expr = 0; (yyval.intval) = 0; }
     break;
 
   case 273:
-#line 1055 "xi-grammar.y"
+#line 1054 "xi-grammar.y"
+    { in_int_expr = 1; (yyval.intval) = 0; }
+    break;
+
+  case 274:
+#line 1058 "xi-grammar.y"
     { 
                  if ((yyvsp[(2) - (2)].plist) != 0)
                     (yyval.entry) = new Entry(lineno, 0, 0, (yyvsp[(1) - (2)].strval), (yyvsp[(2) - (2)].plist), 0, 0, 0, 0); 
@@ -3610,8 +3617,8 @@ yyreduce:
                }
     break;
 
-  case 274:
-#line 1063 "xi-grammar.y"
+  case 275:
+#line 1066 "xi-grammar.y"
     { if ((yyvsp[(5) - (5)].plist) != 0)
                    (yyval.entry) = new Entry(lineno, 0, 0, (yyvsp[(1) - (5)].strval), (yyvsp[(5) - (5)].plist), 0, 0, (yyvsp[(3) - (5)].strval), 0); 
                  else
@@ -3619,39 +3626,39 @@ yyreduce:
                }
     break;
 
-  case 275:
-#line 1071 "xi-grammar.y"
+  case 276:
+#line 1074 "xi-grammar.y"
     { (yyval.entrylist) = new EntryList((yyvsp[(1) - (1)].entry)); }
     break;
 
-  case 276:
-#line 1073 "xi-grammar.y"
+  case 277:
+#line 1076 "xi-grammar.y"
     { (yyval.entrylist) = new EntryList((yyvsp[(1) - (3)].entry),(yyvsp[(3) - (3)].entrylist)); }
     break;
 
-  case 277:
-#line 1077 "xi-grammar.y"
+  case 278:
+#line 1080 "xi-grammar.y"
     { in_bracket=1; }
     break;
 
-  case 278:
-#line 1080 "xi-grammar.y"
+  case 279:
+#line 1083 "xi-grammar.y"
     { in_bracket=0; }
     break;
 
-  case 279:
-#line 1084 "xi-grammar.y"
+  case 280:
+#line 1087 "xi-grammar.y"
     { if (!macroDefined((yyvsp[(2) - (2)].strval), 1)) in_comment = 1; }
     break;
 
-  case 280:
-#line 1088 "xi-grammar.y"
+  case 281:
+#line 1091 "xi-grammar.y"
     { if (!macroDefined((yyvsp[(2) - (2)].strval), 0)) in_comment = 1; }
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 3655 "y.tab.c"
+#line 3662 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3865,7 +3872,7 @@ yyreturn:
 }
 
 
-#line 1091 "xi-grammar.y"
+#line 1094 "xi-grammar.y"
 
 void yyerror(const char *mesg)
 {
index d3cb038990aef71b0737789503df8f6eb93082f1..3fed230503b91d75bd4b9ca9d0a7c88c9e114d65 100644 (file)
      READWRITE = 324,
      WRITEONLY = 325,
      ACCELBLOCK = 326,
-     MEMCRITICAL = 327
+     MEMCRITICAL = 327,
+     REDUCTIONTARGET = 328
    };
 #endif
 /* Tokens.  */
 #define WRITEONLY 325
 #define ACCELBLOCK 326
 #define MEMCRITICAL 327
+#define REDUCTIONTARGET 328
 
 
 
@@ -226,8 +228,8 @@ typedef union YYSTYPE
   XStr* xstrptr;
   AccelBlock* accelBlock;
 }
-/* Line 1489 of yacc.c.  */
-#line 231 "y.tab.h"
+/* Line 1529 of yacc.c.  */
+#line 233 "y.tab.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 8d28c446c71e9047403249322e6215fc288941e7..c9ba2163c36902fb9a002cb6c0d829382e5e146b 100644 (file)
@@ -102,6 +102,7 @@ void splitScopedName(const char* name, const char** scope, const char** basename
 %token WRITEONLY
 %token ACCELBLOCK
 %token MEMCRITICAL
+%token REDUCTIONTARGET
 
 %type <modlist>                ModuleEList File
 %type <module>         Module
@@ -767,6 +768,8 @@ EAttrib             : THREADED
                 { $$ = SPYTHON; }
                | MEMCRITICAL
                { $$ = SMEM; }
+        | REDUCTIONTARGET
+        { $$ = SREDUCE; }
                ;
 
 DefaultParameter: LITERAL
index 6c7928d8d072b52a8acf5159faf1cec7d7e38d5e..8d13af598c56325e2f56039be9154787b8f824a0 100644 (file)
@@ -8,7 +8,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 34
+#define YY_FLEX_SUBMINOR_VERSION 33
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -30,7 +30,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#if __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -93,12 +93,11 @@ typedef unsigned int flex_uint32_t;
 
 #else  /* ! __cplusplus */
 
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
+#if __STDC__
 
 #define YY_USE_CONST
 
-#endif /* defined (__STDC__) */
+#endif /* __STDC__ */
 #endif /* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -181,13 +180,11 @@ extern FILE *yyin, *yyout;
 /* The following is because we cannot portably get our hands on size_t
  * (without autoconf's help, which isn't available because we want
  * flex-generated scanners to compile on their own).
- * Given that the standard has decreed that size_t exists since 1989,
- * I guess we can afford to depend on it. Manoj.
  */
 
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
+typedef unsigned int yy_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -842,7 +839,7 @@ int search(char *s);
 #undef yywrap
 #endif
 
-#line 846 "lex.yy.c"
+#line 843 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -902,7 +899,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -913,7 +910,7 @@ static int input (void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -997,7 +994,7 @@ YY_DECL
     
 #line 57 "xi-scan.l"
 
-#line 1001 "lex.yy.c"
+#line 998 "lex.yy.c"
 
        if ( !(yy_init) )
                {
@@ -1010,8 +1007,6 @@ YY_DECL
         /* Create the reject buffer large enough to save one state per allowed character. */
         if ( ! (yy_state_buf) )
             (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
-            if ( ! (yy_state_buf) )
-                YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
 
                if ( ! (yy_start) )
                        (yy_start) = 1; /* first start state */
@@ -1179,7 +1174,7 @@ YY_RULE_SETUP
 #line 74 "xi-scan.l"
 ECHO;
        YY_BREAK
-#line 1183 "lex.yy.c"
+#line 1178 "lex.yy.c"
                        case YY_STATE_EOF(INITIAL):
                                yyterminate();
 
@@ -1381,7 +1376,7 @@ static int yy_get_next_buffer (void)
 
                /* Read in more data. */
                YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       (yy_n_chars), (size_t) num_to_read );
+                       (yy_n_chars), num_to_read );
 
                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
                }
@@ -1405,14 +1400,6 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-               /* Extend the array by 50%, plus the number we really need. */
-               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-       }
-
        (yy_n_chars) += number_to_move;
        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1559,7 +1546,7 @@ static int yy_get_next_buffer (void)
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( yywrap( ) )
-                                               return EOF;
+                                               return 0;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -1823,9 +1810,7 @@ static void yyensure_buffer_stack (void)
                (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-                                                                 
+               
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
                                
                (yy_buffer_stack_max) = num_to_alloc;
@@ -1843,8 +1828,6 @@ static void yyensure_buffer_stack (void)
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -1889,7 +1872,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to yylex() will
  * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
+ * @param str a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -2226,6 +2209,7 @@ struct rwtable rwtable[] = {
   "writeonly",  WRITEONLY,
   "accelblock", ACCELBLOCK,
   "memcritical", MEMCRITICAL,
+  "reductiontarget", REDUCTIONTARGET,
   "",          0
 };
 
index 690a638aa95994f41b61217bb37e32ac70b4b1f5..ba8cd20f140a0447fc68e49c41dc3d681c41d18e 100644 (file)
@@ -144,6 +144,7 @@ struct rwtable rwtable[] = {
   "writeonly",  WRITEONLY,
   "accelblock", ACCELBLOCK,
   "memcritical", MEMCRITICAL,
+  "reductiontarget", REDUCTIONTARGET,
   "",          0
 };
 
index 6a35a61cfd35d861b0a78cf9aefa8217e7856f09..349cc06c07b0e4460a4d530488b56ae12c64aa41 100644 (file)
@@ -3077,6 +3077,9 @@ void Entry::genChareDecl(XStr& str)
   } else {
     // entry method declaration
     str << "    "<<retType<<" "<<name<<"("<<paramType(1,1)<<");\n";
+    if (isReductionTarget()) {
+        str << "    " << "void _" << name << "_redn_wrapper(CkReductionMsg* m);\n";
+    }
   }
 }
 
@@ -3114,6 +3117,10 @@ void Entry::genChareDefs(XStr& str)
     }
     str << "}\n";
   }
+  if (isReductionTarget()) {
+      str << makeDecl(retStr, 1) << "::" << name << "_redn_wrapper(CkReductionMsg* m)\n{\n";
+      str << "}\n\n";
+  }
 }
 
 void Entry::genChareStaticConstructorDecl(XStr& str)
index d0ac4c459d07f76e4908e06c38a20f93399c1b28..7298ae16fa088365e4b8cbebb4f0347bee5d2875 100644 (file)
@@ -904,10 +904,11 @@ class Message : public TEntity {
 #define SSKIPSCHED    0x800 //<- is a message skipping charm scheduler
 #define SPYTHON       0x1000
 #define SINLINE       0x2000 //<- inline message
-#define SIGET   0x4000 
+#define SIGET         0x4000 
 #define SLOCAL        0x8000 //<- local message
-#define SACCEL  0x10000
-#define SMEM  0x20000
+#define SACCEL        0x10000
+#define SMEM          0x20000
+#define SREDUCE       0x40000 // <- reduction target
 
 /* An entry construct */
 class Entry : public Member {
@@ -1027,6 +1028,7 @@ class Entry : public Member {
     int isAccel(void) { return (attribs & SACCEL); }
 
     int isMemCritical(void) { return (attribs & SMEM); }
+    int isReductionTarget(void) { return (attribs & SREDUCE); }
 
     void print(XStr& str);
     void genIndexDecls(XStr& str);