Merged structured dagger translator with charmxi.
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Thu, 29 Mar 2001 10:53:12 +0000 (10:53 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Thu, 29 Mar 2001 10:53:12 +0000 (10:53 +0000)
34 files changed:
src/langs/sdag/xlator/sdag-main.C [deleted file]
src/scripts/Makefile
src/scripts/Makefile.win32
src/scripts/charmc
src/xlat-i/sdag/CEntry.C [moved from src/langs/sdag/xlator/CEntry.C with 100% similarity]
src/xlat-i/sdag/CEntry.h [moved from src/langs/sdag/xlator/CEntry.h with 100% similarity]
src/xlat-i/sdag/CLexer.C [moved from src/langs/sdag/xlator/CLexer.C with 100% similarity]
src/xlat-i/sdag/CLexer.h [moved from src/langs/sdag/xlator/CLexer.h with 100% similarity]
src/xlat-i/sdag/CList.h [moved from src/langs/sdag/xlator/CList.h with 100% similarity]
src/xlat-i/sdag/CParseNode.C [moved from src/langs/sdag/xlator/CParseNode.C with 100% similarity]
src/xlat-i/sdag/CParseNode.h [moved from src/langs/sdag/xlator/CParseNode.h with 97% similarity]
src/xlat-i/sdag/CParseNodeProcess.C [moved from src/langs/sdag/xlator/CParseNodeProcess.C with 99% similarity]
src/xlat-i/sdag/CParsedFile.C [moved from src/langs/sdag/xlator/CParsedFile.C with 95% similarity]
src/xlat-i/sdag/CParsedFile.h [moved from src/langs/sdag/xlator/CParsedFile.h with 84% similarity]
src/xlat-i/sdag/CParser.C [moved from src/langs/sdag/xlator/CParser.C with 94% similarity]
src/xlat-i/sdag/CParser.h [moved from src/langs/sdag/xlator/CParser.h with 100% similarity]
src/xlat-i/sdag/CStateVar.h [moved from src/langs/sdag/xlator/CStateVar.h with 100% similarity]
src/xlat-i/sdag/CToken.h [moved from src/langs/sdag/xlator/CToken.h with 100% similarity]
src/xlat-i/sdag/EToken.h [moved from src/langs/sdag/xlator/EToken.h with 100% similarity]
src/xlat-i/sdag/example.txt [moved from src/langs/sdag/xlator/example.txt with 100% similarity]
src/xlat-i/sdag/grammar.txt [moved from src/langs/sdag/xlator/grammar.txt with 100% similarity]
src/xlat-i/sdag/sdag-globals.C [moved from src/langs/sdag/xlator/sdag-globals.C with 100% similarity]
src/xlat-i/sdag/sdag-globals.h [moved from src/langs/sdag/xlator/sdag-globals.h with 100% similarity]
src/xlat-i/sdag/sdag-main.C [new file with mode: 0644]
src/xlat-i/sdag/trans.c [moved from src/langs/sdag/xlator/trans.c with 97% similarity]
src/xlat-i/sdag/trans.l [moved from src/langs/sdag/xlator/trans.l with 98% similarity]
src/xlat-i/xi-grammar.tab.C
src/xlat-i/xi-grammar.y
src/xlat-i/xi-scan.C
src/xlat-i/xi-symbol.C
src/xlat-i/xi-symbol.h
src/xlat-i/xi-util.C
src/xlat-i/xi-util.h
src/xlat-i/xi.makefile

diff --git a/src/langs/sdag/xlator/sdag-main.C b/src/langs/sdag/xlator/sdag-main.C
deleted file mode 100644 (file)
index 7112f40..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************
- * $Source$
- * $Author$
- * $Date$
- * $Revision$
- *****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "CLexer.h"
-#include "CToken.h"
-#include "CParsedFile.h"
-#include "CParser.h"
-#include "sdag-globals.h"
-#include "xi-util.h"
-
-void Usage(void)
-{
-  fprintf(stderr, "Usage: sdagx <filename>\n");
-}
-
-int main(int argc, char *argv[])
-{
-  if(argc<2) {
-    Usage();
-    exit(1);
-  }
-  for(int i=1; i<argc; i++) {
-    resetNumbers();
-    XStr input, output;
-    // printf("%s:\n", argv[i]);
-    FILE *fp = fopen(argv[i], "r");
-    if(fp == 0) {
-      fprintf(stderr, "sdagx: cannot open %s for reading !!\n", argv[i]);
-      exit(1);
-    }
-    char str[1024], *s;
-    while(0 != (s=fgets(str,1024,fp)))
-      input << str;
-    fclose(fp);
-    CParser *cParser = new CParser(input);
-    CParsedFile *parsedFile = cParser->doParse();
-    parsedFile->doProcess(output);
-    sprintf(str, "%s.h", argv[i]);
-    fp = fopen(str, "w");
-    if(fp ==0) {
-      fprintf(stderr, "sdagx: cannot open %s for writing !!\n", str);
-      exit(1);
-    }
-    fprintf(fp, "%s", output.charstar());
-    fclose(fp);
-    // parsedFile->print(0);
-    delete parsedFile;
-    delete cParser;
-  }
-  exit(0);
-}
index cf1c1384f466e18270bca6c8274634dfaba4dd5a..3415a20cabba202f77371f51770d4869036b24d4 100644 (file)
@@ -25,7 +25,7 @@ SHELL=/bin/sh
 
 all: charm++ bluegene LIBS ampi f90charm tsm sm pvm doc
 
-charm++: converse libck.a charmxi sdagx
+charm++: converse libck.a charmxi
 
 bluegene: charm++ libconv-bluegene.a
 
@@ -51,7 +51,7 @@ AMPIF: charm++ libconv-utilf.a LIBS libampif.a
 
 f90charm: charm++ libf90charm.a
 
-translators: sdagx charmxi conv-cpm
+translators: charmxi conv-cpm
 
 LIBS: CONVLIBS CHARMLIBS
        cd libs; make otherlibs OPTS='$(OPTS)'
@@ -163,9 +163,9 @@ dirs+sources:
        ./gatherflat ../../src/Common/langs/pvmc       .
        ./gatherflat ../../src/Common/langs/ampi       .
        ./gatherflat ../../src/Common/langs/bluegene   .
-       ./gatherflat ../../src/Common/langs/sdag/xlator       .
-       ./gatherflat ../../src/Common/langs/f90charm      .
+       ./gatherflat ../../src/Common/langs/f90charm   .
        ./gatherflat ../../src/Common/xlat-i           .
+       ./gatherflat ../../src/Common/xlat-i/sdag      .
        ./gatherflat ../../src/Common/xlatcpm          .
        ./gathertree ../../src/QuickThreads QuickThreads
        ./gathertree ../../src/Common/libs libs
@@ -582,25 +582,56 @@ conv-cpm.o: conv-cpm.c
 
 XIHEADERS=xi-symbol.h xi-util.h xi-grammar.tab.h
 CHARMXI=xi-main.o xi-symbol.o xi-grammar.tab.o xi-scan.o xi-util.o
+SDAGOBJ=sdag-main.o trans.o CLexer.o CParser.o CParsedFile.o CParseNode.o \
+       sdag-globals.o CParseNodeProcess.o CEntry.o
+SDAGHEADERS=CLexer.h CToken.h EToken.h CParser.h CParsedFile.h CParseNode.h \
+       sdag-globals.h CEntry.h
 
-charmxi: $(CHARMXI)
-       $(SEQCHARMC) -language c++ -cp ../bin/ -o charmxi $(CHARMXI)
+charmxi: $(CHARMXI) $(SDAGOBJ)
+       $(SEQCHARMC) -language c++ -cp ../bin/ -o charmxi $(CHARMXI) $(SDAGOBJ)
 
-xi-main.o: xi-main.C $(XIHEADERS)
+xi-main.o: xi-main.C $(XIHEADERS) $(SDAGHEADERS)
        $(SEQCHARMC) xi-main.C
 
-xi-symbol.o: xi-symbol.C $(XIHEADERS)
+xi-symbol.o: xi-symbol.C $(XIHEADERS) $(SDAGHEADERS)
        $(SEQCHARMC) xi-symbol.C
 
-xi-util.o: xi-util.C $(XIHEADERS)
+xi-util.o: xi-util.C $(XIHEADERS) $(SDAGHEADERS)
        $(SEQCHARMC) xi-util.C
 
-xi-grammar.tab.o: xi-grammar.tab.C $(XIHEADERS)
+xi-grammar.tab.o: xi-grammar.tab.C $(XIHEADERS) $(SDAGHEADERS)
        $(SEQCHARMC) xi-grammar.tab.C
 
-xi-scan.o: xi-scan.C $(XIHEADERS)
+xi-scan.o: xi-scan.C $(XIHEADERS) $(SDAGHEADERS)
        $(SEQCHARMC) -I. -DYY_NEVER_INTERACTIVE xi-scan.C
 
+sdag-main.o: sdag-main.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c sdag-main.C
+
+trans.o: trans.c $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c trans.c
+
+CLexer.o: CLexer.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CLexer.C
+
+CParser.o: CParser.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CParser.C
+
+CParsedFile.o: CParsedFile.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CParsedFile.C
+
+CParseNode.o: CParseNode.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CParseNode.C
+
+sdag-globals.o: sdag-globals.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c sdag-globals.C
+
+CParseNodeProcess.o: CParseNodeProcess.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CParseNodeProcess.C
+
+CEntry.o: CEntry.C $(XIHEADERS) $(SDAGHEADERS)
+       $(SEQCHARMC) -c CEntry.C
+
 ###############################################################################
 #
 # Simple Messaging
@@ -667,39 +698,6 @@ libf90charm.a: f90main.ci f90main.h f90main.C charmf.h charmf.C futil.f90
        $(CHARMC) -c futil.f90
        $(CHARMC) -cp ../lib -o libf90charm.a f90main.o charmf.o futil.o
 
-SDAGOBJ=sdag-main.o trans.o CLexer.o CParser.o CParsedFile.o CParseNode.o \
-       sdag-globals.o CParseNodeProcess.o CEntry.o xi-util.o
-
-sdagx: $(SDAGOBJ)
-       $(SEQCHARMC) -cp ../bin -o sdagx -language c++ $(SDAGOBJ)
-
-sdag-main.o: sdag-main.C CLexer.h CToken.h
-       $(SEQCHARMC) -c sdag-main.C
-
-trans.o: trans.c EToken.h
-       $(SEQCHARMC) -c trans.c
-
-CLexer.o: CLexer.C CLexer.h
-       $(SEQCHARMC) -c CLexer.C
-
-CParser.o: CParser.C CParser.h
-       $(SEQCHARMC) -c CParser.C
-
-CParsedFile.o: CParsedFile.C CParsedFile.h
-       $(SEQCHARMC) -c CParsedFile.C
-
-CParseNode.o: CParseNode.C CParseNode.h
-       $(SEQCHARMC) -c CParseNode.C
-
-sdag-globals.o: sdag-globals.C sdag-globals.h
-       $(SEQCHARMC) -c sdag-globals.C
-
-CParseNodeProcess.o: CParseNodeProcess.C CParseNode.h
-       $(SEQCHARMC) -c CParseNodeProcess.C
-
-CEntry.o: CEntry.C CEntry.h
-       $(SEQCHARMC) -c CEntry.C
-
 ###############################################################################
 #
 # Make clean
index c6fc83f2219e67b1c44f50d10bb6112cc415949b..36176c991b6c49bf044c2013e4168a92dcbd0550 100644 (file)
@@ -107,10 +107,10 @@ DIRSSOURCES :
        @xcopy /d /q  ..\..\src\Common\langs\ampi\* .\r
        @xcopy /d /q  ..\..\src\Common\langs\bluegene\* .\r
        @xcopy /d /q  ..\..\src\Common\langs\simplemsg\* .\r
-       @xcopy /d /q  ..\..\src\Common\langs\sdag\xlator\* .\r
        @xcopy /d /q  ..\..\src\Common\langs\pvmc\* .\r
        @xcopy /d /q  ..\..\src\Common\util\* .\r
        @xcopy /d /q  ..\..\src\Common\xlat-i\* .\r
+       @xcopy /d /q  ..\..\src\Common\xlat-i\sdag\* .\r
        @xcopy /d /q  ..\..\src\Common\xlatcpm\*.c .\r
        @xcopy /d /q  ..\..\src\Common.win32\*.h .\r
        @xcopy /d /q  ..\..\src\Common.net\* .\r
@@ -534,14 +534,18 @@ trace-summary.obj : trace-summary.C trace-summary.h trace.h $(CKHEADERS)
 \r
 XIHEADERS=xi-symbol.h xi-grammar.tab.h xi-util.h\r
 CHARMXLATI=xi-main.obj xi-symbol.obj xi-grammar.tab.obj xi-scan.obj xi-util.obj\r
+SDAGOBJ=sdag-main.obj trans.obj CLexer.obj CParser.obj CParsedFile.obj \\r
+       CParseNode.obj sdag-globals.obj CParseNodeProcess.obj CEntry.obj\r
+SDAGHEADERS=CLexer.h CToken.h EToken.h CParser.h CParsedFile.h CParseNode.h \\r
+       sdag-globals.h CEntry.h\r
 \r
 $(CONV_CPM): conv-cpm.c\r
        $(CPP) $(SEQCPP_PROJ) conv-cpm.c\r
        $(LINK) $(LINK_FLAGS) $(LINK_OTHER) /out:"$(XLATI_DIR)\conv-cpm.exe" conv-cpm.obj\r
 \r
-$(CHARMXI): $(CHARMXLATI)\r
+$(CHARMXI): $(CHARMXLATI) $(SDAGOBJ)\r
        $(LINK) $(LINK_FLAGS) /out:"$(XLATI_DIR)\charmxi.exe" \\r
-       $(CHARMXLATI)\r
+       $(CHARMXLATI) $(SDAGOBJ)\r
 \r
 xi-main.obj :                                         \r
        $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\xi-main.C\r
@@ -558,6 +562,33 @@ xi-grammar.tab.obj :
 xi-scan.obj :                                          \r
        $(CPP) $(SEQCPP_PROJ) /TP /DYY_NEVER_INTERACTIVE $(COMMON_SRC)\xi-scan.C\r
 \r
+sdag-main.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\sdag-main.C\r
+\r
+trans.obj:\r
+       $(CPP) $(SEQCPP_PROJ) $(COMMON_SRC)\trans.c\r
+\r
+CLexer.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CLexer.C\r
+\r
+CParser.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CParser.C\r
+\r
+CParsedFile.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CParsedFile.C\r
+\r
+CParseNode.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CParseNode.C\r
+\r
+sdag-globals.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\sdag-globals.C\r
+\r
+CParseNodeProcess.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CParseNodeProcess.C\r
+\r
+CEntry.obj:\r
+       $(CPP) $(SEQCPP_PROJ) /TP $(COMMON_SRC)\CEntry.C\r
+\r
 .IGNORE:        \r
 CLEAN :\r
        rd /s /q BASICS\r
index 8e8cffb8ba6943f29a466aae5d7ef9add2af16e4..cfd02bc38c62de039d3b3d3f5ba8401b0df08663 100755 (executable)
@@ -679,9 +679,6 @@ do
                    Do $CHARMBIN/charmxi $CMK_XIOPTS $BASE.ci
                fi
                ;;
-       *.sdag)
-               Do $CHARMBIN/sdagx $BASE.sdag
-               ;;
        *.c|*.s)
                Do $CMK_CC $OPTSC $OPTS_CC -I$CHARMINC -c $FILE -o $BASE.o
                NU_OBJ=$BASE.o
