Added varrays messages, and tolerance for ^Ms to ensure smooth dos-unix
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 23 Feb 2001 11:27:53 +0000 (11:27 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 23 Feb 2001 11:27:53 +0000 (11:27 +0000)
transition.

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 08bcb610861886c0053cde44bccdb42a07f2bcfa..0cfa85beb4556e28530faad3382e6c6056caa8b3 100644 (file)
 #define        VOID    274
 #define        PACKED  275
 #define        VARSIZE 276
-#define        ENTRY   277
-#define        MAINCHARE       278
-#define        IDENT   279
-#define        NUMBER  280
-#define        LITERAL 281
-#define        INT     282
-#define        LONG    283
-#define        SHORT   284
-#define        CHAR    285
-#define        FLOAT   286
-#define        DOUBLE  287
-#define        UNSIGNED        288
+#define        VARRAYS 277
+#define        ENTRY   278
+#define        MAINCHARE       279
+#define        IDENT   280
+#define        NUMBER  281
+#define        LITERAL 282
+#define        INT     283
+#define        LONG    284
+#define        SHORT   285
+#define        CHAR    286
+#define        FLOAT   287
+#define        DOUBLE  288
+#define        UNSIGNED        289
 
 #line 1 "xi-grammar.y"
 
@@ -73,6 +74,8 @@ typedef union {
   TVarList *tvarlist;
   Value *val;
   ValueList *vallist;
+  MsgVar *mv;
+  MsgVarList *mvlist;
   char *strval;
   int intval;
 } YYSTYPE;
@@ -86,26 +89,26 @@ typedef union {
 
 
 
-#define        YYFINAL         267
+#define        YYFINAL         278
 #define        YYFLAG          -32768
-#define        YYNTBASE        48
+#define        YYNTBASE        49
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 288 ? yytranslate[x] : 112)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 289 ? yytranslate[x] : 115)
 
 static const char 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,     2,     2,    45,
-    46,    42,     2,    39,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,    36,    35,    40,
-    47,    41,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,    46,
+    47,    43,     2,    40,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,    37,    36,    41,
+    48,    42,     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,
-    43,     2,    44,     2,     2,     2,     2,     2,     2,     2,
+    44,     2,    45,     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,    37,     2,    38,     2,     2,     2,     2,     2,
+     2,     2,    38,     2,    39,     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,
@@ -121,7 +124,7 @@ static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34
+    27,    28,    29,    30,    31,    32,    33,    34,    35
 };
 
 #if YYDEBUG != 0
@@ -133,83 +136,85 @@ static const short yyprhs[] = {     0,
    107,   110,   113,   116,   119,   121,   123,   126,   128,   131,
    133,   135,   138,   141,   144,   146,   148,   153,   162,   164,
    166,   168,   170,   172,   173,   175,   179,   183,   184,   187,
-   192,   198,   199,   203,   205,   209,   211,   213,   214,   218,
-   220,   224,   226,   230,   237,   238,   241,   243,   247,   253,
-   259,   265,   271,   276,   280,   286,   292,   298,   304,   310,
-   316,   321,   322,   325,   326,   329,   332,   336,   339,   343,
-   345,   349,   354,   357,   360,   363,   366,   369,   371,   376,
-   377,   380,   383,   386,   389,   397,   405,   410,   411,   415,
-   417,   421,   423,   425,   427,   429,   430,   432,   434,   438,
-   439,   443,   444
+   192,   198,   199,   203,   205,   209,   211,   213,   215,   216,
+   220,   222,   226,   228,   234,   236,   239,   243,   250,   257,
+   258,   261,   263,   267,   273,   279,   285,   291,   296,   300,
+   306,   312,   318,   324,   330,   336,   341,   342,   345,   346,
+   349,   352,   356,   359,   363,   365,   369,   374,   377,   380,
+   383,   386,   389,   391,   396,   397,   400,   403,   406,   409,
+   417,   425,   430,   431,   435,   437,   441,   443,   445,   447,
+   449,   450,   452,   454,   458,   459,   463,   464
 };
 