similarity index 97%
rename from src/langs/sdag/xlator/CParseNode.h
rename to src/xlat-i/sdag/CParseNode.h
index a6317209ad86bee2034e6c217d347e5910effd41..b399840a2ada3be95d9425753a25c15b25ba4f27 100644 (file)
@@ -20,7 +20,6 @@ class CParser;
 
 class CParseNode {
   public:
-    XStr *className;
     void print(int indent);
     int nodeNum;
     XStr *label;
@@ -38,7 +37,7 @@ class CParseNode {
     CParseNode(EToken t, XStr *txt) : type(t), text(txt), con1(0), con2(0),
                                          con3(0), con4(0), constructs(0) {}
     void numberNodes(void);
-    void labelNodes(XStr *);
+    void labelNodes(void);
     void generateEntryList(TList *, CParseNode *);
     void propogateState(TList *);
     void generateCode(XStr& output);
similarity index 99%
rename from src/langs/sdag/xlator/CParseNodeProcess.C
rename to src/xlat-i/sdag/CParseNodeProcess.C
index e02e90c2cd07eca191814e876738c7745915ea55..42f6150039f92d8ec1c66a92e65098ae81d7d2bb 100644 (file)
@@ -36,11 +36,10 @@ void CParseNode::numberNodes(void)
   }
 }
 
-void CParseNode::labelNodes(XStr *cname)
+void CParseNode::labelNodes(void)
 {
   char text[128];
 
-  className = cname;
   switch(type) {
     case ENTRY:
     case SDAGENTRY:
@@ -66,7 +65,7 @@ void CParseNode::labelNodes(XStr *cname)
     case IF: 
       sprintf(text, "_if_%d", nodeNum); 
       label = new XStr(text);
-      if(con2!=0) con2->labelNodes(cname);
+      if(con2!=0) con2->labelNodes();
       break;
     case ELSE: 
       sprintf(text, "_else_%d", nodeNum); 
@@ -96,7 +95,7 @@ void CParseNode::labelNodes(XStr *cname)
   }
   CParseNode *cn;
   for(cn=(CParseNode *)(constructs->begin()); !constructs->end(); cn=(CParseNode *)(constructs->next())) {
-    cn->labelNodes(cname);
+    cn->labelNodes();
   }
 }
 
similarity index 95%
rename from src/langs/sdag/xlator/CParsedFile.C
rename to src/xlat-i/sdag/CParsedFile.C
index b8fcf89b3db5a4e7efa32626e348c4c4a1dff6be..308ed8aa5a5346807e46362edbef54f3b6363cb7 100644 (file)
@@ -10,9 +10,6 @@
 
 void CParsedFile::print(int indent)
 {
-  printf("class ");
-  className->print(indent);
-  printf("\n");
   for(CEntry *ce=(CEntry *)(entryList->begin()); !entryList->end(); ce=(CEntry *)(entryList->next()))
   {
     ce->print(indent);
@@ -35,7 +32,7 @@ void CParsedFile::numberNodes(void)
 void CParsedFile::labelNodes(void)
 {
   for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
-    cn->labelNodes(className);
+    cn->labelNodes();
   }
 }
 
similarity index 84%
rename from src/langs/sdag/xlator/CParsedFile.h
rename to src/xlat-i/sdag/CParsedFile.h
index 12c9df7aab682be5e840695fb42972a6c3c49a50..98952487289802e2df56c31ba5341250f12aebdd 100644 (file)
@@ -25,16 +25,16 @@ class CParsedFile {
     void generateEntries(XStr& output);
     void generateInitFunction(XStr& output);
   public:
-    XStr *className;
     TList *entryList;
     TList *nodeList;
-    CParsedFile(void): className(0) {
+    CParsedFile(void) {
       entryList = new TList();
       nodeList = new TList();
     }
     ~CParsedFile(void){}
     void print(int indent);
-    void doProcess(XStr& output) {
+    void doProcess(XStr& classname, XStr& output) {
+      output << "#define " << classname << "_SDAG_CODE \n";
       numberNodes();
       labelNodes();
       propogateState();
@@ -42,6 +42,8 @@ class CParsedFile {
       generateCode(output);
       generateEntries(output);
       generateInitFunction(output);
+      output.line_append('\\');
+      output << "\n";
     }
 };
 
similarity index 94%
rename from src/langs/sdag/xlator/CParser.C
rename to src/xlat-i/sdag/CParser.C
index 554aef8913226d9e0732da2b45b516f1b89a10ae..dcf72bd4f56c69f812cf21f52403bb853cc0d9fa 100644 (file)
@@ -75,9 +75,6 @@ CParsedFile *CParser::doParse(void)
   CParsedFile *cParsedFile = new CParsedFile();
   CToken *tok;
 
-  tok = lookForToken(CLASS); delete tok;
-  tok = lookForToken(IDENT);
-  cParsedFile->className = tok->text;
   while(1) {
     tok = lookForToken(SDAGENTRY);
     if(tok == 0)
diff --git a/src/xlat-i/sdag/sdag-main.C b/src/xlat-i/sdag/sdag-main.C
new file mode 100644 (file)
index 0000000..d8dea80
--- /dev/null
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * $Source$
+ * $Author$
+ * $Date$
+ * $Revision$
+ *****************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "CLexer.h"
+#include "CToken.h"
+#include "CParsedFile.h"
+#include "CParser.h"
+#include "sdag-globals.h"
+#include "xi-util.h"
+
+void sdag_trans(XStr& classname, XStr& input, XStr& output)
+{
+  resetNumbers();
+  CParser *cParser = new CParser(input);
+  CParsedFile *parsedFile = cParser->doParse();
+  parsedFile->doProcess(classname, output);
+  delete parsedFile;
+  delete cParser;
+}
similarity index 97%
rename from src/langs/sdag/xlator/trans.c
rename to src/xlat-i/sdag/trans.c
index 35392a235ec7d06f76d97be4f5b4cac86dca4a70..961d217f1f8e1ac470037362da8e99c491125792 100644 (file)
@@ -16,7 +16,7 @@
 #define yytext sltext
 #define yywrap slwrap
 
-#line 20 "trans.c"
+#line 20 "sdag/trans.c"
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
@@ -524,9 +524,9 @@ static char *yy_last_accepting_cpos;
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "trans.l"
+#line 1 "sdag/trans.l"
 #define INITIAL 0
-#line 2 "trans.l"
+#line 2 "sdag/trans.l"
 #include "EToken.h"
 
 /* Assume that the C-style comments are not present in the source */
@@ -535,7 +535,7 @@ char *mysltext;
 #define Return(x) { mysltext = (char *) malloc(strlen(sltext)+1); \
                     strcpy(mysltext, sltext); return (x); }
 
-#line 539 "trans.c"
+#line 539 "sdag/trans.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -686,10 +686,10 @@ YY_DECL
        register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;
 
-#line 35 "trans.l"
+#line 35 "sdag/trans.l"
 
 
-#line 693 "trans.c"
+#line 693 "sdag/trans.c"
 
        if ( yy_init )
                {
@@ -774,240 +774,240 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 37 "trans.l"
-{Return(WSPACE);}
+#line 37 "sdag/trans.l"
+{}
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 39 "trans.l"
+#line 39 "sdag/trans.l"
 {Return(WSPACE);}
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 40 "trans.l"
+#line 40 "sdag/trans.l"
 {Return(WSPACE);}
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 41 "trans.l"
+#line 41 "sdag/trans.l"
 {Return(NEW_LINE);}
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 44 "trans.l"
+#line 44 "sdag/trans.l"
 {Return(CLASS);}
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 45 "trans.l"
+#line 45 "sdag/trans.l"
 {Return(SDAGENTRY);}
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 46 "trans.l"
+#line 46 "sdag/trans.l"
 {Return(OVERLAP);}
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 47 "trans.l"
+#line 47 "sdag/trans.l"
 {Return(WHEN);}
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 48 "trans.l"
+#line 48 "sdag/trans.l"
 {Return(IF);}
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 49 "trans.l"
+#line 49 "sdag/trans.l"
 {Return(ELSE);}
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 50 "trans.l"
+#line 50 "sdag/trans.l"
 {Return(WHILE);}
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 51 "trans.l"
+#line 51 "sdag/trans.l"
 {Return(FORALL);}
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 52 "trans.l"
+#line 52 "sdag/trans.l"
 {Return(FOR);}
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 53 "trans.l"
+#line 53 "sdag/trans.l"
 {Return(ATOMIC);}
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 55 "trans.l"
+#line 55 "sdag/trans.l"
 {Return(IDENT);}
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 57 "trans.l"
+#line 57 "sdag/trans.l"
 {Return(CHAR);}
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 58 "trans.l"
+#line 58 "sdag/trans.l"
 {Return(STRING);}
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 60 "trans.l"
+#line 60 "sdag/trans.l"
 {Return(LP);}
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 61 "trans.l"
+#line 61 "sdag/trans.l"
 {Return(RP);}
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 62 "trans.l"
+#line 62 "sdag/trans.l"
 {Return(LB);}
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 63 "trans.l"
+#line 63 "sdag/trans.l"
 {Return(RB);}
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 64 "trans.l"
+#line 64 "sdag/trans.l"
 {Return(LBRACE);}
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 65 "trans.l"
+#line 65 "sdag/trans.l"
 {Return(RBRACE);}
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 66 "trans.l"
+#line 66 "sdag/trans.l"
 {Return(STAR);}
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 67 "trans.l"
+#line 67 "sdag/trans.l"
 {Return(COLON);}
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 68 "trans.l"
+#line 68 "sdag/trans.l"
 {Return(COMMA);}
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 69 "trans.l"
+#line 69 "sdag/trans.l"
 {Return(SEMICOLON);}
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 71 "trans.l"
+#line 71 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 72 "trans.l"
+#line 72 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 73 "trans.l"
+#line 73 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 74 "trans.l"
+#line 74 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 75 "trans.l"
+#line 75 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 76 "trans.l"
+#line 76 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 77 "trans.l"
+#line 77 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 78 "trans.l"
+#line 78 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 79 "trans.l"
+#line 79 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 80 "trans.l"
+#line 80 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 81 "trans.l"
+#line 81 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 82 "trans.l"
+#line 82 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 83 "trans.l"
+#line 83 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 84 "trans.l"
+#line 84 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 85 "trans.l"
+#line 85 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 87 "trans.l"
+#line 87 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 88 "trans.l"
+#line 88 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 89 "trans.l"
+#line 89 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 90 "trans.l"
+#line 90 "sdag/trans.l"
 {Return(DEFAULT);}
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 92 "trans.l"
+#line 92 "sdag/trans.l"
 ECHO;
        YY_BREAK
-#line 1011 "trans.c"
+#line 1011 "sdag/trans.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1893,7 +1893,7 @@ int main()
        return 0;
        }
 #endif
-#line 92 "trans.l"
+#line 92 "sdag/trans.l"
 
 
 slwrap()
similarity index 98%
rename from src/langs/sdag/xlator/trans.l
rename to src/xlat-i/sdag/trans.l
index 9a9c9cffeb350cb034d19e228e6b60bfe9bffa3f..00e9865ce4365b1777fd37ba83abcc2b5031f8c4 100644 (file)
@@ -34,7 +34,7 @@ octal_constant "0"[0-7]*{integer_suffix_opt}
 hex_constant "0"[xX][0-9a-fA-F]+{integer_suffix_opt}
 %%
 
-{comment}              {Return(WSPACE);}
+{comment}              {}
 
 {hwhite}+              {Return(WSPACE);}
 ({vt}|{cret}|{ff})+    {Return(WSPACE);}
index d26c4aafbdf619d158f53f8221fd2b6b42260956..eca50e06b4d816927ce441ab1d8e847be5d24e5c 100644 (file)
@@ -1,7 +1,6 @@
 
 /*  A Bison parser, made from xi-grammar.y
- by  GNU Bison version 1.27
-  */
+    by GNU Bison version 1.28  */
 
 #define YYBISON 1  /* Identify Bison output.  */
 
@@ -96,11 +95,11 @@ typedef union {
 
 
 
-#define        YYFINAL         295
+#define        YYFINAL         301
 #define        YYFLAG          -32768
 #define        YYNTBASE        53
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 292 ? yytranslate[x] : 123)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 292 ? yytranslate[x] : 125)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -149,10 +148,11 @@ static const short yyprhs[] = {     0,
    261,   267,   273,   279,   284,   288,   294,   300,   306,   312,
    318,   324,   329,   330,   333,   334,   337,   340,   344,   347,
    351,   353,   357,   362,   365,   368,   371,   374,   377,   379,
-   384,   385,   388,   391,   394,   397,   405,   410,   412,   414,
-   415,   419,   421,   425,   427,   429,   431,   433,   435,   437,
-   439,   441,   443,   445,   451,   457,   461,   463,   466,   471,
-   475,   477,   481,   485,   488,   489,   493,   494
+   384,   385,   388,   391,   394,   397,   406,   412,   414,   416,
+   417,   421,   423,   427,   429,   431,   433,   435,   437,   439,
+   441,   443,   445,   446,   448,   454,   460,   464,   466,   468,
+   471,   476,   480,   482,   486,   490,   493,   494,   498,   499,
+   502,   503
 };
 
 static const short yyrhs[] = {    54,
@@ -171,7 +171,7 @@ static const short yyrhs[] = {    54,
     37,     0,    33,    37,     0,    23,     0,    57,    66,     0,
     58,    66,     0,    67,     0,    69,     0,    70,    46,     0,
     71,    46,     0,    72,    46,     0,    74,    47,    46,    57,
-    48,    47,   119,    48,     0,    70,     0,    71,     0,    72,
+    48,    47,   120,    48,     0,    70,     0,    71,     0,    72,
      0,    73,     0,    74,    49,    75,    50,     0,    74,    51,
      0,    29,     0,    58,     0,    49,    75,    50,     0,     0,
     76,    77,     0,     6,    74,    58,    77,     0,     6,    12,
@@ -196,38 +196,40 @@ static const short yyrhs[] = {    54,
    105,    99,     0,   105,   100,     0,    39,     0,    41,   108,
     42,    56,     0,     0,   109,   108,     0,   110,    39,     0,
     78,    39,     0,    79,    39,     0,    27,   112,   111,    57,
-   120,   122,   121,     0,    27,   112,    57,   120,     0,    23,
-     0,    71,     0,     0,    49,   113,    50,     0,   114,     0,
-   114,    43,   113,     0,    15,     0,    17,     0,    18,     0,
-    19,     0,    21,     0,    22,     0,    30,     0,    29,     0,
-    58,     0,    31,     0,    31,    49,    31,    50,    31,     0,
-    31,    41,    31,    42,    31,     0,    74,    57,    49,     0,
-    74,     0,    74,    57,     0,    74,    57,    52,   115,     0,
-   117,   116,    50,     0,   118,     0,   118,    43,   119,     0,
-    47,   119,    48,     0,    47,    48,     0,     0,    14,    52,
-    29,     0,     0,    52,    29,     0
+   121,   123,   122,   124,     0,    27,   112,    57,   121,   124,
+     0,    23,     0,    71,     0,     0,    49,   113,    50,     0,
+   114,     0,   114,    43,   113,     0,    15,     0,    17,     0,
+    18,     0,    19,     0,    21,     0,    22,     0,    30,     0,
+    29,     0,    58,     0,     0,    31,     0,    31,    49,    31,
+    50,    31,     0,    31,    41,   116,    42,   116,     0,    74,
+    57,    49,     0,    41,     0,    74,     0,    74,    57,     0,
+    74,    57,    52,   115,     0,   117,   116,    50,     0,   119,
+     0,   119,    43,   120,     0,    47,   120,    48,     0,    47,
+    48,     0,     0,    14,    52,    29,     0,     0,    52,    29,
+     0,     0,   118,   116,    42,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-    99,   103,   105,   109,   111,   115,   117,   121,   125,   127,
-   135,   137,   141,   143,   147,   149,   153,   155,   157,   159,
-   161,   163,   165,   167,   169,   171,   175,   177,   179,   183,
-   185,   189,   191,   195,   197,   201,   203,   205,   207,   209,
-   211,   213,   215,   217,   219,   221,   223,   225,   229,   230,
-   232,   234,   238,   242,   244,   248,   252,   254,   256,   258,
-   260,   262,   268,   270,   274,   278,   280,   284,   288,   292,
-   294,   304,   306,   310,   312,   316,   318,   322,   324,   328,
-   332,   336,   338,   342,   344,   348,   350,   354,   356,   360,
-   362,   366,   370,   374,   380,   384,   388,   390,   394,   398,
-   402,   406,   410,   412,   416,   418,   420,   424,   426,   428,
-   432,   434,   438,   442,   444,   446,   448,   450,   454,   456,
-   460,   462,   466,   468,   470,   474,   476,   480,   482,   486,
-   488,   492,   494,   498,   500,   502,   504,   506,   508,   512,
-   514,   516,   520,   522,   528,   536,   543,   545,   547,   549,
-   556,   558,   562,   564,   568,   570,   574,   576
+   100,   104,   106,   110,   112,   116,   118,   122,   126,   128,
+   136,   138,   142,   144,   148,   150,   154,   156,   158,   160,
+   162,   164,   166,   168,   170,   172,   176,   178,   180,   184,
+   186,   190,   192,   196,   198,   202,   204,   206,   208,   210,
+   212,   214,   216,   218,   220,   222,   224,   226,   230,   231,
+   233,   235,   239,   243,   245,   249,   253,   255,   257,   259,
+   261,   263,   269,   271,   275,   279,   281,   285,   289,   293,
+   295,   305,   307,   311,   313,   317,   319,   323,   325,   329,
+   333,   337,   339,   343,   345,   349,   351,   355,   357,   361,
+   363,   367,   371,   375,   381,   385,   389,   391,   395,   399,
+   403,   407,   411,   413,   417,   419,   421,   425,   427,   429,
+   433,   435,   439,   443,   445,   447,   449,   451,   455,   457,
+   461,   463,   467,   469,   471,   475,   479,   485,   487,   491,
+   493,   497,   499,   503,   505,   507,   509,   511,   513,   517,
+   519,   521,   525,   527,   529,   535,   543,   550,   557,   559,
+   561,   563,   570,   572,   576,   578,   582,   584,   588,   590,
+   596,   598
 };
 #endif
 
@@ -249,8 +251,8 @@ static const char * const yytname[] = {   "$","error","$undefined.","MODULE",
 "ArrayIndexType","Array","TChare","TGroup","TNodeGroup","TArray","TMessage",
 "OptTypeInit","OptNameInit","TVar","TVarList","TemplateSpec","Template","MemberEList",
 "MemberList","Member","Entry","EReturn","EAttribs","EAttribList","EAttrib","DefaultParameter",
-"CCode","ParamBracketStart","Parameter","ParamList","EParameters","OptStackSize",
-"OptPure", NULL
+"CCode","ParamBracketStart","ParamBraceStart","Parameter","ParamList","EParameters",
+"OptStackSize","OptPure","OptSdagCode", NULL
 };
 #endif
 
@@ -269,8 +271,9 @@ static const short yyr1[] = {     0,
    104,   104,   105,   106,   106,   106,   106,   106,   107,   107,
    108,   108,   109,   109,   109,   110,   110,   111,   111,   112,
    112,   113,   113,   114,   114,   114,   114,   114,   114,   115,
-   115,   115,   116,   116,   116,   117,   118,   118,   118,   118,
-   119,   119,   120,   120,   121,   121,   122,   122
+   115,   115,   116,   116,   116,   116,   117,   118,   119,   119,
+   119,   119,   120,   120,   121,   121,   122,   122,   123,   123,
+   124,   124
 };
 
 static const short yyr2[] = {     0,
@@ -286,10 +289,11 @@ static const short yyr2[] = {     0,
      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,     4,     1,     1,     0,
+     0,     2,     2,     2,     2,     8,     5,     1,     1,     0,
      3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     5,     5,     3,     1,     2,     4,     3,
-     1,     3,     3,     2,     0,     3,     0,     2
+     1,     1,     0,     1,     5,     5,     3,     1,     1,     2,
+     4,     3,     1,     3,     3,     2,     0,     3,     0,     2,
+     0,     3
 };
 
 static const short yydefact[] = {     2,
@@ -316,70 +320,74 @@ static const short yydefact[] = {     2,
      0,     0,     0,   102,    31,     0,    65,     0,   130,     0,
      0,     0,   121,     0,     0,    83,    85,   104,    97,    98,
     99,   100,   101,     0,    89,     0,     0,   124,   125,     6,
-   122,   123,     0,   147,     0,   151,     0,   134,   135,   136,
+   122,   123,     0,   149,   143,   153,     0,   134,   135,   136,
    137,   138,   139,     0,   132,    48,     9,     0,     0,   129,
-     0,   120,     0,   148,   143,     0,     0,    56,   131,     0,
-     0,   127,     0,    81,   146,     0,     0,     0,   150,   152,
-   133,   154,     0,   157,   141,   140,   142,   149,     0,     0,
-   153,     0,   155,     0,     0,   158,     0,   126,   145,   144,
-     0,   156,     0,     0,     0
+     0,   120,     0,   150,   144,     0,     0,    56,   131,     0,
+     0,   161,     0,    81,   147,     0,   143,     0,   152,   154,
+   133,   156,     0,   148,   143,   127,   159,   141,   140,   142,
+   151,     0,     0,   155,     0,     0,   157,   143,     0,   162,
+   160,     0,   161,   146,   145,     0,   126,   158,     0,     0,
+     0
 };
 
-static const short yydefgoto[] = {   293,
+static const short yydefgoto[] = {   299,
      3,    14,    82,   103,    48,     4,    11,    15,    16,   132,
    133,   134,    92,    49,   179,    50,    51,    52,    53,    54,
    234,   139,   141,   142,   210,   211,    64,   113,   114,    57,
    101,   102,   191,   192,    29,   147,   180,    30,    31,    32,
     62,    33,    76,    77,    78,    79,    80,   194,   159,   119,
    120,    34,    35,   183,   212,   213,   214,   251,   227,   244,
-   245,   278,   256,   235,   236,   237,   262,   288,   283
+   245,   281,   256,   235,   275,   236,   237,   262,   293,   287,
+   276
 };
 
-static const short yypact[] = {   143,
-    15,    15,-32768,   143,-32768,    71,    71,-32768,-32768,    19,
+static const short yypact[] = {    61,
+    17,    17,-32768,    61,-32768,    71,    71,-32768,-32768,    19,
 -32768,-32768,-32768,     7,   -15,    19,   117,   -17,   -17,   -17,
-   -17,    -4,    28,    45,    19,-32768,    55,    66,    70,-32768,
--32768,-32768,-32768,   207,-32768,    74,-32768,   149,-32768,-32768,
--32768,    25,-32768,-32768,-32768,-32768,   141,     2,-32768,-32768,
-    73,    82,    85,-32768,     6,   118,    15,    15,    15,    15,
-   129,    15,   169,    15,    63,   102,-32768,-32768,-32768,   -17,
-   -17,   -17,   -17,    -4,    28,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    96,-32768,-32768,-32768,-32768,-32768,-32768,   120,
-   133,-32768,-32768,-32768,-32768,   150,   162,-32768,    10,-32768,
-   114,   136,   164,   170,   170,   170,   170,    15,   172,   170,
--32768,-32768,   173,   181,   171,    15,     4,    57,   182,   183,
-    74,    15,    15,    15,    15,    15,    15,    15,   199,-32768,
--32768,   186,-32768,   185,    69,    15,-32768,   192,   184,   162,
-   187,-32768,-32768,   118,-32768,    15,   100,   100,   100,   100,
-   188,-32768,   100,-32768,   169,   149,   179,   191,-32768,   189,
-    63,-32768,-32768,   170,   170,   170,   170,   170,   196,-32768,
--32768,   133,-32768,   194,-32768,   190,-32768,-32768,   200,-32768,
+   -17,    10,    28,    75,    19,-32768,    74,    89,    92,-32768,
+-32768,-32768,-32768,   207,-32768,    99,-32768,   149,-32768,-32768,
+-32768,    25,-32768,-32768,-32768,-32768,   141,    50,-32768,-32768,
+    96,    98,   114,-32768,     6,   144,    17,    17,    17,    17,
+    60,    17,   121,    17,    63,   137,-32768,-32768,-32768,   -17,
+   -17,   -17,   -17,    10,    28,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   162,-32768,-32768,-32768,-32768,-32768,-32768,   170,
+   133,-32768,-32768,-32768,-32768,   174,   129,-32768,    43,-32768,
+   171,   169,   178,   183,   183,   183,   183,    17,   175,   183,
+-32768,-32768,   177,   181,   187,    17,     4,    57,   186,   185,
+    99,    17,    17,    17,    17,    17,    17,    17,   203,-32768,
+-32768,   189,-32768,   190,    69,    17,-32768,   194,   188,   129,
+   191,-32768,-32768,   144,-32768,    17,   100,   100,   100,   100,
+   192,-32768,   100,-32768,   121,   149,   184,   161,-32768,   193,
+    63,-32768,-32768,   183,   183,   183,   183,   183,   198,-32768,
+-32768,   133,-32768,   195,-32768,   196,-32768,-32768,   201,-32768,
 -32768,    27,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    57,
-   149,   195,   149,-32768,-32768,-32768,-32768,-32768,   100,   100,
-   100,   100,   100,-32768,-32768,   197,-32768,    15,   198,   206,
-   209,   204,    27,   210,   202,-32768,-32768,    69,-32768,-32768,
--32768,-32768,-32768,   149,-32768,   115,   165,-32768,-32768,    74,
--32768,-32768,   203,    57,   208,   211,   212,-32768,-32768,-32768,
--32768,-32768,-32768,   205,   213,   224,   214,   215,    73,-32768,
-    15,-32768,   218,    41,    62,   216,   149,-32768,-32768,   115,
-     3,-32768,   215,-32768,-32768,    35,   227,   228,-32768,-32768,
--32768,-32768,   217,   219,-32768,-32768,   192,-32768,   221,   220,
--32768,   235,   253,   237,   238,-32768,   222,-32768,-32768,-32768,
-   243,-32768,   273,   275,-32768
+   149,   197,   149,-32768,-32768,-32768,-32768,-32768,   100,   100,
+   100,   100,   100,-32768,-32768,   200,-32768,    17,   199,   202,
+   210,   209,    27,   213,   204,-32768,-32768,    69,-32768,-32768,
+-32768,-32768,-32768,   149,-32768,   115,   165,-32768,-32768,    99,
+-32768,-32768,   205,    57,   223,   214,   208,-32768,-32768,-32768,
+-32768,-32768,-32768,   211,   215,   231,   216,   217,    96,-32768,
+    17,-32768,   221,    -6,    62,   212,   149,-32768,-32768,   115,
+     3,   224,   217,-32768,-32768,   166,   223,   235,-32768,-32768,
+-32768,-32768,   219,-32768,   223,-32768,   218,-32768,-32768,   194,
+-32768,   226,   222,-32768,   227,   242,   259,   223,   243,-32768,
+-32768,   225,   224,-32768,-32768,   246,-32768,-32768,   276,   278,
+-32768
 };
 
 static const short yypgoto[] = {-32768,
-   272,-32768,  -116,    -1,   -53,   263,   271,    67,-32768,-32768,
-   107,-32768,   177,-32768,   147,-32768,   -35,    54,-32768,   -59,
-   -13,   142,-32768,   144,   269,   270,   223,   131,-32768,     9,
-   145,-32768,-32768,    97,-32768,   -98,    79,-32768,-32768,-32768,
-   225,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   130,-32768,
-   132,-32768,-32768,  -128,    78,-32768,-32768,-32768,-32768,    32,
--32768,-32768,-32768,-32768,-32768,  -173,    31,-32768,-32768
+   275,-32768,  -116,    -1,   -53,   266,   274,    68,-32768,-32768,
+   110,-32768,   180,-32768,   147,-32768,   -35,    58,-32768,   -59,
+   -13,   146,-32768,   143,   273,   277,   220,   134,-32768,     9,
+   148,-32768,-32768,    97,-32768,   -98,    82,-32768,-32768,-32768,
+   228,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   136,-32768,
+   132,-32768,-32768,  -128,    81,-32768,-32768,-32768,-32768,    37,
+-32768,-32768,  -225,-32768,-32768,-32768,  -152,    35,-32768,-32768,
+     8
 };
 
 
-#define        YYLAST          299
+#define        YYLAST          302
 
 
 static const short yytable[] = {     6,
@@ -387,32 +395,33 @@ static const short yytable[] = {     6,
      2,   153,    17,    18,    19,    20,    21,    22,    23,   184,
    185,   186,    24,    13,   188,    39,    36,    58,    59,    60,
     40,    56,    17,    40,    41,    42,    43,    44,    45,    46,
-    47,    90,     5,   138,    61,    91,  -105,    25,  -105,    90,
-   272,   118,    96,   209,    97,   158,    98,    84,   140,   109,
-   -15,    85,    40,   275,   276,   199,   200,   201,   202,   203,
+    47,   282,   265,   138,     5,   266,  -105,    25,  -105,   285,
+   272,   118,    96,   209,    97,   158,    98,    84,    61,   109,
+   -15,    85,   294,     1,     2,   199,   200,   201,   202,   203,
    219,   220,   221,   222,   223,   116,    63,   135,   122,   123,
-   124,   125,    37,   270,     5,    39,   138,   273,    65,   265,
-    40,    66,   266,    67,    41,    42,    43,    44,    45,    46,
-    47,   117,   267,    96,    68,    97,   151,    98,    69,     9,
-   268,    10,    81,   252,   157,    96,   160,    97,    93,    98,
-   164,   165,   166,   167,   168,   169,   170,    94,    38,   238,
-    95,   239,   240,   241,   174,   242,   243,   100,   181,    39,
-   182,   128,   190,   121,    40,     1,     2,   118,    41,    42,
-    43,    44,    45,    46,    47,    39,     5,   108,   135,   129,
-    40,   130,   131,   143,    41,    42,    43,    44,    45,    46,
-    47,    39,    86,    87,    88,    89,    40,   190,   144,   218,
-    41,    42,    43,    44,    45,    46,    47,   246,   215,    40,
-   137,   249,   247,   111,   112,   136,    41,    42,    43,    44,
-    45,    46,    47,   104,   105,   106,   107,    91,   110,   146,
-   115,   156,   277,    70,    71,    72,    73,    74,    75,   195,
-   196,   152,   154,   155,   161,   248,   171,   162,   172,   173,
-   193,    90,   254,   175,   204,   140,   217,   187,   255,   207,
-   158,   206,   208,   224,   228,   230,   226,   229,   232,   263,
-   233,  -128,   253,   257,   259,   260,   264,   279,   280,   258,
-    -8,   261,   284,   286,   281,   269,   287,   289,   290,   285,
-   282,   292,   294,   291,   295,     8,    26,    12,   205,   145,
-   250,   176,    27,    28,   177,   189,   225,   216,   178,   197,
-   231,   271,   198,   274,     0,     0,     0,   127,   126
+   124,   125,    90,    37,     5,    39,   138,     5,   108,    90,
+    40,   140,    66,    91,    41,    42,    43,    44,    45,    46,
+    47,   117,   267,    96,   270,    97,   151,    98,   273,     9,
+   268,    10,    67,   252,   157,    96,   160,    97,    65,    98,
+   164,   165,   166,   167,   168,   169,   170,    68,    38,   238,
+    69,   239,   240,   241,   174,   242,   243,    81,   181,    39,
+   182,    93,   190,    94,    40,   111,   112,   118,    41,    42,
+    43,    44,    45,    46,    47,    39,    40,   137,   135,    95,
+    40,   130,   131,   100,    41,    42,    43,    44,    45,    46,
+    47,    39,    86,    87,    88,    89,    40,   190,   121,   218,
+    41,    42,    43,    44,    45,    46,    47,   246,   215,   195,
+   196,   249,   247,    40,   278,   279,    41,    42,    43,    44,
+    45,    46,    47,   104,   105,   106,   107,   128,   110,   129,
+   115,   144,   280,    70,    71,    72,    73,    74,    75,   136,
+   143,    91,   146,   155,   152,   248,   154,   156,   161,   162,
+   171,   172,   254,    90,   173,   193,   204,   175,   217,   140,
+   228,   187,   206,   208,   158,   207,   224,   226,   229,   263,
+   230,   232,   233,   255,   253,   258,   257,   260,  -128,   264,
+   259,   269,    -8,   261,   274,   283,   284,   288,   290,   286,
+   291,   289,   292,   295,   298,   300,   296,   301,     8,    26,
+    12,   205,   145,   177,   250,   176,    27,   216,   189,   225,
+    28,   178,   198,   231,   127,   197,   271,   277,     0,     0,
+   297,   126
 };
 
 static const short yycheck[] = {     1,
@@ -420,36 +429,37 @@ static const short yycheck[] = {     1,
      4,   110,     6,     7,     8,     9,    10,    11,    12,   148,
    149,   150,    16,     5,   153,    23,    42,    19,    20,    21,
     28,    49,     6,    28,    32,    33,    34,    35,    36,    37,
-    38,    40,    28,    97,    49,    44,    43,    41,    45,    40,
+    38,   267,    49,    97,    28,    52,    43,    41,    45,   275,
     48,    65,    47,    27,    49,    52,    51,    33,    49,    61,
-    42,    37,    28,    29,    30,   164,   165,   166,   167,   168,
+    42,    37,   288,     3,     4,   164,   165,   166,   167,   168,
    199,   200,   201,   202,   203,    13,    49,    91,    70,    71,
-    72,    73,    16,   257,    28,    23,   140,   261,    44,    49,
-    28,    25,    52,    39,    32,    33,    34,    35,    36,    37,
-    38,   161,    41,    47,    39,    49,   108,    51,    39,    39,
-    49,    41,    39,   230,   116,    47,   118,    49,    46,    51,
-   122,   123,   124,   125,   126,   127,   128,    46,    12,    15,
-    46,    17,    18,    19,   136,    21,    22,    20,    39,    23,
-    41,    46,   156,    42,    28,     3,     4,   161,    32,    33,
-    34,    35,    36,    37,    38,    23,    28,    29,   172,    40,
-    28,    29,    30,    50,    32,    33,    34,    35,    36,    37,
-    38,    23,    32,    33,    34,    35,    28,   191,    43,   193,
-    32,    33,    34,    35,    36,    37,    38,    23,   190,    28,
-    29,   227,    28,    25,    26,    46,    32,    33,    34,    35,
-    36,    37,    38,    57,    58,    59,    60,    44,    62,    40,
-    64,    41,   266,     7,     8,     9,    10,    11,    12,    29,
-    30,    50,    50,    43,    43,   227,    28,    45,    43,    45,
-    52,    40,   234,    50,    39,    49,    42,    50,    31,    50,
-    52,    48,    43,    47,    39,    42,    49,    39,    39,   251,
-    49,    28,    50,    43,    50,    43,    39,    31,    31,    48,
-    47,    47,    42,    29,    48,    50,    14,    31,    31,    50,
-    52,    29,     0,    52,     0,     4,    14,     7,   172,   103,
-   227,   140,    14,    14,   141,   155,   208,   191,   144,   160,
-   213,   260,   161,   263,    -1,    -1,    -1,    75,    74
+    72,    73,    40,    16,    28,    23,   140,    28,    29,    40,
+    28,    49,    25,    44,    32,    33,    34,    35,    36,    37,
+    38,   161,    41,    47,   257,    49,   108,    51,   261,    39,
+    49,    41,    39,   230,   116,    47,   118,    49,    44,    51,
+   122,   123,   124,   125,   126,   127,   128,    39,    12,    15,
+    39,    17,    18,    19,   136,    21,    22,    39,    39,    23,
+    41,    46,   156,    46,    28,    25,    26,   161,    32,    33,
+    34,    35,    36,    37,    38,    23,    28,    29,   172,    46,
+    28,    29,    30,    20,    32,    33,    34,    35,    36,    37,
+    38,    23,    32,    33,    34,    35,    28,   191,    42,   193,
+    32,    33,    34,    35,    36,    37,    38,    23,   190,    29,
+    30,   227,    28,    28,    29,    30,    32,    33,    34,    35,
+    36,    37,    38,    57,    58,    59,    60,    46,    62,    40,
+    64,    43,   266,     7,     8,     9,    10,    11,    12,    46,
+    50,    44,    40,    43,    50,   227,    50,    41,    43,    45,
+    28,    43,   234,    40,    45,    52,    39,    50,    42,    49,
+    39,    50,    48,    43,    52,    50,    47,    49,    39,   251,
+    42,    39,    49,    31,    50,    48,    43,    43,    28,    39,
+    50,    50,    47,    47,    41,    31,    48,    42,    42,    52,
+    29,    50,    14,    31,    29,     0,    52,     0,     4,    14,
+     7,   172,   103,   141,   227,   140,    14,   191,   155,   208,
+    14,   144,   161,   213,    75,   160,   260,   263,    -1,    -1,
+   293,    74
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/bison.simple"
-/* This file comes from bison-1.27.  */
+#line 3 "/usr/lib/bison.simple"
+/* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -662,7 +672,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 \f
-#line 216 "/usr/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 *.
@@ -991,43 +1001,43 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 100 "xi-grammar.y"
+#line 101 "xi-grammar.y"
 { yyval.modlist = yyvsp[0].modlist; modlist = yyvsp[0].modlist; ;
     break;}
 case 2:
-#line 104 "xi-grammar.y"
+#line 105 "xi-grammar.y"
 { yyval.modlist = 0; ;
     break;}
 case 3:
-#line 106 "xi-grammar.y"
+#line 107 "xi-grammar.y"
 { yyval.modlist = new ModuleList(lineno, yyvsp[-1].module, yyvsp[0].modlist); ;
     break;}
 case 4:
-#line 110 "xi-grammar.y"
+#line 111 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 5:
-#line 112 "xi-grammar.y"
+#line 113 "xi-grammar.y"
 { yyval.intval = 1; ;
     break;}
 case 6:
-#line 116 "xi-grammar.y"
+#line 117 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 7:
-#line 118 "xi-grammar.y"
+#line 119 "xi-grammar.y"
 { yyval.intval = 1; ;
     break;}
 case 8:
-#line 122 "xi-grammar.y"
+#line 123 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 9:
-#line 126 "xi-grammar.y"
+#line 127 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 10:
-#line 128 "xi-grammar.y"
+#line 129 "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);
@@ -1035,247 +1045,247 @@ case 10:
                ;
     break;}
 case 11:
-#line 136 "xi-grammar.y"
+#line 137 "xi-grammar.y"
 { yyval.module = new Module(lineno, yyvsp[-1].strval, yyvsp[0].conslist); ;
     break;}
 case 12:
-#line 138 "xi-grammar.y"
+#line 139 "xi-grammar.y"
 { yyval.module = new Module(lineno, yyvsp[-1].strval, yyvsp[0].conslist); yyval.module->setMain(); ;
     break;}
 case 13:
-#line 142 "xi-grammar.y"
+#line 143 "xi-grammar.y"
 { yyval.conslist = 0; ;
     break;}
 case 14:
-#line 144 "xi-grammar.y"
+#line 145 "xi-grammar.y"
 { yyval.conslist = yyvsp[-2].conslist; ;
     break;}
 case 15:
-#line 148 "xi-grammar.y"
+#line 149 "xi-grammar.y"
 { yyval.conslist = 0; ;
     break;}
 case 16:
-#line 150 "xi-grammar.y"
+#line 151 "xi-grammar.y"
 { yyval.conslist = new ConstructList(lineno, yyvsp[-1].construct, yyvsp[0].conslist); ;
     break;}
 case 17:
-#line 154 "xi-grammar.y"
+#line 155 "xi-grammar.y"
 { if(yyvsp[-2].conslist) yyvsp[-2].conslist->setExtern(yyvsp[-4].intval); yyval.construct = yyvsp[-2].conslist; ;
     break;}
 case 18:
-#line 156 "xi-grammar.y"
+#line 157 "xi-grammar.y"
 { yyvsp[0].module->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].module; ;
     break;}
 case 19:
-#line 158 "xi-grammar.y"
+#line 159 "xi-grammar.y"
 { yyvsp[-1].readonly->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].readonly; ;
     break;}
 case 20:
-#line 160 "xi-grammar.y"
+#line 161 "xi-grammar.y"
 { yyvsp[-1].readonly->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].readonly; ;
     break;}
 case 21:
-#line 162 "xi-grammar.y"
+#line 163 "xi-grammar.y"
 { yyvsp[-1].message->setExtern(yyvsp[-2].intval); yyval.construct = yyvsp[-1].message; ;
     break;}
 case 22:
-#line 164 "xi-grammar.y"
+#line 165 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 23:
-#line 166 "xi-grammar.y"
+#line 167 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 24:
-#line 168 "xi-grammar.y"
+#line 169 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 25:
-#line 170 "xi-grammar.y"
+#line 171 "xi-grammar.y"
 { yyvsp[0].chare->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].chare; ;
     break;}
 case 26:
-#line 172 "xi-grammar.y"
+#line 173 "xi-grammar.y"
 { yyvsp[0].templat->setExtern(yyvsp[-1].intval); yyval.construct = yyvsp[0].templat; ;
     break;}
 case 27:
-#line 176 "xi-grammar.y"
+#line 177 "xi-grammar.y"
 { yyval.tparam = new TParamType(yyvsp[0].type); ;
     break;}
 case 28:
-#line 178 "xi-grammar.y"
+#line 179 "xi-grammar.y"
 { yyval.tparam = new TParamVal(yyvsp[0].strval); ;
     break;}
 case 29:
-#line 180 "xi-grammar.y"
+#line 181 "xi-grammar.y"
 { yyval.tparam = new TParamVal(yyvsp[0].strval); ;
     break;}
 case 30:
-#line 184 "xi-grammar.y"
+#line 185 "xi-grammar.y"
 { yyval.tparlist = new TParamList(yyvsp[0].tparam); ;
     break;}
 case 31:
-#line 186 "xi-grammar.y"
+#line 187 "xi-grammar.y"
 { yyval.tparlist = new TParamList(yyvsp[-2].tparam, yyvsp[0].tparlist); ;
     break;}
 case 32:
-#line 190 "xi-grammar.y"
+#line 191 "xi-grammar.y"
 { yyval.tparlist = 0; ;
     break;}
 case 33:
-#line 192 "xi-grammar.y"
+#line 193 "xi-grammar.y"
 { yyval.tparlist = yyvsp[0].tparlist; ;
     break;}
 case 34:
-#line 196 "xi-grammar.y"
+#line 197 "xi-grammar.y"
 { yyval.tparlist = 0; ;
     break;}
 case 35:
-#line 198 "xi-grammar.y"
+#line 199 "xi-grammar.y"
 { yyval.tparlist = yyvsp[-1].tparlist; ;
     break;}
 case 36:
-#line 202 "xi-grammar.y"
+#line 203 "xi-grammar.y"
 { yyval.type = new BuiltinType("int"); ;
     break;}
 case 37:
-#line 204 "xi-grammar.y"
+#line 205 "xi-grammar.y"
 { yyval.type = new BuiltinType("long"); ;
     break;}
 case 38:
-#line 206 "xi-grammar.y"
+#line 207 "xi-grammar.y"
 { yyval.type = new BuiltinType("short"); ;
     break;}
 case 39:
-#line 208 "xi-grammar.y"
+#line 209 "xi-grammar.y"
 { yyval.type = new BuiltinType("char"); ;
     break;}
 case 40:
-#line 210 "xi-grammar.y"
+#line 211 "xi-grammar.y"
 { yyval.type = new BuiltinType("unsigned int"); ;
     break;}
 case 41:
-#line 212 "xi-grammar.y"
+#line 213 "xi-grammar.y"
 { yyval.type = new BuiltinType("unsigned long"); ;
     break;}
 case 42:
-#line 214 "xi-grammar.y"
+#line 215 "xi-grammar.y"
 { yyval.type = new BuiltinType("unsigned short"); ;
     break;}
 case 43:
-#line 216 "xi-grammar.y"
+#line 217 "xi-grammar.y"
 { yyval.type = new BuiltinType("unsigned char"); ;
     break;}
 case 44:
-#line 218 "xi-grammar.y"
+#line 219 "xi-grammar.y"
 { yyval.type = new BuiltinType("long long"); ;
     break;}
 case 45:
-#line 220 "xi-grammar.y"
+#line 221 "xi-grammar.y"
 { yyval.type = new BuiltinType("float"); ;
     break;}
 case 46:
-#line 222 "xi-grammar.y"
+#line 223 "xi-grammar.y"
 { yyval.type = new BuiltinType("double"); ;
     break;}
 case 47:
-#line 224 "xi-grammar.y"
+#line 225 "xi-grammar.y"
 { yyval.type = new BuiltinType("long double"); ;
     break;}
 case 48:
-#line 226 "xi-grammar.y"
+#line 227 "xi-grammar.y"
 { yyval.type = new BuiltinType("void"); ;
     break;}
 case 49:
-#line 229 "xi-grammar.y"
+#line 230 "xi-grammar.y"
 { yyval.ntype = new NamedType(yyvsp[-1].strval,yyvsp[0].tparlist); ;
     break;}
 case 50:
-#line 230 "xi-grammar.y"
+#line 231 "xi-grammar.y"
 { yyval.ntype = new NamedType(yyvsp[-1].strval,yyvsp[0].tparlist); ;
     break;}
 case 51:
-#line 233 "xi-grammar.y"
+#line 234 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 52:
-#line 235 "xi-grammar.y"
+#line 236 "xi-grammar.y"
 { yyval.type = yyvsp[0].ntype; ;
     break;}
 case 53:
-#line 239 "xi-grammar.y"
+#line 240 "xi-grammar.y"
 { yyval.ptype = new PtrType(yyvsp[-1].type); ;
     break;}
 case 54:
-#line 243 "xi-grammar.y"
+#line 244 "xi-grammar.y"
 { yyvsp[-1].ptype->indirect(); yyval.ptype = yyvsp[-1].ptype; ;
     break;}
 case 55:
-#line 245 "xi-grammar.y"
+#line 246 "xi-grammar.y"
 { yyvsp[-1].ptype->indirect(); yyval.ptype = yyvsp[-1].ptype; ;
     break;}
 case 56:
-#line 249 "xi-grammar.y"
+#line 250 "xi-grammar.y"
 { yyval.ftype = new FuncType(yyvsp[-7].type, yyvsp[-4].strval, yyvsp[-1].plist); ;
     break;}
 case 57:
-#line 253 "xi-grammar.y"
+#line 254 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 58:
-#line 255 "xi-grammar.y"
+#line 256 "xi-grammar.y"
 { yyval.type = yyvsp[0].ptype; ;
     break;}
 case 59:
-#line 257 "xi-grammar.y"
+#line 258 "xi-grammar.y"
 { yyval.type = yyvsp[0].ptype; ;
     break;}
 case 60:
-#line 259 "xi-grammar.y"
+#line 260 "xi-grammar.y"
 { yyval.type = yyvsp[0].ftype; ;
     break;}
 case 61:
-#line 261 "xi-grammar.y"
+#line 262 "xi-grammar.y"
 { yyval.type = new ArrayType(yyvsp[-3].type,yyvsp[-1].val); ;
     break;}
 case 62:
-#line 263 "xi-grammar.y"
+#line 264 "xi-grammar.y"
 { yyval.type = new ReferenceType(yyvsp[-1].type); ;
     break;}
 case 63:
-#line 269 "xi-grammar.y"
+#line 270 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 64:
-#line 271 "xi-grammar.y"
+#line 272 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 65:
-#line 275 "xi-grammar.y"
+#line 276 "xi-grammar.y"
 { yyval.val = yyvsp[-1].val; ;
     break;}
 case 66:
-#line 279 "xi-grammar.y"
+#line 280 "xi-grammar.y"
 { yyval.vallist = 0; ;
     break;}
 case 67:
-#line 281 "xi-grammar.y"
+#line 282 "xi-grammar.y"
 { yyval.vallist = new ValueList(yyvsp[-1].val, yyvsp[0].vallist); ;
     break;}
 case 68:
-#line 285 "xi-grammar.y"
+#line 286 "xi-grammar.y"
 { yyval.readonly = new Readonly(lineno, yyvsp[-2].type, yyvsp[-1].strval, yyvsp[0].vallist); ;
     break;}
 case 69:
-#line 289 "xi-grammar.y"
+#line 290 "xi-grammar.y"
 { yyval.readonly = new Readonly(lineno, yyvsp[-2].type, yyvsp[0].strval, 0, 1); ;
     break;}
 case 70:
-#line 293 "xi-grammar.y"
+#line 294 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 71:
-#line 295 "xi-grammar.y"
+#line 296 "xi-grammar.y"
 { 
                  /*
                  printf("Warning: Message attributes are being phased out.\n");
@@ -1285,95 +1295,95 @@ case 71:
                ;
     break;}
 case 72:
-#line 305 "xi-grammar.y"
+#line 306 "xi-grammar.y"
 { yyval.intval = yyvsp[0].intval; ;
     break;}
 case 73:
-#line 307 "xi-grammar.y"
+#line 308 "xi-grammar.y"
 { yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
     break;}
 case 74:
-#line 311 "xi-grammar.y"
+#line 312 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 75:
-#line 313 "xi-grammar.y"
+#line 314 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 76:
-#line 317 "xi-grammar.y"
+#line 318 "xi-grammar.y"
 { yyval.cattr = 0; ;
     break;}
 case 77:
-#line 319 "xi-grammar.y"
+#line 320 "xi-grammar.y"
 { yyval.cattr = yyvsp[-1].cattr; ;
     break;}
 case 78:
-#line 323 "xi-grammar.y"
+#line 324 "xi-grammar.y"
 { yyval.cattr = yyvsp[0].cattr; ;
     break;}
 case 79:
-#line 325 "xi-grammar.y"
+#line 326 "xi-grammar.y"
 { yyval.cattr = yyvsp[-2].cattr | yyvsp[0].cattr; ;
     break;}
 case 80:
-#line 329 "xi-grammar.y"
+#line 330 "xi-grammar.y"
 { yyval.cattr = Chare::CMIGRATABLE; ;
     break;}
 case 81:
-#line 333 "xi-grammar.y"
+#line 334 "xi-grammar.y"
 { yyval.mv = new MsgVar(yyvsp[-4].type, yyvsp[-3].strval); ;
     break;}
 case 82:
-#line 337 "xi-grammar.y"
+#line 338 "xi-grammar.y"
 { yyval.mvlist = new MsgVarList(yyvsp[0].mv); ;
     break;}
 case 83:
-#line 339 "xi-grammar.y"
+#line 340 "xi-grammar.y"
 { yyval.mvlist = new MsgVarList(yyvsp[-1].mv, yyvsp[0].mvlist); ;
     break;}
 case 84:
-#line 343 "xi-grammar.y"
+#line 344 "xi-grammar.y"
 { yyval.message = new Message(lineno, yyvsp[0].ntype); ;
     break;}
 case 85:
-#line 345 "xi-grammar.y"
+#line 346 "xi-grammar.y"
 { yyval.message = new Message(lineno, yyvsp[-3].ntype, yyvsp[-1].mvlist); ;
     break;}
 case 86:
-#line 349 "xi-grammar.y"
+#line 350 "xi-grammar.y"
 { yyval.typelist = 0; ;
     break;}
 case 87:
-#line 351 "xi-grammar.y"
+#line 352 "xi-grammar.y"
 { yyval.typelist = yyvsp[0].typelist; ;
     break;}
 case 88:
-#line 355 "xi-grammar.y"
+#line 356 "xi-grammar.y"
 { yyval.typelist = new TypeList(yyvsp[0].ntype); ;
     break;}
 case 89:
-#line 357 "xi-grammar.y"
+#line 358 "xi-grammar.y"
 { yyval.typelist = new TypeList(yyvsp[-2].ntype, yyvsp[0].typelist); ;
     break;}
 case 90:
-#line 361 "xi-grammar.y"
+#line 362 "xi-grammar.y"
 { yyval.chare = new Chare(lineno, yyvsp[-3].cattr, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 91:
-#line 363 "xi-grammar.y"
+#line 364 "xi-grammar.y"
 { yyval.chare = new MainChare(lineno, yyvsp[-3].cattr, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 92:
-#line 367 "xi-grammar.y"
+#line 368 "xi-grammar.y"
 { yyval.chare = new Group(lineno, yyvsp[-3].cattr, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 93:
-#line 371 "xi-grammar.y"
+#line 372 "xi-grammar.y"
 { yyval.chare = new NodeGroup(lineno, yyvsp[-3].cattr, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 94:
-#line 375 "xi-grammar.y"
+#line 376 "xi-grammar.y"
 {/*Stupid special case for [1D] indices*/
                        char *buf=new char[40];
                        sprintf(buf,"%sD",yyvsp[-2].strval);
@@ -1381,280 +1391,303 @@ case 94:
                ;
     break;}
 case 95:
-#line 381 "xi-grammar.y"
+#line 382 "xi-grammar.y"
 { yyval.ntype = new NamedType(yyvsp[-1].strval); ;
     break;}
 case 96:
-#line 385 "xi-grammar.y"
+#line 386 "xi-grammar.y"
 { yyval.chare = new Array(lineno, 0, yyvsp[-3].ntype, yyvsp[-2].ntype, yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 97:
-#line 389 "xi-grammar.y"
+#line 390 "xi-grammar.y"
 { yyval.chare = new Chare(lineno, yyvsp[-3].cattr, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist);;
     break;}
 case 98:
-#line 391 "xi-grammar.y"
+#line 392 "xi-grammar.y"
 { yyval.chare = new MainChare(lineno, yyvsp[-3].cattr, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 99:
-#line 395 "xi-grammar.y"
+#line 396 "xi-grammar.y"
 { yyval.chare = new Group(lineno, yyvsp[-3].cattr, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 100:
-#line 399 "xi-grammar.y"
+#line 400 "xi-grammar.y"
 { yyval.chare = new NodeGroup( lineno, yyvsp[-3].cattr, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 101:
-#line 403 "xi-grammar.y"
+#line 404 "xi-grammar.y"
 { yyval.chare = new Array( lineno, 0, yyvsp[-3].ntype, new NamedType(yyvsp[-2].strval), yyvsp[-1].typelist, yyvsp[0].mbrlist); ;
     break;}
 case 102:
-#line 407 "xi-grammar.y"
+#line 408 "xi-grammar.y"
 { yyval.message = new Message(lineno, new NamedType(yyvsp[-1].strval)); ;
     break;}
 case 103:
-#line 411 "xi-grammar.y"
+#line 412 "xi-grammar.y"
 { yyval.type = 0; ;
     break;}
 case 104:
-#line 413 "xi-grammar.y"
+#line 414 "xi-grammar.y"
 { yyval.type = yyvsp[0].type; ;
     break;}
 case 105:
-#line 417 "xi-grammar.y"
+#line 418 "xi-grammar.y"
 { yyval.strval = 0; ;
     break;}
 case 106:
-#line 419 "xi-grammar.y"
+#line 420 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 107:
-#line 421 "xi-grammar.y"
+#line 422 "xi-grammar.y"
 { yyval.strval = yyvsp[0].strval; ;
     break;}
 case 108:
-#line 425 "xi-grammar.y"
+#line 426 "xi-grammar.y"
 { yyval.tvar = new TType(new NamedType(yyvsp[-1].strval), yyvsp[0].type); ;
     break;}
 case 109:
-#line 427 "xi-grammar.y"
+#line 428 "xi-grammar.y"
 { yyval.tvar = new TFunc(yyvsp[-1].ftype, yyvsp[0].strval); ;
     break;}
 case 110:
-#line 429 "xi-grammar.y"
+#line 430 "xi-grammar.y"
 { yyval.tvar = new TName(yyvsp[-2].type, yyvsp[-1].strval, yyvsp[0].strval); ;
     break;}
 case 111:
-#line 433 "xi-grammar.y"
+#line 434 "xi-grammar.y"
 { yyval.tvarlist = new TVarList(yyvsp[0].tvar); ;
     break;}
 case 112:
-#line 435 "xi-grammar.y"
+#line 436 "xi-grammar.y"
 { yyval.tvarlist = new TVarList(yyvsp[-2].tvar, yyvsp[0].tvarlist); ;
     break;}
 case 113:
-#line 439 "xi-grammar.y"
+#line 440 "xi-grammar.y"
 { yyval.tvarlist = yyvsp[-1].tvarlist; ;
     break;}
 case 114:
-#line 443 "xi-grammar.y"
+#line 444 "xi-grammar.y"
 { yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 115:
-#line 445 "xi-grammar.y"
+#line 446 "xi-grammar.y"
 { yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 116:
-#line 447 "xi-grammar.y"
+#line 448 "xi-grammar.y"
 { yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 117:
-#line 449 "xi-grammar.y"
+#line 450 "xi-grammar.y"
 { yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].chare); yyvsp[0].chare->setTemplate(yyval.templat); ;
     break;}
 case 118:
-#line 451 "xi-grammar.y"
+#line 452 "xi-grammar.y"
 { yyval.templat = new Template(yyvsp[-1].tvarlist, yyvsp[0].message); yyvsp[0].message->setTemplate(yyval.templat); ;
     break;}
 case 119:
-#line 455 "xi-grammar.y"
+#line 456 "xi-grammar.y"
 { yyval.mbrlist = 0; ;
     break;}
 case 120:
-#line 457 "xi-grammar.y"
+#line 458 "xi-grammar.y"
 { yyval.mbrlist = yyvsp[-2].mbrlist; ;
     break;}
 case 121:
-#line 461 "xi-grammar.y"
+#line 462 "xi-grammar.y"
 { yyval.mbrlist = 0; ;
     break;}
 case 122:
-#line 463 "xi-grammar.y"
+#line 464 "xi-grammar.y"
 { yyval.mbrlist = new MemberList(yyvsp[-1].member, yyvsp[0].mbrlist); ;
     break;}
 case 123:
-#line 467 "xi-grammar.y"
+#line 468 "xi-grammar.y"
 { yyval.member = yyvsp[-1].entry; ;
     break;}
 case 124:
-#line 469 "xi-grammar.y"
+#line 470 "xi-grammar.y"
 { yyval.member = yyvsp[-1].readonly; ;
     break;}
 case 125:
-#line 471 "xi-grammar.y"
+#line 472 "xi-grammar.y"
 { yyval.member = yyvsp[-1].readonly; ;
     break;}
 case 126:
-#line 475 "xi-grammar.y"
-{ yyval.entry = new Entry(lineno, yyvsp[-5].intval|yyvsp[-1].intval, yyvsp[-4].type, yyvsp[-3].strval, yyvsp[-2].plist, yyvsp[0].val); ;
+#line 476 "xi-grammar.y"
+{ yyval.entry = new Entry(lineno, yyvsp[-6].intval|yyvsp[-2].intval, yyvsp[-5].type, yyvsp[-4].strval, yyvsp[-3].plist, yyvsp[-1].val); 
+                 yyval.entry->setSdagCode(yyvsp[0].strval);
+               ;
     break;}
 case 127:
-#line 477 "xi-grammar.y"
-{ yyval.entry = new Entry(lineno, yyvsp[-2].intval,     0, yyvsp[-1].strval, yyvsp[0].plist,  0); ;
+#line 480 "xi-grammar.y"
+{ yyval.entry = new Entry(lineno, yyvsp[-3].intval,     0, yyvsp[-2].strval, yyvsp[-1].plist,  0); 
+                 yyval.entry->setSdagCode(yyvsp[0].strval);
+               ;
     break;}
 case 128:
-#line 481 "xi-grammar.y"
+#line 486 "xi-grammar.y"
 { yyval.type = new BuiltinType("void"); ;
     break;}
 case 129:
-#line 483 "xi-grammar.y"
+#line 488 "xi-grammar.y"
 { yyval.type = yyvsp[0].ptype; ;
     break;}
 case 130:
-#line 487 "xi-grammar.y"
+#line 492 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
 case 131:
-#line 489 "xi-grammar.y"
+#line 494 "xi-grammar.y"
 { yyval.intval = yyvsp[-1].intval; ;
     break;}
 case 132:
-#line 493 "xi-grammar.y"
+#line 498 "xi-grammar.y"
 { yyval.intval = yyvsp[0].intval; ;
     break;}
 case 133:
-#line 495 "xi-grammar.y"
+#line 500 "xi-grammar.y"
 { yyval.intval = yyvsp[-2].intval | yyvsp[0].intval; ;
     break;}
 case 134:
-#line 499 "xi-grammar.y"
+#line 504 "xi-grammar.y"
 { yyval.intval = STHREADED; ;
     break;}
 case 135:
-#line 501 "xi-grammar.y"
+#line 506 "xi-grammar.y"
 { yyval.intval = SSYNC; ;
     break;}
 case 136:
-#line 503 "xi-grammar.y"
+#line 508 "xi-grammar.y"
 { yyval.intval = SLOCKED; ;
     break;}
 case 137:
-#line 505 "xi-grammar.y"
+#line 510 "xi-grammar.y"
 { yyval.intval = SVIRTUAL; ;
     break;}
 case 138:
-#line 507 "xi-grammar.y"
+#line 512 "xi-grammar.y"
 { yyval.intval = SCREATEHERE; ;
     break;}
 case 139:
-#line 509 "xi-grammar.y"
+#line 514 "xi-grammar.y"
 { yyval.intval = SCREATEHOME; ;
     break;}
 case 140:
-#line 513 "xi-grammar.y"
+#line 518 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 141:
-#line 515 "xi-grammar.y"
+#line 520 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 142:
-#line 517 "xi-grammar.y"
+#line 522 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
 case 143:
-#line 521 "xi-grammar.y"
-{ yyval.strval = yyvsp[0].strval; ;
+#line 526 "xi-grammar.y"
+{ yyval.strval = ""; ;
     break;}
 case 144:
-#line 523 "xi-grammar.y"
+#line 528 "xi-grammar.y"
+{ yyval.strval = yyvsp[0].strval; ;
+    break;}
+case 145:
+#line 530 "xi-grammar.y"
 {  /*Returned only when in_bracket*/
                        char *tmp = new char[strlen(yyvsp[-4].strval)+strlen(yyvsp[-2].strval)+strlen(yyvsp[0].strval)+3];
                        sprintf(tmp,"%s[%s]%s", yyvsp[-4].strval, yyvsp[-2].strval, yyvsp[0].strval);
                        yyval.strval = tmp;
                ;
     break;}
-case 145:
-#line 529 "xi-grammar.y"
+case 146:
+#line 536 "xi-grammar.y"
 { /*Returned only when in_braces*/
                        char *tmp = new char[strlen(yyvsp[-4].strval)+strlen(yyvsp[-2].strval)+strlen(yyvsp[0].strval)+3];
                        sprintf(tmp,"%s{%s}%s", yyvsp[-4].strval, yyvsp[-2].strval, yyvsp[0].strval);
                        yyval.strval = tmp;
                ;
     break;}
-case 146:
-#line 537 "xi-grammar.y"
+case 147:
+#line 544 "xi-grammar.y"
 {  /*Start grabbing CPROGRAM segments*/
                        in_bracket=1;
                        yyval.pname = new Parameter(lineno, yyvsp[-2].type,yyvsp[-1].strval);
                ;
     break;}
-case 147:
-#line 544 "xi-grammar.y"
+case 148:
+#line 551 "xi-grammar.y"
+{  /*Start grabbing CPROGRAM segments*/
+                       in_braces=1;
+                       yyval.intval = 0;
+               ;
+    break;}
+case 149:
+#line 558 "xi-grammar.y"
 { yyval.pname = new Parameter(lineno, yyvsp[0].type);;
     break;}
-case 148:
-#line 546 "xi-grammar.y"
+case 150:
+#line 560 "xi-grammar.y"
 { yyval.pname = new Parameter(lineno, yyvsp[-1].type,yyvsp[0].strval);;
     break;}
-case 149:
-#line 548 "xi-grammar.y"
+case 151:
+#line 562 "xi-grammar.y"
 { yyval.pname = new Parameter(lineno, yyvsp[-3].type,yyvsp[-2].strval,0,yyvsp[0].val);;
     break;}
-case 150:
-#line 550 "xi-grammar.y"
+case 152:
+#line 564 "xi-grammar.y"
 { /*Stop grabbing CPROGRAM segments*/
                        in_bracket=0;
                        yyval.pname = new Parameter(lineno, yyvsp[-2].pname->getType(), yyvsp[-2].pname->getName() ,yyvsp[-1].strval);
                ;
     break;}
-case 151:
-#line 557 "xi-grammar.y"
+case 153:
+#line 571 "xi-grammar.y"
 { yyval.plist = new ParamList(yyvsp[0].pname); ;
     break;}
-case 152:
-#line 559 "xi-grammar.y"
+case 154:
+#line 573 "xi-grammar.y"
 { yyval.plist = new ParamList(yyvsp[-2].pname,yyvsp[0].plist); ;
     break;}
-case 153:
-#line 563 "xi-grammar.y"
+case 155:
+#line 577 "xi-grammar.y"
 { yyval.plist = yyvsp[-1].plist; ;
     break;}
-case 154:
-#line 565 "xi-grammar.y"
+case 156:
+#line 579 "xi-grammar.y"
 { yyval.plist = 0; ;
     break;}
-case 155:
-#line 569 "xi-grammar.y"
+case 157:
+#line 583 "xi-grammar.y"
 { yyval.val = 0; ;
     break;}
-case 156:
-#line 571 "xi-grammar.y"
+case 158:
+#line 585 "xi-grammar.y"
 { yyval.val = new Value(yyvsp[0].strval); ;
     break;}
-case 157:
-#line 575 "xi-grammar.y"
+case 159:
+#line 589 "xi-grammar.y"
 { yyval.intval = 0; ;
     break;}
-case 158:
-#line 577 "xi-grammar.y"
+case 160:
+#line 591 "xi-grammar.y"
 { if(strcmp(yyvsp[0].strval, "0")) { yyerror("pure virtual must '=0'"); exit(1); }
                  yyval.intval = SPURE; 
                ;
     break;}
+case 161:
+#line 597 "xi-grammar.y"
+{ yyval.strval = 0; ;
+    break;}
+case 162:
+#line 599 "xi-grammar.y"
+{ in_braces = 0; yyval.strval = yyvsp[-1].strval; ;
+    break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 542 "/usr/share/bison.simple"
+#line 543 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1874,7 +1907,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 581 "xi-grammar.y"
+#line 602 "xi-grammar.y"
 
 void yyerror(const char *mesg)
 {
index 57de2fba847712c13d64c08569db1ecbdb293a20..ad1103f6161d0900ff86b591d9cb2d4c595b74f4 100644 (file)
@@ -65,7 +65,7 @@ ModuleList *modlist;
 %type <module>         Module
 %type <conslist>       ConstructEList ConstructList
 %type <construct>      Construct
-%type <strval>         Name QualName CCode OptNameInit
+%type <strval>         Name QualName CCode OptSdagCode OptNameInit
 %type <val>            OptStackSize
 %type <intval>         OptExtern OptSemiColon MAttribs MAttribList MAttrib
 %type <intval>         EAttribs EAttribList EAttrib OptPure
@@ -93,6 +93,7 @@ ModuleList *modlist;
 %type <vallist>                DimList
 %type <mv>             Var
 %type <mvlist>         VarList
+%type <intval>         ParamBraceStart
 
 %%
 
@@ -471,10 +472,14 @@ Member            : Entry ';'
                { $$ = $1; }
                ;
 
-Entry          : ENTRY EAttribs EReturn Name EParameters OptPure OptStackSize
-               { $$ = new Entry(lineno, $2|$6, $3, $4, $5, $7); }
-               | ENTRY EAttribs Name EParameters /*Constructor*/
-               { $$ = new Entry(lineno, $2,     0, $3, $4,  0); }
+Entry          : ENTRY EAttribs EReturn Name EParameters OptPure OptStackSize OptSdagCode
+               { $$ = new Entry(lineno, $2|$6, $3, $4, $5, $7); 
+                 $$->setSdagCode($8);
+               }
+               | ENTRY EAttribs Name EParameters OptSdagCode /*Constructor*/
+               { $$ = new Entry(lineno, $2,     0, $3, $4,  0); 
+                 $$->setSdagCode($5);
+               }
                ;
 
 EReturn                : VOID
@@ -517,7 +522,9 @@ DefaultParameter: LITERAL
                { $$ = new Value($1); }
                ;
 
-CCode          : CPROGRAM
+CCode          : /* Empty */
+               { $$ = ""; }
+               | CPROGRAM
                { $$ = $1; }
                | CPROGRAM '[' CPROGRAM ']' CPROGRAM
                {  /*Returned only when in_bracket*/
@@ -525,7 +532,7 @@ CCode               : CPROGRAM
                        sprintf(tmp,"%s[%s]%s", $1, $3, $5);
                        $$ = tmp;
                }
-               | CPROGRAM '{' CPROGRAM '}' CPROGRAM
+               | CPROGRAM '{' CCode '}' CCode
                { /*Returned only when in_braces*/
                        char *tmp = new char[strlen($1)+strlen($3)+strlen($5)+3];
                        sprintf(tmp,"%s{%s}%s", $1, $3, $5);
@@ -540,6 +547,13 @@ ParamBracketStart : Type Name '['
                }
                ;
 
+ParamBraceStart : '{'
+               {  /*Start grabbing CPROGRAM segments*/
+                       in_braces=1;
+                       $$ = 0;
+               }
+               ;
+
 Parameter      : Type
                { $$ = new Parameter(lineno, $1);}
                | Type Name
@@ -578,6 +592,13 @@ OptPure            : /* Empty */
                  $$ = SPURE; 
                }
                ;
+
+OptSdagCode    : /* Empty */
+               { $$ = 0; }
+               | ParamBraceStart CCode '}'
+               { in_braces = 0; $$ = $2; }
+               ;
+
 %%
 void yyerror(const char *mesg)
 {
index baf2514875d2b8eb66b0b0a55054727799a52714..5182fca9af0d7f2ad96012037fb4a1fb316e5c8c 100644 (file)
@@ -22,9 +22,7 @@
 #ifdef __cplusplus
 
 #include <stdlib.h>
-#ifndef WIN32 /*MANUALLY ADDED LINE*/
 #include <unistd.h>
-#endif
 
 /* Use prototypes in function declarations. */
 #define YY_USE_PROTOS
@@ -728,7 +726,7 @@ 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 53 "xi-scan.l"
index 5d2f1d7a0f204bcc4fec6abb928790571d32fc1c..aef1846b97d5c94c6d5f250d3f69a64d7020b058 100644 (file)
@@ -478,6 +478,8 @@ Chare::genRegisterMethodDef(XStr& str)
   str << "#endif\n";
 }
 
+extern void sdag_trans(XStr& classname, XStr& input, XStr& output);
+
 void
 Chare::genDecls(XStr& str)
 {
@@ -490,6 +492,18 @@ Chare::genDecls(XStr& str)
   if(templat)
     templat->genSpec(str);
   genSubDecls(str);
+  if(list) {
+    int sdagPresent = 0;
+    XStr sdagStr;
+    list->collectSdagCode(sdagStr, sdagPresent);
+    if(sdagPresent) {
+      XStr classname;
+      XStr sdag_output;
+      classname << baseName(0);
+      sdag_trans(classname, sdagStr, sdag_output);
+      str << sdag_output;
+    }
+  }
 }
 
 
@@ -1151,6 +1165,16 @@ void MemberList::genDecls(XStr& str)
   }
 }
 
+void MemberList::collectSdagCode(XStr& str, int& sdagPresent)
+{
+  if(member)
+    member->collectSdagCode(str, sdagPresent);
+  if(next) {
+    str << endx;
+    next->collectSdagCode(str, sdagPresent);
+  }
+}
+
 void MemberList::genDefs(XStr& str)
 {
   if(member)
@@ -1179,6 +1203,7 @@ Entry::Entry(int l, int a, Type *r, char *n, ParamList *p, Value *sz) :
 { 
   line=l; container=NULL; 
   entryCount=-1;
+  sdagCode = 0;
   if(!isVirtual() && isPure()) die("Non-virtual methods cannot be pure virtual",line);
   if(!isThreaded() && stacksize) die("Non-Threaded methods cannot have stacksize",line);
   if(retType && !isSync() && !retType->isVoid()) 
@@ -1736,8 +1761,10 @@ Parameter::Parameter(int Nline,Type *Ntype,const char *Nname,
        const char *NarrLen,Value *Nvalue)
        :type(Ntype), name(Nname), arrLen(NarrLen), val(Nvalue),line(Nline)
 {
-       if (isMessage())
+        given_name = Nname;
+       if (isMessage()) {
                name="impl_msg";
+        }
        if (name==NULL && !isVoid()) 
        {/*Fabricate a unique name for this marshalled param.*/
                static int unnamedCount=0;
index 071eab26e7132d6f08e18e6146e1d661ee47533a..1e44c2a013bbcb02cd186e0d20a8450ae0e08694 100644 (file)
@@ -192,6 +192,7 @@ class TypeList : public Printable {
 class Parameter {
     Type *type;
     const char *name; /*The name of the variable, if any*/
+    const char *given_name; /*The name of the msg in ci file, if any*/
     const char *arrLen; /*The expression for the length of the array;
                         NULL if not an array*/
     Value *val; /*Initial value, if any*/
@@ -215,6 +216,11 @@ class Parameter {
     int isArray(void) const {return arrLen!=NULL;}
     Type *getType(void) {return type;}
     const char *getName(void) {return name;}
+    void printMsg(XStr& str) {
+      type->print(str);
+      if(given_name!=0)
+        str << given_name;
+    }
 };
 class ParamList {
     Parameter *param;
@@ -242,6 +248,9 @@ class ParamList {
     void genMsgProxyName(XStr &str) {
        param->type->genMsgProxyName(str);
     }
+    void printMsg(XStr& str) {
+        param->printMsg(str);
+    }
     void marshall(XStr &str,int orMakeVoid);
     void beginUnmarshall(XStr &str);
     void unmarshall(XStr &str);
@@ -387,6 +396,8 @@ class Member : public Construct {
   public:
     virtual void setChare(Chare *c) { container = c; }
     virtual int isPure(void) { return 0; }
+    virtual int isSdag(void) { return 0; }
+    virtual void collectSdagCode(XStr& str, int& sdagPresent) { return; }
     XStr makeDecl(const char *returnType);
 };
 
@@ -402,6 +413,7 @@ class MemberList : public Printable {
     void genDecls(XStr& str);
     void genDefs(XStr& str);
     void genReg(XStr& str);
+    void collectSdagCode(XStr& str, int& sdagPresent);
 };
 
 /* Chare or group is a templated entity */
@@ -572,6 +584,8 @@ class Entry : public Member {
     char *name;
     ParamList *param;
     Value *stacksize;
+    XStr *sdagCode;
+
     XStr epIdx(int include__idx_=1);
     void genEpIdxDecl(XStr& str);
     void genEpIdxDef(XStr& str);
@@ -609,10 +623,28 @@ class Entry : public Member {
     int isCreateHere(void) { return (attribs & SCREATEHERE); }
     const char *Virtual(void) {return isVirtual()?"virtual ":"";}
     int isPure(void) { return (attribs & SPURE); }
+    int isSdag(void) { return (sdagCode!=0); }
     void print(XStr& str);
     void genDecls(XStr& str);
     void genDefs(XStr& str);
     void genReg(XStr& str);
+    void setSdagCode(char *str) {
+      if(str!=0) {
+        if(!param->isMessage()) 
+          die("Marshalling or void methods unsupported in sdag yet", line);
+        sdagCode = new XStr("sdagentry ");
+       *sdagCode << name << "(";
+        param->printMsg(*sdagCode);
+        *sdagCode << ") ";
+        *sdagCode << "{\n" << str << "\n}\n";
+      }
+    }
+    void collectSdagCode(XStr& str, int& sdagPresent) {
+       if(isSdag()) {
+         str << *sdagCode;
+         sdagPresent = 1;
+       }
+    }
 };
 
 
index cb0bb5963790a64ea097a3f9c5efca39ecfee226..9260694a0a979a3a1eae6d79beae62fce33a3831 100644 (file)
@@ -54,6 +54,19 @@ XStr& XStr::operator << (int i) {
       return *this;
 };
 
+void XStr::line_append(const char c)
+{
+  XStr xs;
+  for(int i=0; i<len; i++) {
+    if(s[i] == '\n')
+      xs << c << "\n";
+    else
+      xs << s[i];
+  }
+  delete[] s;
+  initTo(xs.charstar());
+}
+
 void 
 XStr::spew(const char*b, const char *a1, const char *a2, const char *a3, 
            const char *a4, const char *a5)
index b479c651060666194a16c2a66c5af886fa3e4301..17d183d75c1e98e403c13e867c1bc0cb9dffe0d7 100644 (file)
@@ -47,6 +47,9 @@ class XStr {
       for (int i=0; i<indent; i++) cout << "  ";
       cout << get_string();
     }
+    // MAB: this method appends character c to every line
+    // basically substitutes every \n with a "c\n"
+    void line_append(const char c);
   public:
     XStr();
     XStr(const char *_s);
index c97829f846845b1a41730aed1a50db9713f895b3..de8cb91514db279e87995431f483f03bb60ee887 100644 (file)
@@ -1,10 +1,13 @@
-all: xi-grammar.tab.h xi-grammar.tab.C xi-scan.C
+all: xi-grammar.tab.h xi-grammar.tab.C xi-scan.C sdag/trans.c
 
 xi-grammar.tab.h xi-grammar.tab.C: xi-grammar.y
-       bison -y -d xi-grammar.y
+       bison -v -y -d xi-grammar.y
        mv y.tab.c xi-grammar.tab.C
        mv y.tab.h xi-grammar.tab.h
 
 xi-scan.C: xi-scan.l
        flex xi-scan.l
        mv lex.yy.c xi-scan.C
+
+sdag/trans.c: sdag/trans.l
+       flex -Psl -osdag/trans.c sdag/trans.l