-static const short yyrhs[] = {    49,
-     0,     0,    54,    49,     0,     0,     5,     0,     0,    35,
-     0,    25,     0,    25,     0,    53,    36,    36,    25,     0,
-     3,    52,    55,     0,     4,    52,    55,     0,    35,     0,
-    37,    56,    38,    51,     0,     0,    57,    56,     0,    50,
-    37,    56,    38,    51,     0,    50,    54,     0,    50,    74,
-    35,     0,    50,    75,    35,     0,    50,    82,    35,     0,
-    50,    85,     0,    50,    86,     0,    50,    87,     0,    50,
-    89,     0,    50,   100,     0,    70,     0,    26,     0,    27,
-     0,    58,     0,    58,    39,    59,     0,     0,    59,     0,
-     0,    40,    60,    41,     0,    28,     0,    29,     0,    30,
-     0,    31,     0,    34,    28,     0,    34,    29,     0,    34,
-    30,     0,    34,    31,     0,    29,    29,     0,    32,     0,
-    33,     0,    29,    33,     0,    20,     0,    52,    61,     0,
-    62,     0,    63,     0,    64,    42,     0,    65,    42,     0,
-    66,    42,     0,    26,     0,    52,     0,    70,    43,    67,
-    44,     0,    70,    45,    42,    52,    46,    45,    71,    46,
-     0,    64,     0,    65,     0,    66,     0,    68,     0,    69,
-     0,     0,    70,     0,    70,    39,    71,     0,    43,    67,
-    44,     0,     0,    72,    73,     0,     6,    70,    53,    73,
-     0,     6,    11,    64,    42,    52,     0,     0,    43,    77,
-    44,     0,    78,     0,    78,    39,    77,     0,    21,     0,
-    22,     0,     0,    43,    80,    44,     0,    81,     0,    81,
-    39,    80,     0,    15,     0,    11,    76,    63,     0,    11,
-    76,    63,    37,    71,    38,     0,     0,    36,    84,     0,
-    63,     0,    63,    39,    84,     0,     7,    79,    63,    83,
-   101,     0,    24,    79,    63,    83,   101,     0,     8,    79,
-    63,    83,   101,     0,     9,    79,    63,    83,   101,     0,
-    43,    26,    52,    44,     0,    43,    52,    44,     0,    10,
-    88,    63,    83,   101,     0,     7,    79,    52,    83,   101,
-     0,    24,    79,    52,    83,   101,     0,     8,    79,    52,
-    83,   101,     0,     9,    79,    52,    83,   101,     0,    10,
-    88,    52,    83,   101,     0,    11,    76,    52,    35,     0,
-     0,    47,    70,     0,     0,    47,    26,     0,    47,    27,
-     0,    12,    52,    95,     0,    69,    96,     0,    70,    52,
-    96,     0,    97,     0,    97,    39,    98,     0,    16,    40,
-    98,    41,     0,    99,    90,     0,    99,    91,     0,    99,
-    92,     0,    99,    93,     0,    99,    94,     0,    35,     0,
-    37,   102,    38,    51,     0,     0,   103,   102,     0,   104,
-    35,     0,    74,    35,     0,    75,    35,     0,    23,   105,
-    20,    52,   109,   111,   110,     0,    23,   105,    65,    52,
-   109,   111,   110,     0,    23,   105,    52,   109,     0,     0,
-    43,   106,    44,     0,   107,     0,   107,    39,   106,     0,
+static const short yyrhs[] = {    50,
+     0,     0,    55,    50,     0,     0,     5,     0,     0,    36,
+     0,    26,     0,    26,     0,    54,    37,    37,    26,     0,
+     3,    53,    56,     0,     4,    53,    56,     0,    36,     0,
+    38,    57,    39,    52,     0,     0,    58,    57,     0,    51,
+    38,    57,    39,    52,     0,    51,    55,     0,    51,    75,
+    36,     0,    51,    76,    36,     0,    51,    85,    36,     0,
+    51,    88,     0,    51,    89,     0,    51,    90,     0,    51,
+    92,     0,    51,   103,     0,    71,     0,    27,     0,    28,
+     0,    59,     0,    59,    40,    60,     0,     0,    60,     0,
+     0,    41,    61,    42,     0,    29,     0,    30,     0,    31,
+     0,    32,     0,    35,    29,     0,    35,    30,     0,    35,
+    31,     0,    35,    32,     0,    30,    30,     0,    33,     0,
+    34,     0,    30,    34,     0,    20,     0,    53,    62,     0,
+    63,     0,    64,     0,    65,    43,     0,    66,    43,     0,
+    67,    43,     0,    27,     0,    53,     0,    71,    44,    68,
+    45,     0,    71,    46,    43,    53,    47,    46,    72,    47,
+     0,    65,     0,    66,     0,    67,     0,    69,     0,    70,
+     0,     0,    71,     0,    71,    40,    72,     0,    44,    68,
+    45,     0,     0,    73,    74,     0,     6,    71,    54,    74,
+     0,     6,    11,    65,    43,    53,     0,     0,    44,    78,
+    45,     0,    79,     0,    79,    40,    78,     0,    21,     0,
+    22,     0,    23,     0,     0,    44,    81,    45,     0,    82,
+     0,    82,    40,    81,     0,    15,     0,    71,    53,    44,
+    45,    36,     0,    83,     0,    83,    84,     0,    11,    77,
+    64,     0,    11,    77,    64,    38,    72,    39,     0,    11,
+    77,    64,    38,    84,    39,     0,     0,    37,    87,     0,
+    64,     0,    64,    40,    87,     0,     7,    80,    64,    86,
+   104,     0,    25,    80,    64,    86,   104,     0,     8,    80,
+    64,    86,   104,     0,     9,    80,    64,    86,   104,     0,
+    44,    27,    53,    45,     0,    44,    53,    45,     0,    10,
+    91,    64,    86,   104,     0,     7,    80,    53,    86,   104,
+     0,    25,    80,    53,    86,   104,     0,     8,    80,    53,
+    86,   104,     0,     9,    80,    53,    86,   104,     0,    10,
+    91,    53,    86,   104,     0,    11,    77,    53,    36,     0,
+     0,    48,    71,     0,     0,    48,    27,     0,    48,    28,
+     0,    12,    53,    98,     0,    70,    99,     0,    71,    53,
+    99,     0,   100,     0,   100,    40,   101,     0,    16,    41,
+   101,    42,     0,   102,    93,     0,   102,    94,     0,   102,
+    95,     0,   102,    96,     0,   102,    97,     0,    36,     0,
+    38,   105,    39,    52,     0,     0,   106,   105,     0,   107,
+    36,     0,    75,    36,     0,    76,    36,     0,    24,   108,
+    20,    53,   112,   114,   113,     0,    24,   108,    66,    53,
+   112,   114,   113,     0,    24,   108,    53,   112,     0,     0,
+    44,   109,    45,     0,   110,     0,   110,    40,   109,     0,
     14,     0,    17,     0,    18,     0,    19,     0,     0,    20,
-     0,    65,     0,    45,   108,    46,     0,     0,    13,    47,
-    26,     0,     0,    47,    26,     0
+     0,    66,     0,    46,   111,    47,     0,     0,    13,    48,
+    27,     0,     0,    48,    27,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-    92,    96,    98,   102,   104,   108,   110,   114,   118,   120,
-   128,   130,   134,   136,   140,   142,   146,   148,   150,   152,
-   154,   156,   158,   160,   162,   164,   168,   170,   172,   176,
-   178,   182,   184,   188,   190,   194,   196,   198,   200,   202,
-   204,   206,   208,   210,   212,   214,   216,   218,   222,   226,
-   228,   232,   236,   238,   242,   244,   248,   252,   256,   258,
-   260,   262,   264,   268,   270,   272,   276,   280,   282,   286,
-   290,   294,   296,   300,   302,   306,   308,   312,   314,   318,
-   320,   324,   328,   330,   334,   336,   340,   342,   346,   348,
-   352,   356,   360,   366,   370,   374,   376,   380,   384,   388,
-   392,   396,   398,   402,   404,   406,   410,   412,   414,   418,
-   420,   424,   428,   430,   432,   434,   436,   440,   442,   446,
-   448,   452,   454,   456,   460,   462,   464,   468,   470,   474,
-   476,   480,   482,   484,   486,   490,   492,   494,   498,   502,
-   504,   508,   510
+    96,   100,   102,   106,   108,   112,   114,   118,   122,   124,
+   132,   134,   138,   140,   144,   146,   150,   152,   154,   156,
+   158,   160,   162,   164,   166,   168,   172,   174,   176,   180,
+   182,   186,   188,   192,   194,   198,   200,   202,   204,   206,
+   208,   210,   212,   214,   216,   218,   220,   222,   226,   230,
+   232,   236,   240,   242,   246,   248,   252,   256,   260,   262,
+   264,   266,   268,   272,   274,   276,   280,   284,   286,   290,
+   294,   298,   300,   304,   306,   310,   312,   314,   318,   320,
+   324,   326,   330,   334,   338,   340,   344,   346,   348,   352,
+   354,   358,   360,   364,   366,   370,   374,   378,   384,   388,
+   392,   394,   398,   402,   406,   410,   414,   416,   420,   422,
+   424,   428,   430,   432,   436,   438,   442,   446,   448,   450,
+   452,   454,   458,   460,   464,   466,   470,   472,   474,   478,
+   480,   482,   486,   488,   492,   494,   498,   500,   502,   504,
+   508,   510,   512,   516,   520,   522,   526,   528
 };
 #endif
 
@@ -219,37 +224,37 @@ static const short yyrline[] = { 0,
 static const char * const yytname[] = {   "$","error","$undefined.","MODULE",
 "MAINMODULE","EXTERN","READONLY","CHARE","GROUP","NODEGROUP","ARRAY","MESSAGE",
 "CLASS","STACKSIZE","THREADED","MIGRATABLE","TEMPLATE","SYNC","EXCLUSIVE","VIRTUAL",
-"VOID","PACKED","VARSIZE","ENTRY","MAINCHARE","IDENT","NUMBER","LITERAL","INT",
-"LONG","SHORT","CHAR","FLOAT","DOUBLE","UNSIGNED","';'","':'","'{'","'}'","','",
-"'<'","'>'","'*'","'['","']'","'('","')'","'='","File","ModuleEList","OptExtern",
+"VOID","PACKED","VARSIZE","VARRAYS","ENTRY","MAINCHARE","IDENT","NUMBER","LITERAL",
+"INT","LONG","SHORT","CHAR","FLOAT","DOUBLE","UNSIGNED","';'","':'","'{'","'}'",
+"','","'<'","'>'","'*'","'['","']'","'('","')'","'='","File","ModuleEList","OptExtern",
 "OptSemiColon","Name","QualName","Module","ConstructEList","ConstructList","Construct",
 "TParam","TParamList","TParamEList","OptTParams","BuiltinType","NamedType","SimpleType",
 "OnePtrType","PtrType","ArrayDim","ArrayType","FuncType","Type","TypeList","Dim",
 "DimList","Readonly","ReadonlyMsg","MAttribs","MAttribList","MAttrib","CAttribs",
-"CAttribList","CAttrib","Message","OptBaseList","BaseList","Chare","Group","NodeGroup",
-"ArrayIndexType","Array","TChare","TGroup","TNodeGroup","TArray","TMessage",
-"OptTypeInit","OptNameInit","TVar","TVarList","TemplateSpec","Template","MemberEList",
-"MemberList","Member","Entry","EAttribs","EAttribList","EAttrib","OptType","EParam",
-"OptStackSize","OptPure", NULL
+"CAttribList","CAttrib","Var","VarList","Message","OptBaseList","BaseList","Chare",
+"Group","NodeGroup","ArrayIndexType","Array","TChare","TGroup","TNodeGroup",
+"TArray","TMessage","OptTypeInit","OptNameInit","TVar","TVarList","TemplateSpec",
+"Template","MemberEList","MemberList","Member","Entry","EAttribs","EAttribList",
+"EAttrib","OptType","EParam","OptStackSize","OptPure", NULL
 };
 #endif
 
 static const short yyr1[] = {     0,
-    48,    49,    49,    50,    50,    51,    51,    52,    53,    53,
-    54,    54,    55,    55,    56,    56,    57,    57,    57,    57,
-    57,    57,    57,    57,    57,    57,    58,    58,    58,    59,
-    59,    60,    60,    61,    61,    62,    62,    62,    62,    62,
-    62,    62,    62,    62,    62,    62,    62,    62,    63,    64,
-    64,    65,    66,    66,    67,    67,    68,    69,    70,    70,
-    70,    70,    70,    71,    71,    71,    72,    73,    73,    74,
-    75,    76,    76,    77,    77,    78,    78,    79,    79,    80,
-    80,    81,    82,    82,    83,    83,    84,    84,    85,    85,
-    86,    87,    88,    88,    89,    90,    90,    91,    92,    93,
-    94,    95,    95,    96,    96,    96,    97,    97,    97,    98,
-    98,    99,   100,   100,   100,   100,   100,   101,   101,   102,
-   102,   103,   103,   103,   104,   104,   104,   105,   105,   106,
-   106,   107,   107,   107,   107,   108,   108,   108,   109,   110,
-   110,   111,   111
+    49,    50,    50,    51,    51,    52,    52,    53,    54,    54,
+    55,    55,    56,    56,    57,    57,    58,    58,    58,    58,
+    58,    58,    58,    58,    58,    58,    59,    59,    59,    60,
+    60,    61,    61,    62,    62,    63,    63,    63,    63,    63,
+    63,    63,    63,    63,    63,    63,    63,    63,    64,    65,
+    65,    66,    67,    67,    68,    68,    69,    70,    71,    71,
+    71,    71,    71,    72,    72,    72,    73,    74,    74,    75,
+    76,    77,    77,    78,    78,    79,    79,    79,    80,    80,
+    81,    81,    82,    83,    84,    84,    85,    85,    85,    86,
+    86,    87,    87,    88,    88,    89,    90,    91,    91,    92,
+    93,    93,    94,    95,    96,    97,    98,    98,    99,    99,
+    99,   100,   100,   100,   101,   101,   102,   103,   103,   103,
+   103,   103,   104,   104,   105,   105,   106,   106,   106,   107,
+   107,   107,   108,   108,   109,   109,   110,   110,   110,   110,
+   111,   111,   111,   112,   113,   113,   114,   114
 };
 
 static const short yyr2[] = {     0,
@@ -260,163 +265,169 @@ static const short yyr2[] = {     0,
      2,     2,     2,     2,     1,     1,     2,     1,     2,     1,
      1,     2,     2,     2,     1,     1,     4,     8,     1,     1,
      1,     1,     1,     0,     1,     3,     3,     0,     2,     4,
-     5,     0,     3,     1,     3,     1,     1,     0,     3,     1,
-     3,     1,     3,     6,     0,     2,     1,     3,     5,     5,
-     5,     5,     4,     3,     5,     5,     5,     5,     5,     5,
-     4,     0,     2,     0,     2,     2,     3,     2,     3,     1,
-     3,     4,     2,     2,     2,     2,     2,     1,     4,     0,
-     2,     2,     2,     2,     7,     7,     4,     0,     3,     1,
-     3,     1,     1,     1,     1,     0,     1,     1,     3,     0,
-     3,     0,     2
+     5,     0,     3,     1,     3,     1,     1,     1,     0,     3,
+     1,     3,     1,     5,     1,     2,     3,     6,     6,     0,
+     2,     1,     3,     5,     5,     5,     5,     4,     3,     5,
+     5,     5,     5,     5,     5,     4,     0,     2,     0,     2,
+     2,     3,     2,     3,     1,     3,     4,     2,     2,     2,
+     2,     2,     1,     4,     0,     2,     2,     2,     2,     7,
+     7,     4,     0,     3,     1,     3,     1,     1,     1,     1,
+     0,     1,     1,     3,     0,     3,     0,     2
 };
 
 static const short yydefact[] = {     2,
      0,     0,     1,     2,     8,     0,     0,     3,    13,     4,
-    11,    12,     5,     0,     0,     4,     0,    78,    78,    78,
-     0,    72,     0,    78,     4,    18,     0,     0,     0,    22,
+    11,    12,     5,     0,     0,     4,     0,    79,    79,    79,
+     0,    72,     0,    79,     4,    18,     0,     0,     0,    22,
     23,    24,    25,     0,    26,     6,    16,     0,    48,    36,
     37,    38,    39,    45,    46,     0,    34,    50,    51,    59,
     60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    19,    20,    21,    78,
-    78,    78,     0,    72,    78,   113,   114,   115,   116,   117,
+     0,     0,     0,     0,     0,     0,    19,    20,    21,    79,
+    79,    79,     0,    72,    79,   118,   119,   120,   121,   122,
      7,    14,     0,    44,    47,    40,    41,    42,    43,    32,
-    49,    52,    53,    54,     9,     0,     0,    68,    82,     0,
-    80,    85,    85,    85,     0,     0,    85,    76,    77,     0,
-    74,    83,     0,    63,     0,   110,     0,    85,     6,     0,
-     0,     0,     0,     0,     0,     0,    28,    29,    30,    33,
-     0,    27,    55,    56,     0,     0,     0,     0,    68,    70,
-    79,     0,     0,     0,     0,     0,     0,    94,     0,    73,
-     0,    64,   102,     0,   108,   104,     0,   112,     0,    17,
-    85,    85,    85,    85,     0,    85,    71,     0,    35,    57,
-     0,     0,     0,    69,    81,    87,    86,   118,   120,    89,
-    91,    92,    93,    95,    75,    65,     0,     0,   107,   105,
-   106,   109,   111,    90,     0,     0,     0,     0,   101,     0,
-    31,     0,    10,    67,     0,   128,     0,     0,     0,   120,
-     0,    64,    84,   103,    96,    98,    99,   100,    97,    64,
-    88,     0,     0,   123,   124,     6,   121,   122,    66,     0,
-   132,   133,   134,   135,     0,   130,    48,    34,     0,     0,
-   119,    58,   129,     0,     0,   136,   127,     0,   131,   142,
-    48,   138,     0,   142,     0,   140,   139,   140,   143,     0,
-   125,   126,     0,   141,     0,     0,     0
+    49,    52,    53,    54,     9,     0,     0,    68,    83,     0,
+    81,    90,    90,    90,     0,     0,    90,    76,    77,    78,
+     0,    74,    87,     0,    63,     0,   115,     0,    90,     6,
+     0,     0,     0,     0,     0,     0,     0,    28,    29,    30,
+    33,     0,    27,    55,    56,     0,     0,     0,     0,    68,
+    70,    80,     0,     0,     0,     0,     0,     0,    99,     0,
+    73,     0,    64,   107,     0,   113,   109,     0,   117,     0,
+    17,    90,    90,    90,    90,     0,    90,    71,     0,    35,
+    57,     0,     0,     0,    69,    82,    92,    91,   123,   125,
+    94,    96,    97,    98,   100,    75,    65,     0,    85,     0,
+     0,   112,   110,   111,   114,   116,    95,     0,     0,     0,
+     0,   106,     0,    31,     0,    10,    67,     0,   133,     0,
+     0,     0,   125,     0,    64,     0,    88,     0,    86,    89,
+   108,   101,   103,   104,   105,   102,    64,    93,     0,     0,
+   128,   129,     6,   126,   127,    65,    66,     0,     0,   137,
+   138,   139,   140,     0,   135,    48,    34,     0,     0,   124,
+     0,    58,   134,     0,     0,   141,   132,     0,    84,   136,
+   147,    48,   143,     0,   147,     0,   145,   144,   145,   148,
+     0,   130,   131,     0,   146,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   265,
-     3,    14,    82,    47,    98,     4,    11,    15,    16,   129,
-   130,   131,    91,    48,    49,    50,    51,    52,   135,    53,
-    54,   186,   187,   139,   140,   207,   208,    63,   110,   111,
-    57,   100,   101,    29,   144,   177,    30,    31,    32,    61,
-    33,    76,    77,    78,    79,    80,   189,   155,   116,   117,
-    34,    35,   180,   209,   210,   211,   223,   235,   236,   253,
-   247,   261,   256
+static const short yydefgoto[] = {   276,
+     3,    14,    82,    47,    98,     4,    11,    15,    16,   130,
+   131,   132,    91,    48,    49,    50,    51,    52,   136,    53,
+    54,   116,   188,   140,   141,   210,   211,    63,   111,   112,
+    57,   100,   101,   189,   190,    29,   145,   178,    30,    31,
+    32,    61,    33,    76,    77,    78,    79,    80,   192,   156,
+   117,   118,    34,    35,   181,   212,   213,   214,   230,   244,
+   245,   264,   257,   272,   267
 };
 
-static const short yypact[] = {    44,
-    40,    40,-32768,    44,-32768,    64,    64,-32768,-32768,    14,
--32768,-32768,-32768,    33,    65,    14,    77,   -19,   -19,   -19,
-    70,    74,    86,   -19,    14,-32768,    99,   118,   125,-32768,
--32768,-32768,-32768,   148,-32768,   126,-32768,   165,-32768,-32768,
-    -7,-32768,-32768,-32768,-32768,    32,   100,-32768,-32768,   109,
-   120,   121,-32768,-32768,   -12,   127,    40,    40,    40,   105,
-    40,    72,    40,   116,    40,   128,-32768,-32768,-32768,   -19,
-   -19,   -19,    70,    74,   -19,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   122,-32768,-32768,-32768,-32768,-32768,-32768,   150,
--32768,-32768,-32768,-32768,-32768,   107,   123,    48,-32768,   124,
-   130,   131,   131,   131,    40,   129,   131,-32768,-32768,   142,
-   132,   151,    40,    17,    10,   152,   159,   131,   126,    40,
-    40,    40,    40,    40,    40,    40,-32768,-32768,   153,-32768,
-   160,   -20,-32768,-32768,   145,    40,   166,   107,   161,-32768,
--32768,   127,    40,    92,    92,    92,   162,-32768,    92,-32768,
-    72,   165,   158,   112,-32768,   172,   116,-32768,    92,-32768,
-   131,   131,   131,   131,   174,   131,-32768,   150,-32768,-32768,
-   175,   182,   176,-32768,-32768,   185,-32768,-32768,    15,-32768,
--32768,-32768,-32768,-32768,-32768,    53,   187,   165,-32768,-32768,
--32768,-32768,-32768,-32768,    92,    92,    92,    92,-32768,    92,
--32768,   188,-32768,-32768,    40,   191,   200,   202,   203,    15,
-   205,   165,-32768,   -20,-32768,-32768,-32768,-32768,-32768,   165,
--32768,    68,   183,-32768,-32768,   126,-32768,-32768,-32768,   192,
--32768,-32768,-32768,-32768,   199,   206,    40,     6,   109,    40,
--32768,-32768,-32768,    68,   197,   198,-32768,   197,-32768,   201,
-   204,-32768,   207,   201,   218,   233,-32768,   233,-32768,   208,
--32768,-32768,   221,-32768,   249,   251,-32768
+static const short yypact[] = {    25,
+   -11,   -11,-32768,    25,-32768,    78,    78,-32768,-32768,     9,
+-32768,-32768,-32768,    36,    59,     9,   117,    10,    10,    10,
+    61,    83,    93,    10,     9,-32768,   105,   109,   123,-32768,
+-32768,-32768,-32768,    16,-32768,   140,-32768,   158,-32768,-32768,
+    60,-32768,-32768,-32768,-32768,   100,   112,-32768,-32768,   136,
+   138,   139,-32768,-32768,     5,   165,   -11,   -11,   -11,    92,
+   -11,    43,   -11,    77,   -11,   144,-32768,-32768,-32768,    10,
+    10,    10,    61,    83,    10,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   142,-32768,-32768,-32768,-32768,-32768,-32768,   137,
+-32768,-32768,-32768,-32768,-32768,   135,   152,    23,-32768,   153,
+   157,   162,   162,   162,   -11,   155,   162,-32768,-32768,-32768,
+   159,   163,   177,   -11,    15,    12,   174,   186,   162,   140,
+   -11,   -11,   -11,   -11,   -11,   -11,   -11,-32768,-32768,   179,
+-32768,   188,    89,-32768,-32768,   171,   -11,   194,   135,   189,
+-32768,-32768,   165,   -11,   106,   106,   106,   187,-32768,   106,
+-32768,    43,   158,   190,   146,-32768,   191,    77,-32768,   106,
+-32768,   162,   162,   162,   162,   198,   162,-32768,   137,-32768,
+-32768,   193,   209,   196,-32768,-32768,   197,-32768,-32768,    29,
+-32768,-32768,-32768,-32768,-32768,-32768,   114,   203,   158,   204,
+   158,-32768,-32768,-32768,-32768,-32768,-32768,   106,   106,   106,
+   106,-32768,   106,-32768,   200,-32768,-32768,   -11,   205,   208,
+   211,   212,    29,   214,   158,   210,-32768,    12,-32768,-32768,
+    89,-32768,-32768,-32768,-32768,-32768,   158,-32768,    82,   176,
+-32768,-32768,   140,-32768,-32768,    47,-32768,   207,   206,-32768,
+-32768,-32768,-32768,   213,   215,   -11,    40,   136,   -11,-32768,
+   220,-32768,-32768,    82,   216,   192,-32768,   216,-32768,-32768,
+   217,   219,-32768,   221,   217,   230,   223,-32768,   223,-32768,
+   222,-32768,-32768,   232,-32768,   260,   261,-32768
 };
 
 static const short yypgoto[] = {-32768,
-   248,-32768,  -110,    -1,-32768,   240,   250,    29,-32768,-32768,
-    88,-32768,-32768,-32768,   -53,   -36,  -212,-32768,   133,-32768,
-   -57,   -14,  -131,-32768,   119,   245,   246,   189,   110,-32768,
-     8,   134,-32768,-32768,   -89,    57,-32768,-32768,-32768,   193,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   108,-32768,   111,
--32768,-32768,  -129,    55,-32768,-32768,-32768,    23,-32768,-32768,
-  -130,    11,    16
+   259,-32768,  -116,    -1,-32768,   250,   262,    -4,-32768,-32768,
+    98,-32768,-32768,-32768,   -52,   -36,  -220,-32768,   132,-32768,
+   -56,   -14,  -165,-32768,   133,   258,   263,   201,   122,-32768,
+    13,   141,-32768,-32768,    87,-32768,   -85,    70,-32768,-32768,
+-32768,   218,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   124,
+-32768,   121,-32768,-32768,  -130,    67,-32768,-32768,-32768,    28,
+-32768,-32768,  -183,    14,    20
 };
 
 
-#define        YYLAST          276
+#define        YYLAST          291
 
 
 static const short yytable[] = {     6,
-     7,    83,    55,   102,   103,   104,   114,   107,   160,   112,
-   240,   118,    95,   145,   146,   181,   182,   149,    13,   184,
-    17,    84,    96,    56,    97,    85,    58,    59,   159,   194,
-    96,    65,    97,   252,     5,     1,     2,   206,    17,    18,
-    19,    20,    21,    22,    37,    90,     1,     2,    23,   115,
-   246,   -15,    96,    66,    97,  -104,    24,  -104,   106,    86,
-    87,    88,    89,   154,     5,   215,   216,   217,   218,    25,
-   219,   195,   196,   197,   198,   132,   200,   120,   121,   122,
-   229,   231,   125,   137,   232,   233,   234,    38,   230,   176,
-   138,   212,   108,   109,   134,    96,    39,    97,     9,   114,
-    10,     5,    36,   147,    40,    41,    42,    43,    44,    45,
-    46,   153,    60,   156,   250,   241,    62,   254,   161,   162,
-   163,   164,   165,   166,   167,    64,   178,   113,   179,     5,
-   105,     5,   133,    67,   171,    39,   134,   190,   191,    90,
-     5,    99,   115,    40,    41,    42,    43,    44,    45,    46,
-    92,   176,    68,   132,    70,    71,    72,    73,    74,    69,
-    81,    93,    94,   126,   136,   119,   143,   141,   142,    39,
-   151,    75,   148,   214,     5,   127,   128,    40,    41,    42,
-    43,    44,    45,    46,    39,   150,   239,   152,   170,     5,
-   157,   168,    40,    41,    42,    43,    44,    45,    46,   158,
-   169,   172,   237,   138,   188,   183,   203,     5,   199,   239,
-    40,    41,    42,    43,    44,    45,    46,   251,   154,   204,
-   202,   238,     5,   205,   213,    40,    41,    42,    43,    44,
-    45,    46,   220,   222,   224,   245,   225,   242,   248,   228,
-   226,   246,   243,   259,   244,   260,   264,   255,   266,  -137,
-   267,     8,   257,    26,   263,   201,    12,   174,    27,    28,
-   185,   221,   124,   192,   227,   123,   249,   193,   262,   258,
-   173,     0,     0,     0,     0,   175
+     7,    83,    55,   161,   102,   103,   104,   115,   107,   249,
+   113,    37,   119,    13,     5,   182,   183,   146,   147,   185,
+    66,   150,    70,    71,    72,    73,    74,     1,     2,   197,
+    95,    58,    59,   160,    17,   263,    65,     5,     1,     2,
+    75,    17,    18,    19,    20,    21,    22,   -15,    96,   237,
+    97,    23,   209,    56,  -109,    96,  -109,    97,   106,   138,
+    24,   239,   155,   108,   109,   110,   139,   222,   223,   224,
+   225,   261,   226,    25,   265,   133,   198,   199,   200,   201,
+    90,   203,   121,   122,   123,   256,   215,   126,   114,    84,
+    96,   177,    97,    85,   135,   240,    39,    36,   241,   242,
+   243,   115,     5,   148,    60,    40,    41,    42,    43,    44,
+    45,    46,   154,     9,   157,    10,   250,     5,   105,   162,
+   163,   164,   165,   166,   167,   168,    62,    38,    86,    87,
+    88,    89,    96,    64,    97,   172,    39,   135,   187,     5,
+    67,   179,     5,   180,    68,    40,    41,    42,    43,    44,
+    45,    46,    90,   215,   133,   177,    39,    96,    69,    97,
+     5,   134,     5,   128,   129,    40,    41,    42,    43,    44,
+    45,    46,   193,   194,   218,    81,   221,    39,    92,    99,
+    93,    94,   120,     5,   127,   216,    40,    41,    42,    43,
+    44,    45,    46,   248,   137,   246,   143,   142,   144,   149,
+   236,     5,   152,   151,    40,    41,    42,    43,    44,    45,
+    46,   262,   236,   158,   153,   171,   216,     5,   169,   248,
+    40,    41,    42,    43,    44,    45,    46,   159,   247,   170,
+   173,   184,   139,   202,   206,   271,   208,   191,   155,   205,
+   207,   217,   220,   231,   255,   227,   232,   258,   229,   235,
+   233,   251,   252,   238,   254,   259,   270,   253,   275,   277,
+   278,   256,     8,    26,   266,  -142,   204,   268,    12,   274,
+   174,    27,   175,   186,   125,   219,    28,   228,   196,   234,
+   195,   260,   273,   176,   269,     0,     0,     0,     0,     0,
+   124
 };
 
 static const short yycheck[] = {     1,
-     2,    38,    17,    57,    58,    59,    64,    61,   119,    63,
-   223,    65,    25,   103,   104,   145,   146,   107,     5,   149,
-     6,    29,    43,    43,    45,    33,    19,    20,   118,   159,
-    43,    24,    45,   246,    25,     3,     4,    23,     6,     7,
-     8,     9,    10,    11,    16,    40,     3,     4,    16,    64,
-    45,    38,    43,    25,    45,    39,    24,    41,    60,    28,
-    29,    30,    31,    47,    25,   195,   196,   197,   198,    37,
-   200,   161,   162,   163,   164,    90,   166,    70,    71,    72,
-   212,    14,    75,    36,    17,    18,    19,    11,   220,   143,
-    43,    39,    21,    22,    96,    43,    20,    45,    35,   157,
-    37,    25,    38,   105,    28,    29,    30,    31,    32,    33,
-    34,   113,    43,   115,   245,   226,    43,   248,   120,   121,
-   122,   123,   124,   125,   126,    40,    35,    12,    37,    25,
-    26,    25,    26,    35,   136,    20,   138,    26,    27,    40,
-    25,    15,   157,    28,    29,    30,    31,    32,    33,    34,
-    42,   205,    35,   168,     7,     8,     9,    10,    11,    35,
-    35,    42,    42,    42,    42,    38,    36,    44,    39,    20,
-    39,    24,    44,   188,    25,    26,    27,    28,    29,    30,
-    31,    32,    33,    34,    20,    44,   223,    37,    44,    25,
-    39,    39,    28,    29,    30,    31,    32,    33,    34,    41,
-    41,    36,    20,    43,    47,    44,    25,    25,    35,   246,
-    28,    29,    30,    31,    32,    33,    34,    20,    47,    44,
-    46,   223,    25,    39,    38,    28,    29,    30,    31,    32,
-    33,    34,    45,    43,    35,   237,    35,    46,   240,    35,
-    38,    45,    44,    26,    39,    13,    26,    47,     0,    46,
-     0,     4,    46,    14,    47,   168,     7,   139,    14,    14,
-   151,   205,    74,   156,   210,    73,   244,   157,   258,   254,
-   138,    -1,    -1,    -1,    -1,   142
+     2,    38,    17,   120,    57,    58,    59,    64,    61,   230,
+    63,    16,    65,     5,    26,   146,   147,   103,   104,   150,
+    25,   107,     7,     8,     9,    10,    11,     3,     4,   160,
+    26,    19,    20,   119,     6,   256,    24,    26,     3,     4,
+    25,     6,     7,     8,     9,    10,    11,    39,    44,   215,
+    46,    16,    24,    44,    40,    44,    42,    46,    60,    37,
+    25,   227,    48,    21,    22,    23,    44,   198,   199,   200,
+   201,   255,   203,    38,   258,    90,   162,   163,   164,   165,
+    41,   167,    70,    71,    72,    46,    40,    75,    12,    30,
+    44,   144,    46,    34,    96,    14,    20,    39,    17,    18,
+    19,   158,    26,   105,    44,    29,    30,    31,    32,    33,
+    34,    35,   114,    36,   116,    38,   233,    26,    27,   121,
+   122,   123,   124,   125,   126,   127,    44,    11,    29,    30,
+    31,    32,    44,    41,    46,   137,    20,   139,   153,    26,
+    36,    36,    26,    38,    36,    29,    30,    31,    32,    33,
+    34,    35,    41,    40,   169,   208,    20,    44,    36,    46,
+    26,    27,    26,    27,    28,    29,    30,    31,    32,    33,
+    34,    35,    27,    28,   189,    36,   191,    20,    43,    15,
+    43,    43,    39,    26,    43,   187,    29,    30,    31,    32,
+    33,    34,    35,   230,    43,    20,    40,    45,    37,    45,
+   215,    26,    40,    45,    29,    30,    31,    32,    33,    34,
+    35,    20,   227,    40,    38,    45,   218,    26,    40,   256,
+    29,    30,    31,    32,    33,    34,    35,    42,   230,    42,
+    37,    45,    44,    36,    26,    13,    40,    48,    48,    47,
+    45,    39,    39,    36,   246,    46,    36,   249,    44,    36,
+    39,    45,    47,    44,    40,    36,    27,    45,    27,     0,
+     0,    46,     4,    14,    48,    47,   169,    47,     7,    48,
+   139,    14,   140,   152,    74,   189,    14,   208,   158,   213,
+   157,   254,   269,   143,   265,    -1,    -1,    -1,    -1,    -1,
+    73
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/home/csar2/bhandark/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
 /* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
@@ -630,7 +641,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 \f
-#line 217 "/home/csar2/bhandark/share/bison.simple"
+#line 217 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -959,43 +970,43 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 93 "xi-grammar.y"
+#line 97 "xi-grammar.y"
 { yyval.modlist = yyvsp[0].modlist; modlist = yyvsp[0].modlist; ;
     break;}
 case 2:
-#line 97 "xi-grammar.y"
+#line 101 "xi-grammar.y"
 { yyval.modlist = 0; ;
     break;}
 case 3:
-#line 99 "xi-grammar.y"
+#line 103 "xi-grammar.y"
 { yyval.modlist = new ModuleList(lineno, yyvsp[-1].module, yyvsp[0].modlist); ;
     break;}
 case 4:
-#line 103 "xi-grammar.y"
+#line 107 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 5:
-#line 105 "xi-grammar.y"
+#line 109 "xi-grammar.y"
 { yyval.intval = 1; ;
     break;}
 case 6:
-#line 109 "xi-grammar.y"
+#line 113 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 7:
-#line 111 "xi-grammar.y"
+#line 115 "xi-grammar.y"
 { yyval.intval = 1; ;
     break;}
 case 8:
-#line 115 "xi-grammar.y"
+#line 119 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 9:
-#line 119 "xi-grammar.y"
+#line 123 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 10:
-#line 121 "xi-grammar.y"
+#line 125 "xi-grammar.y"
 {
                  char *tmp = new char[strlen(yyvsp[-3].strval)+strlen(yyvsp[0].strval)+3];
                  sprintf(tmp,"%s::%s", yyvsp[-3].strval, yyvsp[0].strval);
@@ -1003,546 +1014,566 @@ case 10:
                ;
     break;}
 case 11:
-#line 129 "xi-grammar.y"
+#line 133 "xi-grammar.y"
 { yyval.module = new Module(lineno, yyvsp[-1].strval, yyvsp[0].conslist); ;
     break;}
 case 12:
-#line 131 "xi-grammar.y"
+#line 135 "xi-grammar.y"
 { yyval.module = new Module(lineno, yyvsp[-1].strval, yyvsp[0].conslist); yyval.module->setMain(); ;
     break;}
 case 13:
-#line 135 "xi-grammar.y"
+#line 139 "xi-grammar.y"
 { yyval.conslist = 0; ;
     break;}
 case 14:
-#line 137 "xi-grammar.y"
+#line 141 "xi-grammar.y"
 { yyval.conslist = yyvsp[-2].conslist; ;
     break;}
 case 15:
-#line 141 "xi-grammar.y"
+#line 145 "xi-grammar.y"
 { yyval.conslist = 0; ;
     break;}
 case 16:
-#line 143 "xi-grammar.y"
+#line 147 "xi-grammar.y"
 { yyval.conslist = new ConstructList(lineno, yyvsp[-1].construct, yyvsp[0].conslist); ;
     break;}
 case 17:
-#line 147 "xi-grammar.y"
+#line 151 "xi-grammar.y"
 { if(yyvsp[-2].conslist) yyvsp[-2].conslist->setExtern(yyvsp[-4].intval); yyval.construct = yyvsp[-2].conslist; ;
     break;}
 case 18:
-#line 149 "xi-grammar.y"
+#line 153 "xi-grammar.y"
 { yyvsp[0].module->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].module; ;
     break;}
 case 19:
-#line 151 "xi-grammar.y"
+#line 155 "xi-grammar.y"
 { yyvsp[-1].readonly->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].readonly; ;
     break;}
 case 20:
-#line 153 "xi-grammar.y"
+#line 157 "xi-grammar.y"
 { yyvsp[-1].readonly->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].readonly; ;
     break;}
 case 21:
-#line 155 "xi-grammar.y"
+#line 159 "xi-grammar.y"
 { yyvsp[-1].message->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].message; ;
     break;}
 case 22:
-#line 157 "xi-grammar.y"
+#line 161 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 23:
-#line 159 "xi-grammar.y"
+#line 163 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 24:
-#line 161 "xi-grammar.y"
+#line 165 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 25:
-#line 163 "xi-grammar.y"
+#line 167 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 26:
-#line 165 "xi-grammar.y"
+#line 169 "xi-grammar.y"
 { yyvsp[0].templat->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].templat; ;
     break;}
 case 27:
-#line 169 "xi-grammar.y"
+#line 173 "xi-grammar.y"
 { yyval.tparam = new TParamType(yyvsp[0].type); ;
     break;}
 case 28:
-#line 171 "xi-grammar.y"
+#line 175 "xi-grammar.y"
 { yyval.tparam = new TParamVal(yyvsp[0].strval); ;
     break;}
 case 29:
-#line 173 "xi-grammar.y"
+#line 177 "xi-grammar.y"
 { yyval.tparam = new TParamVal(yyvsp[0].strval); ;
     break;}
 case 30:
-#line 177 "xi-grammar.y"
+#line 181 "xi-grammar.y"
 { yyval.tparlist = new TParamList(yyvsp[0].tparam); ;
     break;}
 case 31:
-#line 179 "xi-grammar.y"
+#line 183 "xi-grammar.y"
 { yyval.tparlist = new TParamList(yyvsp[-2].tparam, yyvsp[0].tparlist); ;
     break;}
 case 32:
-#line 183 "xi-grammar.y"
+#line 187 "xi-grammar.y"
 { yyval.tparlist = 0; ;
     break;}
 case 33:
-#line 185 "xi-grammar.y"
+#line 189 "xi-grammar.y"
 { yyval.tparlist = yyvsp[0].tparlist; ;
     break;}
 case 34:
-#line 189 "xi-grammar.y"
+#line 193 "xi-grammar.y"
 { yyval.tparlist = 0; ;
     break;}
 case 35:
-#line 191 "xi-grammar.y"
+#line 195 "xi-grammar.y"
 { yyval.tparlist = yyvsp[-1].tparlist; ;
     break;}
 case 36:
-#line 195 "xi-grammar.y"
+#line 199 "xi-grammar.y"
 { yyval.type = new BuiltinType("int"); ;
     break;}
 case 37:
-#line 197 "xi-grammar.y"
+#line 201 "xi-grammar.y"
 { yyval.type = new BuiltinType("long"); ;
     break;}
 case 38:
-#line 199 "xi-grammar.y"
+#line 203 "xi-grammar.y"
 { yyval.type = new BuiltinType("short"); ;
     break;}
 case 39:
-#line 201 "xi-grammar.y"
+#line 205 "xi-grammar.y"
 { yyval.type = new BuiltinType("char"); ;
     break;}
 case 40:
-#line 203 "xi-grammar.y"
+#line 207 "xi-grammar.y"
 { yyval.type = new BuiltinType("unsigned int"); ;
     break;}
 case 41:
-#line 205 "xi-grammar.y"
+#line 209 "xi-grammar.y"
 { yyval.type = new BuiltinType("long"); ;
     break;}
 case 42:
-#line 207 "xi-grammar.y"
+#line 211 "xi-grammar.y"
 { yyval.type = new BuiltinType("short"); ;
     break;}
 case 43:
-#line 209 "xi-grammar.y"
+#line 213 "xi-grammar.y"
 { yyval.type = new BuiltinType("char"); ;
     break;}
 case 44:
-#line 211 "xi-grammar.y"
+#line 215 "xi-grammar.y"
 { yyval.type = new BuiltinType("long long"); ;
     break;}
 case 45:
-#line 213 "xi-grammar.y"
+#line 217 "xi-grammar.y"
 { yyval.type = new BuiltinType("float"); ;
     break;}
 case 46:
-#line 215 "xi-grammar.y"
+#line 219 "xi-grammar.y"
 { yyval.type = new BuiltinType("double"); ;
     break;}
 case 47:
-#line 217 "xi-grammar.y"
+#line 221 "xi-grammar.y"
 { yyval.type = new BuiltinType("long double"); ;
     break;}
 case 48:
-#line 219 "xi-grammar.y"
+#line 223 "xi-grammar.y"
 { yyval.type = new BuiltinType("void"); ;
     break;}
 case 49:
-#line 223 "xi-grammar.y"
+#line 227 "xi-grammar.y"
 { yyval.ntype = new NamedType(yyvsp[-1].strval, yyvsp[0].tparlist); ;
     break;}
 case 50:
-#line 227 "xi-grammar.y"
+#line 231 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 51:
-#line 229 "xi-grammar.y"
+#line 233 "xi-grammar.y"
 { yyval.type = yyvsp[0].ntype; ;
     break;}
 case 52:
-#line 233 "xi-grammar.y"
+#line 237 "xi-grammar.y"
 { yyval.ptype = new PtrType(yyvsp[-1].type); ;
     break;}
 case 53:
-#line 237 "xi-grammar.y"
+#line 241 "xi-grammar.y"
 { yyvsp[-1].ptype->indirect(); yyval.ptype = yyvsp[-1].ptype; ;
     break;}
 case 54:
-#line 239 "xi-grammar.y"
+#line 243 "xi-grammar.y"
 { yyvsp[-1].ptype->indirect(); yyval.ptype = yyvsp[-1].ptype; ;
     break;}
 case 55:
-#line 243 "xi-grammar.y"
+#line 247 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 56:
-#line 245 "xi-grammar.y"
+#line 249 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 57:
-#line 249 "xi-grammar.y"
+#line 253 "xi-grammar.y"
 { yyval.type = new ArrayType(yyvsp[-3].type, yyvsp[-1].val); ;
     break;}
 case 58:
-#line 253 "xi-grammar.y"
+#line 257 "xi-grammar.y"
 { yyval.ftype = new FuncType(yyvsp[-7].type, yyvsp[-4].strval, yyvsp[-1].typelist); ;
     break;}
 case 59:
-#line 257 "xi-grammar.y"
+#line 261 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 60:
-#line 259 "xi-grammar.y"
+#line 263 "xi-grammar.y"
 { yyval.type = (Type*) yyvsp[0].ptype; ;
     break;}
 case 61:
-#line 261 "xi-grammar.y"
+#line 265 "xi-grammar.y"
 { yyval.type = (Type*) yyvsp[0].ptype; ;
     break;}
 case 62:
-#line 263 "xi-grammar.y"
+#line 267 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 63:
-#line 265 "xi-grammar.y"
+#line 269 "xi-grammar.y"
 { yyval.type = yyvsp[0].ftype; ;
     break;}
 case 64:
-#line 269 "xi-grammar.y"
+#line 273 "xi-grammar.y"
 { yyval.typelist = 0; ;
     break;}
 case 65:
-#line 271 "xi-grammar.y"
+#line 275 "xi-grammar.y"
 { yyval.typelist = new TypeList(yyvsp[0].type); ;
     break;}
 case 66:
-#line 273 "xi-grammar.y"
+#line 277 "xi-grammar.y"
 { yyval.typelist = new TypeList(yyvsp[-2].type, yyvsp[0].typelist); ;
     break;}
 case 67:
-#line 277 "xi-grammar.y"
+#line 281 "xi-grammar.y"
 { yyval.val = yyvsp[-1].val; ;
     break;}
 case 68:
-#line 281 "xi-grammar.y"
+#line 285 "xi-grammar.y"
 { yyval.vallist = 0; ;
     break;}
 case 69:
-#line 283 "xi-grammar.y"
+#line 287 "xi-grammar.y"
 { yyval.vallist = new ValueList(yyvsp[-1].val, yyvsp[0].vallist); ;
     break;}
 case 70:
-#line 287 "xi-grammar.y"
+#line 291 "xi-grammar.y"
 { yyval.readonly = new Readonly(lineno, yyvsp[-2].type, yyvsp[-1].strval, yyvsp[0].vallist); ;
     break;}
 case 71:
-#line 291 "xi-grammar.y"
+#line 295 "xi-grammar.y"
 { yyval.readonly = new Readonly(lineno, yyvsp[-2].type, yyvsp[0].strval, 0, 1); ;
     break;}
 case 72:
-#line 295 "xi-grammar.y"
+#line 299 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 73:
-#line 297 "xi-grammar.y"
+#line 301 "xi-grammar.y"
 { yyval.intval = yyvsp[-1].intval; ;
     break;}
 case 74:
-#line 301 "xi-grammar.y"
+#line 305 "xi-grammar.y"
 { yyval.intval = yyvsp[0].intval; ;
     break;}
 case 75:
-#line 303 "xi-grammar.y"
+#line 307 "xi-grammar.y"
 { yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
     break;}
 case 76:
-#line 307 "xi-grammar.y"
+#line 311 "xi-grammar.y"
 { yyval.intval = SPACKED; ;
     break;}
 case 77:
-#line 309 "xi-grammar.y"
+#line 313 "xi-grammar.y"
 { yyval.intval = SVARSIZE; ;
     break;}
 case 78:
-#line 313 "xi-grammar.y"
-{ yyval.intval = 0; ;
+#line 315 "xi-grammar.y"
+{ yyval.intval = SVARRAYS; ;
     break;}
 case 79:
-#line 315 "xi-grammar.y"
-{ yyval.intval = yyvsp[-1].intval; ;
+#line 319 "xi-grammar.y"
+{ yyval.intval = 0; ;
     break;}
 case 80:
-#line 319 "xi-grammar.y"
-{ yyval.intval = yyvsp[0].intval; ;
+#line 321 "xi-grammar.y"
+{ yyval.intval = yyvsp[-1].intval; ;
     break;}
 case 81:
-#line 321 "xi-grammar.y"
-{ yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
+#line 325 "xi-grammar.y"
+{ yyval.intval = yyvsp[0].intval; ;
     break;}
 case 82:
-#line 325 "xi-grammar.y"
-{ yyval.intval = 0x01; ;
+#line 327 "xi-grammar.y"
+{ yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
     break;}
 case 83:
-#line 329 "xi-grammar.y"
-{ yyval.message = new Message(lineno, yyvsp[0].ntype, yyvsp[-1].intval); ;
+#line 331 "xi-grammar.y"
+{ yyval.intval = 0x01; ;
     break;}
 case 84:
-#line 331 "xi-grammar.y"
-{ yyval.message = new Message(lineno, yyvsp[-3].ntype, yyvsp[-4].intval, yyvsp[-1].typelist); ;
+#line 335 "xi-grammar.y"
+{ yyval.mv = new MsgVar(yyvsp[-4].type, yyvsp[-3].strval); ;
     break;}
 case 85:
-#line 335 "xi-grammar.y"
-{ yyval.typelist = 0; ;
+#line 339 "xi-grammar.y"
+{ yyval.mvlist = new MsgVarList(yyvsp[0].mv); ;
     break;}
 case 86:
-#line 337 "xi-grammar.y"
-{ yyval.typelist = yyvsp[0].typelist; ;
+#line 341 "xi-grammar.y"
+{ yyval.mvlist = new MsgVarList(yyvsp[-1].mv, yyvsp[0].mvlist); ;
     break;}
 case 87:
-#line 341 "xi-grammar.y"
-{ yyval.typelist = new TypeList(yyvsp[0].ntype); ;
+#line 345 "xi-grammar.y"
+{ yyval.message = new Message(lineno, yyvsp[0].ntype, yyvsp[-1].intval); ;
     break;}
 case 88:
-#line 343 "xi-grammar.y"
-{ yyval.typelist = new TypeList(yyvsp[-2].ntype, yyvsp[0].typelist); ;
+#line 347 "xi-grammar.y"
+{ yyval.message = new Message(lineno, yyvsp[-3].ntype, yyvsp[-4].intval, yyvsp[-1].typelist); ;
     break;}
 case 89:
-#line 347 "xi-grammar.y"
-{ yyval.chare = new Chare(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 349 "xi-grammar.y"
+{ yyval.message = new Message(lineno, yyvsp[-3].ntype, yyvsp[-4].intval, 0, yyvsp[-1].mvlist); ;
     break;}
 case 90:
-#line 349 "xi-grammar.y"
-{ yyval.chare = new MainChare(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 353 "xi-grammar.y"
+{ yyval.typelist = 0; ;
     break;}
 case 91:
-#line 353 "xi-grammar.y"
-{ yyval.chare = new Group(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 355 "xi-grammar.y"
+{ yyval.typelist = yyvsp[0].typelist; ;
     break;}
 case 92:
-#line 357 "xi-grammar.y"
-{ yyval.chare = new NodeGroup(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 359 "xi-grammar.y"
+{ yyval.typelist = new TypeList(yyvsp[0].ntype); ;
     break;}
 case 93:
 #line 361 "xi-grammar.y"
-{/*Stupid special case for [1D] indices*/
-                       char *buf=new char[40];
-                       sprintf(buf,"%sD",yyvsp[-2].strval);
-                       yyval.ntype = new NamedType(buf); 
-               ;
+{ yyval.typelist = new TypeList(yyvsp[-2].ntype, yyvsp[0].typelist); ;
     break;}
 case 94:
-#line 367 "xi-grammar.y"
-{ yyval.ntype = new NamedType(yyvsp[-1].strval); ;
+#line 365 "xi-grammar.y"
+{ yyval.chare = new Chare(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 95:
-#line 371 "xi-grammar.y"
-{ yyval.chare = new Array(lineno, yyvsp[-3].ntype, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
+#line 367 "xi-grammar.y"
+{ yyval.chare = new MainChare(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 96:
-#line 375 "xi-grammar.y"
-{ yyval.chare = new Chare(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval);;
+#line 371 "xi-grammar.y"
+{ yyval.chare = new Group(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 97:
-#line 377 "xi-grammar.y"
-{ yyval.chare = new MainChare(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 375 "xi-grammar.y"
+{ yyval.chare = new NodeGroup(lineno, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 98:
-#line 381 "xi-grammar.y"
-{ yyval.chare = new Group(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+#line 379 "xi-grammar.y"
+{/*Stupid special case for [1D] indices*/
+                       char *buf=new char[40];
+                       sprintf(buf,"%sD",yyvsp[-2].strval);
+                       yyval.ntype = new NamedType(buf); 
+               ;
     break;}
 case 99:
 #line 385 "xi-grammar.y"
-{ yyval.chare = new NodeGroup( lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
+{ yyval.ntype = new NamedType(yyvsp[-1].strval); ;
     break;}
 case 100:
 #line 389 "xi-grammar.y"
-{ yyval.chare = new Array( lineno, yyvsp[-3].ntype, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
+{ yyval.chare = new Array(lineno, yyvsp[-3].ntype, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 101:
 #line 393 "xi-grammar.y"
-{ yyval.message = new Message(lineno, new NamedType(yyvsp[-1].strval), yyvsp[-2].intval); ;
+{ yyval.chare = new Chare(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval);;
     break;}
 case 102:
-#line 397 "xi-grammar.y"
-{ yyval.type = 0; ;
+#line 395 "xi-grammar.y"
+{ yyval.chare = new MainChare(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 103:
 #line 399 "xi-grammar.y"
-{ yyval.type = yyvsp[0].type; ;
+{ yyval.chare = new Group(lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 104:
 #line 403 "xi-grammar.y"
-{ yyval.strval = 0; ;
+{ yyval.chare = new NodeGroup( lineno, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist, yyvsp[-3].intval); ;
     break;}
 case 105:
-#line 405 "xi-grammar.y"
-{ yyval.strval = yyvsp[0].strval; ;
+#line 407 "xi-grammar.y"
+{ yyval.chare = new Array( lineno, yyvsp[-3].ntype, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 106:
-#line 407 "xi-grammar.y"
-{ yyval.strval = yyvsp[0].strval; ;
+#line 411 "xi-grammar.y"
+{ yyval.message = new Message(lineno, new NamedType(yyvsp[-1].strval), yyvsp[-2].intval); ;
     break;}
 case 107:
-#line 411 "xi-grammar.y"
-{ yyval.tvar = new TType(new NamedType(yyvsp[-1].strval), yyvsp[0].type); ;
+#line 415 "xi-grammar.y"
+{ yyval.type = 0; ;
     break;}
 case 108:
-#line 413 "xi-grammar.y"
-{ yyval.tvar = new TFunc(yyvsp[-1].ftype, yyvsp[0].strval); ;
+#line 417 "xi-grammar.y"
+{ yyval.type = yyvsp[0].type; ;
     break;}
 case 109:
-#line 415 "xi-grammar.y"
-{ yyval.tvar = new TName(yyvsp[-2].type, yyvsp[-1].strval, yyvsp[0].strval); ;
+#line 421 "xi-grammar.y"
+{ yyval.strval = 0; ;
     break;}
 case 110:
-#line 419 "xi-grammar.y"
-{ yyval.tvarlist = new TVarList(yyvsp[0].tvar); ;
+#line 423 "xi-grammar.y"
+{ yyval.strval = yyvsp[0].strval; ;
     break;}
 case 111:
-#line 421 "xi-grammar.y"
-{ yyval.tvarlist = new TVarList(yyvsp[-2].tvar, yyvsp[0].tvarlist); ;
+#line 425 "xi-grammar.y"
+{ yyval.strval = yyvsp[0].strval; ;
     break;}
 case 112:
-#line 425 "xi-grammar.y"
-{ yyval.tvarlist = yyvsp[-1].tvarlist; ;
+#line 429 "xi-grammar.y"
+{ yyval.tvar = new TType(new NamedType(yyvsp[-1].strval), yyvsp[0].type); ;
     break;}
 case 113:
-#line 429 "xi-grammar.y"
-{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
+#line 431 "xi-grammar.y"
+{ yyval.tvar = new TFunc(yyvsp[-1].ftype, yyvsp[0].strval); ;
     break;}
 case 114:
-#line 431 "xi-grammar.y"
-{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
+#line 433 "xi-grammar.y"
+{ yyval.tvar = new TName(yyvsp[-2].type, yyvsp[-1].strval, yyvsp[0].strval); ;
     break;}
 case 115:
-#line 433 "xi-grammar.y"
-{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
+#line 437 "xi-grammar.y"
+{ yyval.tvarlist = new TVarList(yyvsp[0].tvar); ;
     break;}
 case 116:
-#line 435 "xi-grammar.y"
-{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
+#line 439 "xi-grammar.y"
+{ yyval.tvarlist = new TVarList(yyvsp[-2].tvar, yyvsp[0].tvarlist); ;
     break;}
 case 117:
-#line 437 "xi-grammar.y"
-{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].message); yyvsp[0].message->setTemplate(yyval.templat); ;
+#line 443 "xi-grammar.y"
+{ yyval.tvarlist = yyvsp[-1].tvarlist; ;
     break;}
 case 118:
-#line 441 "xi-grammar.y"
-{ yyval.mbrlist = 0; ;
+#line 447 "xi-grammar.y"
+{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 119:
-#line 443 "xi-grammar.y"
-{ yyval.mbrlist = yyvsp[-2].mbrlist; ;
+#line 449 "xi-grammar.y"
+{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 120:
-#line 447 "xi-grammar.y"
-{ yyval.mbrlist = 0; ;
+#line 451 "xi-grammar.y"
+{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 121:
-#line 449 "xi-grammar.y"
-{ yyval.mbrlist = new MemberList(yyvsp[-1].member, yyvsp[0].mbrlist); ;
+#line 453 "xi-grammar.y"
+{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 122:
-#line 453 "xi-grammar.y"
-{ yyval.member = yyvsp[-1].entry; ;
+#line 455 "xi-grammar.y"
+{ yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].message); yyvsp[0].message->setTemplate(yyval.templat); ;
     break;}
 case 123:
-#line 455 "xi-grammar.y"
-{ yyval.member = yyvsp[-1].readonly; ;
+#line 459 "xi-grammar.y"
+{ yyval.mbrlist = 0; ;
     break;}
 case 124:
-#line 457 "xi-grammar.y"
-{ yyval.member = yyvsp[-1].readonly; ;
+#line 461 "xi-grammar.y"
+{ yyval.mbrlist = yyvsp[-2].mbrlist; ;
     break;}
 case 125:
-#line 461 "xi-grammar.y"
-{ yyval.entry = new Entry(lineno, yyvsp[-5].intval|yyvsp[-1].intval, new BuiltinType("void"), yyvsp[-3].strval, yyvsp[-2].rtype, yyvsp[0].val); ;
+#line 465 "xi-grammar.y"
+{ yyval.mbrlist = 0; ;
     break;}
 case 126:
-#line 463 "xi-grammar.y"
-{ yyval.entry = new Entry(lineno, yyvsp[-5].intval|yyvsp[-1].intval, yyvsp[-4].ptype, yyvsp[-3].strval, yyvsp[-2].rtype, yyvsp[0].val); ;
+#line 467 "xi-grammar.y"
+{ yyval.mbrlist = new MemberList(yyvsp[-1].member, yyvsp[0].mbrlist); ;
     break;}
 case 127:
-#line 465 "xi-grammar.y"
-{ yyval.entry = new Entry(lineno, yyvsp[-2].intval, 0, yyvsp[-1].strval, yyvsp[0].rtype, 0); ;
+#line 471 "xi-grammar.y"
+{ yyval.member = yyvsp[-1].entry; ;
     break;}
 case 128:
-#line 469 "xi-grammar.y"
-{ yyval.intval = 0; ;
+#line 473 "xi-grammar.y"
+{ yyval.member = yyvsp[-1].readonly; ;
     break;}
 case 129:
-#line 471 "xi-grammar.y"
-{ yyval.intval = yyvsp[-1].intval; ;
+#line 475 "xi-grammar.y"
+{ yyval.member = yyvsp[-1].readonly; ;
     break;}
 case 130:
-#line 475 "xi-grammar.y"
-{ yyval.intval = yyvsp[0].intval; ;
+#line 479 "xi-grammar.y"
+{ yyval.entry = new Entry(lineno, yyvsp[-5].intval|yyvsp[-1].intval, new BuiltinType("void"), yyvsp[-3].strval, yyvsp[-2].rtype, yyvsp[0].val); ;
     break;}
 case 131:
-#line 477 "xi-grammar.y"
-{ yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
+#line 481 "xi-grammar.y"
+{ yyval.entry = new Entry(lineno, yyvsp[-5].intval|yyvsp[-1].intval, yyvsp[-4].ptype, yyvsp[-3].strval, yyvsp[-2].rtype, yyvsp[0].val); ;
     break;}
 case 132:
-#line 481 "xi-grammar.y"
-{ yyval.intval = STHREADED; ;
+#line 483 "xi-grammar.y"
+{ yyval.entry = new Entry(lineno, yyvsp[-2].intval, 0, yyvsp[-1].strval, yyvsp[0].rtype, 0); ;
     break;}
 case 133:
-#line 483 "xi-grammar.y"
-{ yyval.intval = SSYNC; ;
+#line 487 "xi-grammar.y"
+{ yyval.intval = 0; ;
     break;}
 case 134:
-#line 485 "xi-grammar.y"
-{ yyval.intval = SLOCKED; ;
+#line 489 "xi-grammar.y"
+{ yyval.intval = yyvsp[-1].intval; ;
     break;}
 case 135:
-#line 487 "xi-grammar.y"
-{ yyval.intval = SVIRTUAL; ;
+#line 493 "xi-grammar.y"
+{ yyval.intval = yyvsp[0].intval; ;
     break;}
 case 136:
-#line 491 "xi-grammar.y"
-{ yyval.rtype = 0; ;
+#line 495 "xi-grammar.y"
+{ yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
     break;}
 case 137:
-#line 493 "xi-grammar.y"
-{ yyval.rtype = new BuiltinType("void"); ;
+#line 499 "xi-grammar.y"
+{ yyval.intval = STHREADED; ;
     break;}
 case 138:
-#line 495 "xi-grammar.y"
-{ yyval.rtype = yyvsp[0].ptype; ;
+#line 501 "xi-grammar.y"
+{ yyval.intval = SSYNC; ;
     break;}
 case 139:
-#line 499 "xi-grammar.y"
-{ yyval.rtype = yyvsp[-1].rtype; ;
+#line 503 "xi-grammar.y"
+{ yyval.intval = SLOCKED; ;
     break;}
 case 140:
-#line 503 "xi-grammar.y"
-{ yyval.val = 0; ;
+#line 505 "xi-grammar.y"
+{ yyval.intval = SVIRTUAL; ;
     break;}
 case 141:
-#line 505 "xi-grammar.y"
-{ yyval.val = new Value(yyvsp[0].strval); ;
+#line 509 "xi-grammar.y"
+{ yyval.rtype = 0; ;
     break;}
 case 142:
-#line 509 "xi-grammar.y"
-{ yyval.intval = 0; ;
+#line 511 "xi-grammar.y"
+{ yyval.rtype = new BuiltinType("void"); ;
     break;}
 case 143:
-#line 511 "xi-grammar.y"
+#line 513 "xi-grammar.y"
+{ yyval.rtype = yyvsp[0].ptype; ;
+    break;}
+case 144:
+#line 517 "xi-grammar.y"
+{ yyval.rtype = yyvsp[-1].rtype; ;
+    break;}
+case 145:
+#line 521 "xi-grammar.y"
+{ yyval.val = 0; ;
+    break;}
+case 146:
+#line 523 "xi-grammar.y"
+{ yyval.val = new Value(yyvsp[0].strval); ;
+    break;}
+case 147:
+#line 527 "xi-grammar.y"
+{ yyval.intval = 0; ;
+    break;}
+case 148:
+#line 529 "xi-grammar.y"
 { if(strcmp(yyvsp[0].strval, "0")) { yyerror("expected 0"); exit(1); }
                  yyval.intval = SPURE; 
                ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/home/csar2/bhandark/share/bison.simple"
+#line 543 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1762,7 +1793,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 515 "xi-grammar.y"
+#line 533 "xi-grammar.y"
 
 void yyerror(const char *mesg)
 {
index 566bdeaa6bc41b1d3c14dc87aafbd83f4927064a..ee4f98ae6957425ce8a35af4a5c6161171a9b8c3 100644 (file)
@@ -22,6 +22,8 @@ typedef union {
   TVarList *tvarlist;
   Value *val;
   ValueList *vallist;
+  MsgVar *mv;
+  MsgVarList *mvlist;
   char *strval;
   int intval;
 } YYSTYPE;
@@ -45,18 +47,19 @@ typedef union {
 #define        VOID    274
 #define        PACKED  275
 #define        VARSIZE 276
-#define        ENTRY   277
-#define        MAINCHARE       278
-#define        IDENT   279
-#define        NUMBER  280
-#define        LITERAL 281
-#define        INT     282
-#define        LONG    283
-#define        SHORT   284
-#define        CHAR    285
-#define        FLOAT   286
-#define        DOUBLE  287
-#define        UNSIGNED        288
+#define        VARRAYS 277
+#define        ENTRY   278
+#define        MAINCHARE       279
+#define        IDENT   280
+#define        NUMBER  281
+#define        LITERAL 282
+#define        INT     283
+#define        LONG    284
+#define        SHORT   285
+#define        CHAR    286
+#define        FLOAT   287
+#define        DOUBLE  288
+#define        UNSIGNED        289
 
 
 extern YYSTYPE yylval;
index 968a11205837774362038647616cc6ca17aef071..046ba2f3494b362db2792a16ff432bb484314d19 100644 (file)
@@ -33,6 +33,8 @@ ModuleList *modlist;
   TVarList *tvarlist;
   Value *val;
   ValueList *vallist;
+  MsgVar *mv;
+  MsgVarList *mvlist;
   char *strval;
   int intval;
 }
@@ -51,7 +53,7 @@ ModuleList *modlist;
 %token SYNC EXCLUSIVE VIRTUAL
 %token VOID
 %token PACKED
-%token VARSIZE
+%token VARSIZE VARRAYS
 %token ENTRY
 %token <intval> MAINCHARE
 %token <strval> IDENT NUMBER LITERAL
@@ -86,6 +88,8 @@ ModuleList *modlist;
 %type <tvarlist>       TVarList TemplateSpec
 %type <val>            ArrayDim Dim
 %type <vallist>                DimList
+%type <mv>             Var
+%type <mvlist>         VarList
 
 %%
 
@@ -307,6 +311,8 @@ MAttrib             : PACKED
                { $$ = SPACKED; }
                | VARSIZE
                { $$ = SVARSIZE; }
+               | VARRAYS
+               { $$ = SVARRAYS; }
                ;
 
 CAttribs       : /* Empty */
@@ -325,10 +331,22 @@ CAttrib           : MIGRATABLE
                { $$ = 0x01; }
                ;
 
+Var            : Type Name '[' ']' ';'
+               { $$ = new MsgVar($1, $2); }
+               ;
+
+VarList                : Var
+               { $$ = new MsgVarList($1); }
+               | Var VarList
+               { $$ = new MsgVarList($1, $2); }
+               ;
+
 Message                : MESSAGE MAttribs NamedType
                { $$ = new Message(lineno, $3, $2); }
                | MESSAGE MAttribs NamedType '{' TypeList '}'
                { $$ = new Message(lineno, $3, $2, $5); }
+               | MESSAGE MAttribs NamedType '{' VarList '}'
+               { $$ = new Message(lineno, $3, $2, 0, $5); }
                ;
 
 OptBaseList    : /* Empty */
index 03aa0524b09f68bef6da94ba45a57b754060e6e3..7bc3b2bf73319139d155b324e965254477c01648 100644 (file)
@@ -9,6 +9,7 @@
 #define YY_FLEX_MINOR_VERSION 5
 
 #include <stdio.h>
+#include <unistd.h>
 
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
@@ -22,9 +23,6 @@
 #ifdef __cplusplus
 
 #include <stdlib.h>
-#ifndef WIN32
-#include <unistd.h>
-#endif
 
 /* Use prototypes in function declarations. */
 #define YY_USE_PROTOS
@@ -284,33 +282,33 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 10
-#define YY_END_OF_BUFFER 11
-static yyconst short int yy_accept[45] =
+#define YY_NUM_RULES 11
+#define YY_END_OF_BUFFER 12
+static yyconst short int yy_accept[46] =
     {   0,
-        0,    0,   11,    9,    4,    5,    9,    9,    9,    9,
-        9,    9,    6,    8,    4,    0,    7,    0,    7,    3,
-        0,    6,    7,    2,    1,    7,    0,    6,    8,    0,
-        0,    0,    0,    0,    0,    0,    1,    0,    7,    0,
-        0,    0,    7,    0
+        0,    0,   12,   10,    5,    6,    2,   10,   10,   10,
+       10,   10,   10,    7,    9,    5,    0,    8,    0,    8,
+        4,    0,    7,    8,    3,    1,    8,    0,    7,    9,
+        0,    0,    0,    0,    0,    0,    0,    1,    0,    8,
+        0,    0,    0,    8,    0
     } ;
 
 static yyconst int yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    1,    4,    1,    1,    1,    1,    5,    1,
-        1,    6,    7,    1,    7,    8,    9,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
-        1,    1,    1,    1,   11,   11,   11,   11,   12,   11,
-       11,   11,   11,   11,   13,   11,   13,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-        1,    1,    1,    1,   14,    1,   11,   11,   11,   11,
-
-       12,   11,   11,   11,   11,   11,   13,   11,   13,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    5,    1,    1,    1,    1,    6,    1,
+        1,    7,    8,    1,    8,    9,   10,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,    1,    1,    1,
+        1,    1,    1,    1,   12,   12,   12,   12,   13,   12,
+       12,   12,   12,   12,   14,   12,   14,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+        1,    1,    1,    1,   15,    1,   12,   12,   12,   12,
+
+       13,   12,   12,   12,   12,   12,   14,   12,   14,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -327,52 +325,56 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[15] =
+static yyconst int yy_meta[16] =
     {   0,
-        1,    1,    2,    1,    1,    1,    1,    1,    1,    3,
-        3,    3,    3,    3
+        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+        3,    3,    3,    3,    3
     } ;
 
-static yyconst short int yy_base[51] =
+static yyconst short int yy_base[52] =
     {   0,
-        0,    0,   65,   66,   62,   66,   59,   57,   52,    7,
-       50,   10,   12,    0,   57,   54,   24,   52,   27,   66,
-       46,    0,   11,   66,    0,   21,   27,   66,    0,    0,
-        0,   51,    0,    0,   49,   28,    0,   42,   39,   42,
-       38,   30,   26,   66,   38,   41,   15,   44,   47,   50
+        0,    0,   66,   67,   63,   67,   67,   59,   57,   52,
+        7,   50,   10,   12,    0,   58,   54,   25,   52,   29,
+       67,   46,    0,   11,   67,    0,   23,   29,   67,    0,
+        0,    0,   50,    0,    0,   46,   30,    0,   38,   35,
+       38,   33,   22,   18,   67,   41,   44,   16,   47,   50,
+       53
     } ;
 
-static yyconst short int yy_def[51] =
+static yyconst short int yy_def[52] =
     {   0,
-       44,    1,   44,   44,   44,   44,   45,   46,   44,   44,
-       44,   44,   44,   47,   44,   45,   44,   46,   44,   44,
-       44,   13,   44,   44,   48,   44,   44,   44,   47,   17,
-       17,   49,   19,   19,   50,   44,   48,   44,   44,   49,
-       50,   44,   44,    0,   44,   44,   44,   44,   44,   44
+       45,    1,   45,   45,   45,   45,   45,   46,   47,   45,
+       45,   45,   45,   45,   48,   45,   46,   45,   47,   45,
+       45,   45,   14,   45,   45,   49,   45,   45,   45,   48,
+       18,   18,   50,   20,   20,   51,   45,   49,   45,   45,
+       50,   51,   45,   45,    0,   45,   45,   45,   45,   45,
+       45
     } ;
 
-static yyconst short int yy_nxt[81] =
+static yyconst short int yy_nxt[83] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
-       14,   14,   14,   14,   21,   24,   22,   29,   25,   26,
-       23,   22,   36,   27,   28,   30,   31,   32,   33,   34,
-       23,   35,   27,   38,   42,   43,   39,   43,   16,   43,
-       16,   18,   19,   18,   37,   17,   37,   40,   39,   40,
-       41,   39,   41,   19,   17,   23,   19,   17,   15,   23,
-       20,   19,   17,   15,   44,    3,   44,   44,   44,   44,
-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44
+       14,   15,   15,   15,   15,   22,   25,   23,   30,   26,
+       27,   24,   23,   37,   28,   29,   31,   32,   44,   33,
+       34,   35,   44,   24,   36,   28,   39,   43,   20,   40,
+       44,   17,   18,   17,   19,   40,   19,   38,   40,   38,
+       41,   20,   41,   42,   18,   42,   24,   20,   18,   16,
+       24,   21,   20,   18,   16,   45,    3,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45
     } ;
 
-static yyconst short int yy_chk[81] =
+static yyconst short int yy_chk[83] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,   10,   12,   10,   47,   12,   13,
-       23,   13,   23,   13,   13,   17,   17,   17,   19,   19,
-       26,   19,   26,   27,   36,   43,   27,   36,   45,   42,
-       45,   46,   41,   46,   48,   40,   48,   49,   39,   49,
-       50,   38,   50,   35,   32,   21,   18,   16,   15,   11,
-        9,    8,    7,    5,    3,   44,   44,   44,   44,   44,
-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44
+        1,    1,    1,    1,    1,   11,   13,   11,   48,   13,
+       14,   24,   14,   24,   14,   14,   18,   18,   44,   18,
+       20,   20,   43,   27,   20,   27,   28,   37,   42,   28,
+       37,   46,   41,   46,   47,   40,   47,   49,   39,   49,
+       50,   36,   50,   51,   33,   51,   22,   19,   17,   16,
+       12,   10,    9,    8,    5,    3,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -410,7 +412,7 @@ int search(char *s);
 #undef yywrap
 #endif
 
-#line 412 "lex.yy.c"
+#line 416 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -558,12 +560,12 @@ YY_MALLOC_DECL
 YY_DECL
        {
        register yy_state_type yy_current_state;
-       register char *yy_cp, *yy_bp;
+       register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;
 
 #line 48 "xi-scan.l"
 
-#line 565 "lex.yy.c"
+#line 569 "lex.yy.c"
 
        if ( yy_init )
                {
@@ -614,13 +616,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 45 )
+                               if ( yy_current_state >= 46 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 66 );
+               while ( yy_base[yy_current_state] != 67 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -654,51 +656,56 @@ YY_RULE_SETUP
 case 2:
 YY_RULE_SETUP
 #line 50 "xi-scan.l"
-{ in_comment = 1; /* Single line C-style comments */ }
+{ /* ignore ^M characters for dos-unix compat */ }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
 #line 51 "xi-scan.l"
-{ in_comment = 0; }
+{ in_comment = 1; /* Single line C-style comments */ }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
 #line 52 "xi-scan.l"
-{ /* ignore white space */ }
+{ in_comment = 0; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
 #line 53 "xi-scan.l"
-{ lineno++;}
+{ /* ignore white space */ }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 54 "xi-scan.l"
-{ yylval.strval = strcpy(new char[yyleng+1], yytext); 
-                 Return Token(NUMBER); }
+{ lineno++;}
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 56 "xi-scan.l"
+#line 55 "xi-scan.l"
 { yylval.strval = strcpy(new char[yyleng+1], yytext); 
-                 Return Token(LITERAL); }
+                 Return Token(NUMBER); }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 58 "xi-scan.l"
-{ Return Token(search(yytext)); }
+#line 57 "xi-scan.l"
+{ yylval.strval = strcpy(new char[yyleng+1], yytext); 
+                 Return Token(LITERAL); }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 59 "xi-scan.l"
-{ Return Token(yytext[0]); }
+{ Return Token(search(yytext)); }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 60 "xi-scan.l"
+{ Return Token(yytext[0]); }
+       YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 61 "xi-scan.l"
 ECHO;
        YY_BREAK
-#line 700 "lex.yy.c"
+#line 709 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -990,7 +997,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 45 )
+                       if ( yy_current_state >= 46 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1025,11 +1032,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 45 )
+               if ( yy_current_state >= 46 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 44);
+       yy_is_jam = (yy_current_state == 45);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -1262,11 +1269,6 @@ YY_BUFFER_STATE b;
        }
 
 
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
 
 #ifdef YY_USE_PROTOS
 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
@@ -1584,7 +1586,7 @@ int main()
        return 0;
        }
 #endif
-#line 60 "xi-scan.l"
+#line 61 "xi-scan.l"
 
 
 struct rwtable {
@@ -1614,6 +1616,7 @@ struct rwtable rwtable[] = {
   "mainchare", MAINCHARE,
   "packed",     PACKED,
   "varsize",    VARSIZE,
+  "varrays",    VARRAYS,
   "entry",      ENTRY,
   "int",        INT,
   "short",      SHORT,
index d92e1e6a118a31932fd55aed3f7f0505f275619e..d9ca1de1e7b2f75528b1291fa43be13ddcf8b67e 100644 (file)
@@ -47,6 +47,7 @@ literal       {number}|{real}|{string}
 
 %%
 "//".*         { /* ignore single line comments */ }
+"\r"           { /* ignore ^M characters for dos-unix compat */ }
 "/*"           { in_comment = 1; /* Single line C-style comments */ }
 "*/"           { in_comment = 0; }
 {ws}           { /* ignore white space */ }
@@ -86,6 +87,7 @@ struct rwtable rwtable[] = {
   "mainchare", MAINCHARE,
   "packed",     PACKED,
   "varsize",    VARSIZE,
+  "varrays",    VARRAYS,
   "entry",      ENTRY,
   "int",        INT,
   "short",      SHORT,
index f401835640318b1dcece69e744f7f879fd4abd70..2983b11d543a433c28d98c1db7fc24a185e38418 100644 (file)
@@ -152,6 +152,11 @@ Message::print(XStr& str)
     templat->genSpec(str);
   str << "message ";
   type->print(str);
+  if(isVarrays()) {
+    str << "{\n";
+    mvlist->print(str);
+    str << "}\n";
+  }
   str << ";\n";
 }
 
@@ -761,6 +766,88 @@ static const char *CIAllocDeclAnsi =
 "    void operator delete(void*,int *,int);\n"
 ;
 
+void
+Message::genAllocDecl(XStr &str)
+{
+  if(compilemode==ansi)
+    str << CIMsgClassAnsi;
+  else str << CIMsgClass;
+
+  if(isVarsize()) {
+    if(compilemode==ansi)
+      str << CIAllocDeclAnsi;
+    else str << CIAllocDecl;
+  } else if(isVarrays()) {
+    int num = mvlist->len();
+    str << "    void *operator new(size_t s,";
+    int i;
+    for(i=0;i<num;i++)
+      str << "int sz" << i << ", ";
+    str << "int p);\n";
+    if(compilemode==ansi) {
+      str << "    void operator delete(void*,";
+      for(i=0;i<num;i++)
+        str << "int, ";
+      str << "int);\n";
+    }
+  }
+}
+
+void
+Message::genVarraysMacros(XStr& str)
+{
+  int num = mvlist->len();
+  assert(num>0);
+  MsgVarList *ml = mvlist;
+  MsgVar *mv = ml->msg_var;
+  int i;
+  str << "\n#define " << type << "_VARRAYS_MACROS() \\\n";
+  str << "  static void* alloc(int msgnum, int sz, int *sizes, int pb) {\\\n";
+  str << "    int offsets[" << num+1 << "];\\\n";
+  str << "    offsets[0] = ALIGN8(sz);\\\n";
+  for(i=1; i<=num; i++) {
+    str << "    offsets[" << i << "] = offsets[" << i-1 << "] + ";
+    str << "ALIGN8(sizeof(" << mv->type << ")*sizes[" << i-1 << "]);\\\n";
+    ml = ml->next;
+    if (ml != 0) mv = ml->msg_var;
+  }
+  ml = mvlist;
+  mv = ml->msg_var;
+  str << "    " << type << " *newmsg = (" << type << " *) ";
+  str << "CkAllocMsg(msgnum, offsets[" << num << "], pb);\\\n";
+  for(i=0;i<num;i++) {
+    str << "    newmsg->" << mv->name << " = (" << mv->type << " *) ";
+    str << "((char *)newmsg + offsets[" << i << "]);\\\n";
+    ml = ml->next;
+    if (ml != 0) mv = ml->msg_var;
+  }
+  str << "    return (void *) newmsg;\\\n";
+  str << "  }\\\n";
+  str << "  static void* pack(" << type << "* msg) {\\\n";
+  ml = mvlist;
+  mv = ml->msg_var;
+  for(i=0;i<num;i++) {
+    str << "    msg->" << mv->name << " = (" <<mv->type << " *) ";
+    str << "((char *)msg->" << mv->name << " - (char *)msg);\\\n";
+    ml = ml->next;
+    if (ml != 0) mv = ml->msg_var;
+  }
+  str << "    return (void *) msg;\\\n";
+  str << "  }\\\n";
+  str << "  static " << type << "* unpack(void* buf) {\\\n";
+  str << "    " << type << " * msg = (" << type << " *) buf;\\\n";
+  ml = mvlist;
+  mv = ml->msg_var;
+  for(i=0;i<num;i++) {
+    str << "    msg->" << mv->name << " = (" <<mv->type << " *) ";
+    str << "((size_t)msg->" << mv->name << " + (char *)msg);\\\n";
+    ml = ml->next;
+    if (ml != 0) mv = ml->msg_var;
+  }
+  str << "    return msg;\\\n";
+  str << "  }\n";
+}
+
 void
 Message::genDecls(XStr& str)
 {
@@ -768,6 +855,8 @@ Message::genDecls(XStr& str)
   ptype<<proxyPrefix()<<type;
   if(type->isTemplated())
     return;
+  if(isVarrays())
+    genVarraysMacros(str);
   str << "/* DECLS: "; print(str); str << " */\n";
   if(templat)
     templat->genSpec(str);
@@ -785,15 +874,9 @@ Message::genDecls(XStr& str)
 //  This means users don't have to remember to type ",public ArrayMessage";
 // and eventually CkArrayMessage will be integrated into the envelope anyway.
   str << ":public CkArrayMessage";
-  if(compilemode==ansi)
-    str << CIMsgClassAnsi;
-  else str << CIMsgClass;
 
-  if(isVarsize()) {
-    if(compilemode==ansi)
-      str << CIAllocDeclAnsi;
-    else str << CIAllocDecl;
-  }
+  genAllocDecl(str);
+
   if(!(external||type->isTemplated())) {
    // generate register function
     str << "    static void __register(const char *s, size_t size, CkPackFnPtr pack, CkUnpackFnPtr unpack) {\n";
@@ -849,6 +932,47 @@ Message::genDefs(XStr& str)
         str << "}\n";
       }
     }
+    if(isVarrays()) {
+      int num = mvlist->len();
+      if(templat) {
+        templat->genSpec(str);
+        str << " ";
+      }
+      str << "void *"<<ptype;
+      if(templat)
+        templat->genVars(str);
+      str << "::operator new(size_t s, ";
+      int i;
+      for(i=0;i<num;i++)
+        str << "int sz" << i << ", ";
+      str << "int p) {\n";
+      str << "  int i, sizes[" << num << "];\n";
+      for(i=0;i<num;i++)
+        str << "  sizes[" << i << "] = sz" << i << ";\n";
+      str << "  return ";
+      type->print(str);
+      if(templat)
+        templat->genVars(str);
+      str << "::alloc(__idx, s, sizes, p);\n";
+      str << "}\n";
+
+      if(compilemode==ansi) {
+        // Generate corresponding delete
+        if(templat) {
+          templat->genSpec(str);
+          str << " ";
+        }
+        str << "void "<<ptype;
+        if(templat)
+          templat->genVars(str);
+        str << "::operator delete(void *p, \n";
+       for(i=0;i<num;i++)
+         str << "int,";
+        str << "int) {\n";
+        str << "  CkFreeMsg(p);\n";
+        str << "}\n";
+      }
+    }
   }
   if(!templat) {
     if(!external && !type->isTemplated()) {
@@ -877,11 +1001,11 @@ Message::genDefs(XStr& str)
 void
 Message::genReg(XStr& str)
 {
-  str << "// REG: "; print(str);
+  str << "/* REG: "; print(str); str << "*/\n";
   if(!templat && !external) {
     str << "  "<<proxyPrefix()<<type<<"::";
     str << "__register(\""<<type<<"\", sizeof("<<type<<"),";
-    if(isPacked()||isVarsize()) {
+    if(isPacked()||isVarsize()||isVarrays()) {
       str << "(CkPackFnPtr) "<<type;
       if(templat)
         templat->genVars(str);
@@ -1794,7 +1918,7 @@ void Entry::genDefs(XStr& str)
 
 void Entry::genReg(XStr& str)
 {
-  str << "    // REG: "<<*this;
+  str << "    /* REG: "<<*this << "*/\n";
   if(isConstructor() && container->isAbstract())
     return;
     
index c41db59afe103b5ed98fe80aea7f8c94ede7545b..ca83f96b860a11493e4319316d3264f1d5c84c59 100644 (file)
@@ -389,6 +389,7 @@ class NodeGroup : public Group {
 
 #define SPACKED  0x01
 #define SVARSIZE 0x02
+#define SVARRAYS 0x04
 
 class Message; // forward declaration
 //  typedef map< string, Message* > MessageList;
@@ -426,13 +427,37 @@ public:
 
 extern MessageList message_list;
 
+class MsgVar {
+ public:
+  Type *type;
+  char *name;
+  MsgVar(Type *t, char *n) : type(t), name(n) {}
+  Type *getType() { return type; }
+  char *getName() { return name; }
+  void print(XStr &str) {type->print(str);str<<" "<<name<<"[];";}
+};
+
+class MsgVarList : public Printable {
+ public:
+  MsgVar *msg_var;
+  MsgVarList *next;
+  MsgVarList(MsgVar *mv, MsgVarList *n=0) : msg_var(mv), next(n) {}
+  void print(XStr &str) {
+    msg_var->print(str);
+    str<<"\n";
+    if(next) next->print(str);
+  }
+  int len(void) { return (next==0)?1:(next->len()+1); }
+};
+
 class Message : public TEntity, public Construct {
     int attrib;
     NamedType *type;
     TypeList *contents;
+    MsgVarList *mvlist;
   public:
-    Message(int l, NamedType *t, int a, TypeList *c=0)
-      : attrib(a), type(t), contents(c) 
+    Message(int l, NamedType *t, int a, TypeList *c=0, MsgVarList *mv=0)
+      : attrib(a), type(t), contents(c), mvlist(mv) 
       { line=l; setTemplate(0);
         message_list.add(type->getBaseName(), this); }
     void print(XStr& str);
@@ -441,8 +466,11 @@ class Message : public TEntity, public Construct {
     void genReg(XStr& str);
     int  isPacked(void) { return attrib&SPACKED; }
     int  isVarsize(void) { return attrib&SVARSIZE; }
+    int  isVarrays(void) { return attrib&SVARRAYS; }
     virtual char *proxyPrefix(void) {return msg_prefix();}
     TypeList *getContents(void) const { return contents; }
+    void genAllocDecl(XStr& str);
+    void genVarraysMacros(XStr& str);
 };
 
 /* A formal argument of a template */