Cleaned up the sdag translator some. More cleanup necessary to make
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Mon, 2 Apr 2001 21:56:22 +0000 (21:56 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Mon, 2 Apr 2001 21:56:22 +0000 (21:56 +0000)
any extension.

src/xlat-i/sdag/CEntry.C
src/xlat-i/sdag/CEntry.h
src/xlat-i/sdag/CList.h
src/xlat-i/sdag/CParseNode.C
src/xlat-i/sdag/CParseNode.h
src/xlat-i/sdag/CParseNodeProcess.C
src/xlat-i/sdag/CParsedFile.C
src/xlat-i/sdag/CParsedFile.h
src/xlat-i/sdag/CParser.C

index 179a01262b362e9611edbe3aebe2b51077c0f4cf..cde0b5dcbbc55ba93628920b4542c20756159024 100644 (file)
@@ -11,7 +11,7 @@
 void CEntry::generateDeps(XStr& op)
 {
   CParseNode *cn;
-  for(cn=(CParseNode *)whenList->begin(); !whenList->end(); cn=(CParseNode *)whenList->next()) {
+  for(cn=whenList.begin(); !whenList.end(); cn=whenList.next()) {
     op << "    __cDep->addDepends("<<cn->nodeNum<<","<<entryNum<<");\n";
   }
 }
@@ -31,8 +31,8 @@ void CEntry::generateCode(XStr& op)
   }
   op << "    if (tr == 0)\n";
   op << "      return;\n";
-  if(whenList->length() == 1) {
-    cn = (CParseNode *)whenList->begin();
+  if(whenList.length() == 1) {
+    cn = whenList.begin();
     op << "    " << cn->label->charstar() << "(";
     CStateVar *sv = (CStateVar *)cn->stateVars->begin();
     int i = 0;
@@ -45,7 +45,7 @@ void CEntry::generateCode(XStr& op)
     op << "    return;\n";
   } else {
     op << "    switch(tr->whenID) {\n";
-    for(cn=(CParseNode *)whenList->begin(); !whenList->end(); cn=(CParseNode *)whenList->next()) {
+    for(cn=whenList.begin(); !whenList.end(); cn=whenList.next()) {
       op << "      case " << cn->nodeNum << ":\n";
       op << cn->label->charstar() << "(";
       CStateVar *sv = (CStateVar *)cn->stateVars->begin();
index b891171e54afd00f9e289bd7a2f255a784fdd238..373f03edd4d53e864ec223dc642983022316bb6e 100644 (file)
@@ -20,10 +20,9 @@ class CEntry{
     XStr *msgType;
     int entryNum;
     int refNumNeeded;
-    TList *whenList;
+    TList<CParseNode*> whenList;
     CEntry(XStr *e, XStr *m) : entry(e), msgType(m) {
       entryNum = numEntries++;
-      whenList = new TList();
       refNumNeeded=0;
     }
     void print(int indent) {
@@ -32,6 +31,5 @@ class CEntry{
     }
     void generateCode(XStr& op);
     void generateDeps(XStr& op);
-    
 };
 #endif
index 3d04c11153995a4b140e68445d907df826d305e1..49937e92b1648bde352ad9db03dad72757d8d690 100644 (file)
@@ -8,12 +8,9 @@
 #ifndef _TList_H_
 #define _TList_H_
 
-#include <stdio.h>
-
 // Quick and dirty List for small numbers of items.
-// This should ideally be a template but for portability's sake, its
-// a generic list of (void *)
 
+template <class T>
 class TList
 {
   private:
@@ -22,8 +19,8 @@ class TList
     {
       public:
       Elem *next;
-      void *data;
-      Elem(void *d) : next(NULL), data(d) {;}
+      data;
+      Elem(T d) : next(0), data(d) {;}
     };
 
     Elem *first;
@@ -36,56 +33,46 @@ class TList
 
     int empty(void) { return ! first; }
     
-    void *begin(void) {
+    begin(void) {
       current = first;
-      if(current==(Elem *)0)
-        return (void *) 0;
-      else
-        return current->data;
+      return (current ? current->data : T(0));
     }
 
-
     int end(void) {
       return (current == 0);
     }
 
-    void *next (void) {
+    next (void) {
       current = current->next;
-      if(current==(Elem *)0)
-       return (void *)0;
-      else
-        return current->data;
+      return (current ? current->data : T(0));
     }
 
-    void *front(void)
-    {
+    T front(void) {
       return ((first==0) ? 0 : first->data);
     }
 
-    void *pop(void)
-    {
-      void *data;
-      if( first!= 0) {
+    T pop(void) {
+      T data = T(0);
+      if(first) {
         data = first->data;
         Elem *nn = first->next;
         delete first;
         first = nn;
         len --;
-      } else {
-        data = 0;
       }
       return data;
     }
 
-    void remove(void *data)
-    {
+    void remove(T data) {
       // case 1: empty list
       if (first == 0)
         return;
       // case 2: first element to be removed
       if(first->data == data) {
+       Elemt *tbr = first;
         first = first->next;
         len --;
+       delete tbr;
         return;
       }
       // case 3: middle or last element to be removed
@@ -95,20 +82,21 @@ class TList
         if (nn->data == data) {
           prev->next = nn->next;
           len --;
+         delete nn;
           return;
         }
         prev = nn;
       }
     }
 
-    void append(void *data)
-    {
+    void append(T data) {
+      Elem *e = new Elem(data);
       if(first == 0) {
-        first = new Elem(data);
+        first = e;
       } else {
         Elem *nn;
         for( nn = first ; nn->next ; nn = nn->next );
-        nn->next = new Elem(data);
+        nn->next = e;
       }
       len++;
     }
index 516888bdc4ac5f4cca324602c18b2d5117328f16..c07844e211a5b3956b23c69a60cdb413a4e721bc 100644 (file)
@@ -8,11 +8,11 @@
 #include "CParseNode.h"
 #include "CParser.h"
 
-void printc(TList *cons, int indent, char *sep)
+void printc(TList<CParseNode*> *cons, int indent, char *sep)
 {
-  for(CParseNode *tmp=(CParseNode *)(cons->begin()); !cons->end();) {
+  for(CParseNode *tmp=cons->begin(); !cons->end();) {
     tmp->print(indent);
-    tmp = (CParseNode *)(cons->next());
+    tmp = cons->next();
     if(!cons->end())
       printf("%s", sep);
   }
@@ -109,7 +109,7 @@ CParseNode::CParseNode(EToken t, CLexer *cLexer, CParser *cParser)
 {
   CToken *tok;
 
-  type = t; text = 0; constructs = new TList();
+  type = t; text = 0; constructs = new TList<CParseNode*>();
   con1 = con2 = con3 = con4 = 0;
   switch (t) {
     case SDAGENTRY:
index b399840a2ada3be95d9425753a25c15b25ba4f27..338ea39f036664f9200612988ea6acbe994b34e8 100644 (file)
@@ -27,9 +27,9 @@ class CParseNode {
     EToken type;
     XStr *text;
     CParseNode *con1, *con2, *con3, *con4;
-    TList *constructs;
-    TList *stateVars;
-    TList *stateVarsChildren;
+    TList<CParseNode*> *constructs;
+    TList<CStateVar*> *stateVars;
+    TList<CStateVar*> *stateVarsChildren;
     CParseNode *next;
     int nextBeginOrEnd;
     CEntry *entryPtr;
@@ -38,11 +38,12 @@ class CParseNode {
                                          con3(0), con4(0), constructs(0) {}
     void numberNodes(void);
     void labelNodes(void);
-    void generateEntryList(TList *, CParseNode *);
-    void propogateState(TList *);
+    void generateEntryList(TList<CEntry*>&, CParseNode *);
+    void propagateState(void);
     void generateCode(XStr& output);
     void setNext(CParseNode *, int);
   private:
+    void propagateState(TList<CStateVar*>&);
     void generateWhen(XStr& op);
     void generateOverlap(XStr& op);
     void generateWhile(XStr& op);
@@ -54,7 +55,7 @@ class CParseNode {
     void generateSdagEntry(XStr& op);
     void generateSlist(XStr& op);
     void generateAtomic(XStr& op);
-    void generatePrototype(XStr& op, TList *);
-    void generateCall(XStr& op, TList *);
+    void generatePrototype(XStr& op, TList<CStateVar*>&);
+    void generateCall(XStr& op, TList<CStateVar*>&);
 };
 #endif
index 42f6150039f92d8ec1c66a92e65098ae81d7d2bb..caa0dc515f43ce55e48e6ae3fb23be360b122a5b 100644 (file)
@@ -31,7 +31,7 @@ void CParseNode::numberNodes(void)
       break;
   }
   CParseNode *cn;
-  for(cn=(CParseNode *)(constructs->begin()); !constructs->end(); cn=(CParseNode *)(constructs->next())) {
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
     cn->numberNodes();
   }
 }
@@ -99,7 +99,7 @@ void CParseNode::labelNodes(void)
   }
 }
 
-void CParseNode::generateEntryList(TList *list, CParseNode *thisWhen)
+void CParseNode::generateEntryList(TList<CEntry*>& list, CParseNode *thisWhen)
 {
   switch(type) {
     case WHEN:
@@ -111,22 +111,21 @@ void CParseNode::generateEntryList(TList *list, CParseNode *thisWhen)
     case ENTRY:
       CEntry *entry;
       int found=0;
-      for(entry=(CEntry *)(list->begin()); !list->end(); 
-          entry=(CEntry *)(list->next())) {
+      for(entry=list.begin(); !list.end(); entry=list.next()) {
         if(*(entry->entry) == *(con1->text) &&
            *(entry->msgType) == *(con3->text)) {
            found = 1;
            // check to see if thisWhen is already in entry's whenList
            int whenFound = 0;
-           TList *tmpList = entry->whenList;
+           TList<CParseNode*> *tmpList = &(entry->whenList);
            CParseNode *tmpNode;
-           for(tmpNode = (CParseNode *) tmpList->begin(); !tmpList->end();
-               tmpNode = (CParseNode *) tmpList->next()) {
+           for(tmpNode = tmpList->begin(); !tmpList->end();
+               tmpNode = tmpList->next()) {
              if(tmpNode->nodeNum == thisWhen->nodeNum)
                whenFound = 1;
            }
            if(!whenFound)
-             entry->whenList->append(thisWhen);
+             entry->whenList.append(thisWhen);
            entryPtr = entry;
           if(con2)
             entry->refNumNeeded = 1;
@@ -136,37 +135,47 @@ void CParseNode::generateEntryList(TList *list, CParseNode *thisWhen)
       if(!found) {
         CEntry *newEntry;
         newEntry = new CEntry(new XStr(*(con1->text)), new XStr(*(con3->text)));
-        list->append(newEntry);
+        list.append(newEntry);
         entryPtr = newEntry;
-        newEntry->whenList->append(thisWhen);
+        newEntry->whenList.append(thisWhen);
        if(con2)
          newEntry->refNumNeeded = 1;
       }
       break;
   }
   CParseNode *cn;
-  for(cn=(CParseNode *)(constructs->begin()); !constructs->end(); cn=(CParseNode *)(constructs->next())) {
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
     cn->generateEntryList(list,thisWhen);
   }
 }
 
-void CParseNode::propogateState(TList *list)
+void CParseNode::propagateState(void)
+{
+  CStateVar *sv;
+  if(type != SDAGENTRY) {
+    fprintf(stderr, "use of non-entry as the outermost construct..\n");
+    exit(1);
+  }
+  stateVars = new TList<CStateVar*>();
+  XStr *vType = new XStr(*(con2->text));
+  vType->append(" *");
+  sv = new CStateVar(vType, new XStr(*(con3->text)));
+  stateVars->append(sv);
+  stateVarsChildren = stateVars;
+  CParseNode *cn;
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
+    cn->propagateState(*stateVarsChildren);
+  }
+}
+
+void CParseNode::propagateState(TList<CStateVar*>& list)
 {
   CStateVar *sv;
-  stateVars = new TList();
+  stateVars = new TList<CStateVar*>();
   switch(type) {
-    case SDAGENTRY:
-      {
-        XStr *vType = new XStr(*(con2->text));
-        vType->append(" *");
-        sv = new CStateVar(vType, new XStr(*(con3->text)));
-      }
-      stateVars->append(sv);
-      stateVarsChildren = stateVars;
-      break;
     case FORALL:
-      stateVarsChildren = new TList();
-      for(sv=(CStateVar *)(list->begin()); !list->end(); sv=(CStateVar *)(list->next())) {
+      stateVarsChildren = new TList<CStateVar*>();
+      for(sv=list.begin(); !list.end(); sv=list.next()) {
         stateVars->append(sv);
         stateVarsChildren->append(sv);
       }
@@ -181,15 +190,15 @@ void CParseNode::propogateState(TList *list)
       }
       break;
     case WHEN:
-      stateVarsChildren = new TList();
-      for(sv=(CStateVar *)(list->begin()); !list->end(); sv=(CStateVar *)(list->next())) {
+      stateVarsChildren = new TList<CStateVar*>();
+      for(sv=list.begin(); !list.end(); sv=list.next()) {
         stateVars->append(sv);
         stateVarsChildren->append(sv);
       }
       {
-        TList *elist = con1->constructs;
+        TList<CParseNode*> *elist = con1->constructs;
         CParseNode *en;
-        for(en=(CParseNode *)(elist->begin()); !elist->end(); en=(CParseNode *)(elist->next())) {
+        for(en=elist->begin(); !elist->end(); en=elist->next()) {
           XStr *vType = new XStr(*(en->con3->text));
           vType->append(" *");
           sv = new CStateVar(vType, new XStr(*(en->con4->text)));
@@ -198,15 +207,15 @@ void CParseNode::propogateState(TList *list)
       }
       break;
     case IF:
-      for(sv=(CStateVar *)(list->begin()); !list->end(); sv=(CStateVar *)(list->next())) {
+      for(sv=list.begin(); !list.end(); sv=list.next()) {
         stateVars->append(sv);
       }
       stateVarsChildren = stateVars;
-      if(con2 != 0) con2->propogateState(list);
+      if(con2 != 0) con2->propagateState(list);
       break;
     case OLIST:
-      stateVarsChildren = new TList();
-      for(sv=(CStateVar *)(list->begin()); !list->end(); sv=(CStateVar *)(list->next())) {
+      stateVarsChildren = new TList<CStateVar*>();
+      for(sv=list.begin(); !list.end(); sv=list.next()) {
         stateVars->append(sv);
         stateVarsChildren->append(sv);
       }
@@ -224,7 +233,7 @@ void CParseNode::propogateState(TList *list)
     case SLIST:
     case OVERLAP:
     case ATOMIC:
-      for(sv=(CStateVar *)(list->begin()); !list->end(); sv=(CStateVar *)(list->next())) {
+      for(sv=list.begin(); !list.end(); sv=list.next()) {
         stateVars->append(sv);
       }
       stateVarsChildren = stateVars;
@@ -233,12 +242,15 @@ void CParseNode::propogateState(TList *list)
     case IDENT:
     case ENTRY:
     case ELIST:
+      break;
     default:
+      fprintf(stderr, "internal error in sdag translator..\n");
+      exit(1);
       break;
   }
   CParseNode *cn;
-  for(cn=(CParseNode *)(constructs->begin()); !constructs->end(); cn=(CParseNode *)(constructs->next())) {
-    cn->propogateState(stateVarsChildren);
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
+    cn->propagateState(*stateVarsChildren);
   }
 }
 
@@ -284,7 +296,7 @@ void CParseNode::generateCode(XStr& op)
       break;
   }
   CParseNode *cn;
-  for(cn=(CParseNode *)(constructs->begin()); !constructs->end(); cn=(CParseNode *)(constructs->next())) {
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
     cn->generateCode(op);
   }
 }
@@ -292,17 +304,17 @@ void CParseNode::generateCode(XStr& op)
 void CParseNode::generateWhen(XStr& op)
 {
   op << "  int " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
-  TList *elist = con1->constructs;
+  TList<CParseNode*> *elist = con1->constructs;
   CParseNode *el;
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     op << "    CMsgBuffer *"<<el->con4->text->charstar()<<"_buf;\n";
     op << "    " << el->con3->text->charstar() << " *" <<
                     el->con4->text->charstar() << ";\n";
   }
   op << "\n";
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     if(el->con2 == 0)
       op << "    " << el->con4->text->charstar() << 
             "_buf = __cDep->getMessage(" << el->entryPtr->entryNum << ");\n";
@@ -313,29 +325,29 @@ void CParseNode::generateWhen(XStr& op)
   }
   op << "\n";
   op << "    if (";
-  for(el=(CParseNode *)(elist->begin()); !elist->end();) {
+  for(el=elist->begin(); !elist->end();) {
     op << "(" << el->con4->text->charstar() << "_buf != 0)";
-    el = (CParseNode *)(elist->next());
+    el = elist->next();
     if(el != 0)
       op << "&&";
   }
   op << ") {\n";
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     op << "      " << el->con4->text->charstar() << " = (" << 
           el->con3->text->charstar() << " *) " <<
           el->con4->text->charstar() << "_buf->msg;\n";
     op << "      __cDep->removeMessage(" << el->con4->text->charstar() <<
           "_buf);\n";
   }
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() << 
+  op << "      " << constructs->front()->label->charstar() << 
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "      return 1;\n";
   op << "    } else {\n";
 
   int nRefs=0, nAny=0;
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     if(el->con2 == 0)
       nAny++;
     else
@@ -369,12 +381,12 @@ void CParseNode::generateWhen(XStr& op)
         stateVars->length() << ", " << nRefs << ", " << nAny << ");\n";
   CStateVar *sv;
   int iArgs=0;
-  for(sv=(CStateVar *)(stateVars->begin());!stateVars->end();sv=(CStateVar *)(stateVars->next())) {
+  for(sv=stateVars->begin();!stateVars->end();sv=stateVars->next()) {
     op << "      tr->args[" << iArgs++ << "] = (size_t) " <<
           sv->name->charstar() << ";\n";
   }
   int iRef=0, iAny=0;
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     if(el->con2 == 0) {
       op << "      tr->anyEntries[" << iAny++ << "] = " <<
             el->entryPtr->entryNum << ";\n";
@@ -392,17 +404,17 @@ void CParseNode::generateWhen(XStr& op)
   op << "  }\n\n";
   // end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
-  for(el=(CParseNode *)(elist->begin()); !elist->end(); el=(CParseNode *)(elist->next())) {
+  for(el=elist->begin(); !elist->end(); el=elist->next()) {
     // op << "    delete " <<  el->con4->text->charstar() << ";\n";
   }
   if(nextBeginOrEnd == 1)
    op << "    " << next->label->charstar() << "(";
   else
    op << "    " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "  }\n\n";
@@ -412,40 +424,40 @@ void CParseNode::generateWhile(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   op << "    if (" << con1->text->charstar() << ") {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() << 
+  op << "      " << constructs->front()->label->charstar() << 
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    } else {\n";
   if(nextBeginOrEnd == 1)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   op << "    }\n";
   // end actual code
   op << "  }\n\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   op << "    if (" << con1->text->charstar() << ") {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "      " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    } else {\n";
   if(nextBeginOrEnd == 1)
    op << "      " <<  next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   op << "    }\n";
   // end actual code
@@ -456,42 +468,42 @@ void CParseNode::generateFor(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   op << "    " << con1->text->charstar() << ";\n";
   op << "    if (" << con2->text->charstar() << ") {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "      " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    } else {\n";
   if(nextBeginOrEnd == 1)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   op << "    }\n";
   // end actual code
   op << "  }\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   op << con3->text->charstar() << ";\n";
   op << "    if (" << con2->text->charstar() << ") {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "      " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    } else {\n";
   if(nextBeginOrEnd == 1)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   op << "    }\n";
   // end actual code
@@ -502,22 +514,22 @@ void CParseNode::generateIf(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   op << "    if (" << con1->text->charstar() << ") {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "      " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    } else {\n";
   if (con2 != 0) {
     op << "      " << con2->label->charstar() << "(";
-    generateCall(op, stateVarsChildren);
+    generateCall(op, *stateVarsChildren);
     op << ");\n";
   } else {
     op << "      " << label->charstar() << "_end(";
-    generateCall(op, stateVarsChildren);
+    generateCall(op, *stateVarsChildren);
     op << ");\n";
   }
   op << "    }\n";
@@ -525,14 +537,14 @@ void CParseNode::generateIf(XStr& op)
   op << "  }\n\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   if(nextBeginOrEnd == 1)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "  }\n\n";
@@ -542,25 +554,25 @@ void CParseNode::generateElse(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
-  op << "    " << ((CParseNode *)constructs->front())->label->charstar() << 
+  op << "    " << constructs->front()->label->charstar() << 
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   // end actual code
   op << "  }\n\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   if(nextBeginOrEnd == 1)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "  }\n\n";
@@ -570,7 +582,7 @@ void CParseNode::generateForall(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   op << "    int __first = (" << con2->text->charstar() <<
@@ -585,16 +597,16 @@ void CParseNode::generateForall(XStr& op)
   op << "    for(int " << con1->text->charstar() << 
         "=__first;" << con1->text->charstar() <<
         "<=__last;" << con1->text->charstar() << "+=__stride) {\n";
-  op << "      " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "      " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   op << "    }\n";
   // end actual code
   op << "  }\n\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   op << "    " << counter->charstar() << "->decrement();\n";
@@ -604,7 +616,7 @@ void CParseNode::generateForall(XStr& op)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "    }\n  }\n\n";
@@ -614,22 +626,22 @@ void CParseNode::generateOlist(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   op << "    CCounter *" << counter->charstar() << "= new CCounter(" <<
         constructs->length() << ");\n";
-  for(CParseNode *cn=(CParseNode *)(constructs->begin()); 
-                     !constructs->end(); cn=(CParseNode *)(constructs->next())) {
+  for(CParseNode *cn=constructs->begin(); 
+                     !constructs->end(); cn=constructs->next()) {
     op << "    " << cn->label->charstar() << "(";
-    generateCall(op, stateVarsChildren);
+    generateCall(op, *stateVarsChildren);
     op << ");\n";
   }
   // end actual code
   op << "  }\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   op << "    " << counter->charstar() << "->decrement();\n";
@@ -639,7 +651,7 @@ void CParseNode::generateOlist(XStr& op)
    op << "      " << next->label->charstar() << "(";
   else
    op << "      " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "    }\n";
@@ -650,25 +662,25 @@ void CParseNode::generateOverlap(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
-  op << "    " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "    " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   // end actual code
   op << "  }\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   if(nextBeginOrEnd == 1)
    op << "    " << next->label->charstar() << "(";
   else
    op << "    " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "  }\n";
@@ -678,25 +690,25 @@ void CParseNode::generateSlist(XStr& op)
 {
   // inlined start function
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
-  op << "    " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "    " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   // end actual code
   op << "  }\n";
   // inlined end function
   op << "  void " << label->charstar() << "_end(";
-  generatePrototype(op, stateVarsChildren);
+  generatePrototype(op, *stateVarsChildren);
   op << ") {\n";
   // actual code here 
   if(nextBeginOrEnd == 1)
    op << "    " << next->label->charstar() << "(";
   else
    op << "    " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   // end actual code
   op << "  }\n";
@@ -707,18 +719,18 @@ void CParseNode::generateSdagEntry(XStr& op)
   // header file
   op << "public:\n";
   op << "  void " << con1->text->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
-  op << "    " << ((CParseNode *)constructs->front())->label->charstar() <<
+  op << "    " << constructs->front()->label->charstar() <<
         "(";
-  generateCall(op, stateVarsChildren);
+  generateCall(op, *stateVarsChildren);
   op << ");\n";
   // end actual code
   op << "  }\n\n";
   op << "private:\n";
   op << "  void " << con1->text->charstar() << "_end(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   // actual code here 
   // op << "    delete " << con3->text->charstar() << ";\n";
@@ -729,34 +741,34 @@ void CParseNode::generateSdagEntry(XStr& op)
 void CParseNode::generateAtomic(XStr& op)
 {
   op << "  void " << label->charstar() << "(";
-  generatePrototype(op, stateVars);
+  generatePrototype(op, *stateVars);
   op << ") {\n";
   op << "    " << text->charstar() << "\n";
   if(nextBeginOrEnd == 1)
     op << "    " << next->label->charstar() << "(";
   else
     op << "    " << next->label->charstar() << "_end(";
-  generateCall(op, stateVars);
+  generateCall(op, *stateVars);
   op << ");\n";
   op << "  }\n\n";
 }
 
-void CParseNode::generatePrototype(XStr& op, TList *list)
+void CParseNode::generatePrototype(XStr& op, TList<CStateVar*>& list)
 {
   CStateVar *sv;
-  for(sv=(CStateVar *)(list->begin()); !list->end(); ) {
+  for(sv=list.begin(); !list.end(); ) {
     op << sv->type->charstar() << " " << sv->name->charstar();
-    sv = (CStateVar *)list->next();
+    sv = list.next();
     if (sv != 0)
       op << ", ";
   }
 }
 
-void CParseNode::generateCall(XStr& op, TList *list) {
+void CParseNode::generateCall(XStr& op, TList<CStateVar*>& list) {
   CStateVar *sv;
-  for(sv=(CStateVar *)list->begin(); !list->end(); ) {
+  for(sv=list.begin(); !list.end(); ) {
     op << sv->name->charstar();
-    sv = (CStateVar *)list->next();
+    sv = list.next();
     if (sv != 0)
       op << ", ";
   }
@@ -771,14 +783,14 @@ void CParseNode::setNext(CParseNode *n, int boe)
       next = n;
       nextBeginOrEnd = boe;
       {
-        CParseNode *cn=(CParseNode *)constructs->begin();
+        CParseNode *cn=constructs->begin();
         if (cn==0) // empty slist
           return;
-        CParseNode *nextNode=(CParseNode *)constructs->next();
+        CParseNode *nextNode=constructs->next();
         for(; nextNode != 0;) {
           cn->setNext(nextNode, 1);
           cn = nextNode;
-          nextNode = (CParseNode *)constructs->next();
+          nextNode = constructs->next();
         }
         cn->setNext(this, 0);
       }
@@ -807,7 +819,7 @@ void CParseNode::setNext(CParseNode *n, int boe)
       break;
   }
   CParseNode *cn;
-  for(cn=(CParseNode *)constructs->begin(); !constructs->end(); cn=(CParseNode *)constructs->next()) {
+  for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
     cn->setNext(n, boe);
   }
 }
index 308ed8aa5a5346807e46362edbef54f3b6363cb7..0381c45f849b887493a959249359b733670f758b 100644 (file)
 
 void CParsedFile::print(int indent)
 {
-  for(CEntry *ce=(CEntry *)(entryList->begin()); !entryList->end(); ce=(CEntry *)(entryList->next()))
+  for(CEntry *ce=entryList.begin(); !entryList.end(); ce=entryList.next())
   {
     ce->print(indent);
     printf("\n");
   }
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next()))
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next())
   {
     cn->print(indent);
     printf("\n");
@@ -24,35 +24,35 @@ void CParsedFile::print(int indent)
 
 void CParsedFile::numberNodes(void)
 {
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
     cn->numberNodes();
   }
 }
 
 void CParsedFile::labelNodes(void)
 {
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
     cn->labelNodes();
   }
 }
 
-void CParsedFile::propogateState(void)
+void CParsedFile::propagateState(void)
 {
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
-    cn->propogateState(0);
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
+    cn->propagateState();
   }
 }
 
 void CParsedFile::generateEntryList(void)
 {
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
     cn->generateEntryList(entryList, 0);
   }
 }
 
 void CParsedFile::generateCode(XStr& op)
 {
-  for(CParseNode *cn=(CParseNode *)(nodeList->begin()); !nodeList->end(); cn=(CParseNode *)(nodeList->next())) {
+  for(CParseNode *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
     cn->setNext(0,0);
     cn->generateCode(op);
   }
@@ -62,7 +62,7 @@ void CParsedFile::generateEntries(XStr& op)
 {
   CEntry *en;
   op << "public:\n";
-  for(en=(CEntry *)(entryList->begin()); !entryList->end(); en=(CEntry *)(entryList->next())) {
+  for(en=entryList.begin(); !entryList.end(); en=entryList.next()) {
     en->generateCode(op);
   }
 }
@@ -74,7 +74,7 @@ void CParsedFile::generateInitFunction(XStr& op)
   op << "  void __sdag_init(void) {\n";
   op << "    __cDep = new CDep("<<numEntries<<","<<numWhens<<");\n";
   CEntry *en;
-  for(en=(CEntry *)(entryList->begin()); !entryList->end(); en=(CEntry *)(entryList->next())) {
+  for(en=entryList.begin(); !entryList.end(); en=entryList.next()) {
     en->generateDeps(op);
   }
   op << "  }\n";
index 98952487289802e2df56c31ba5341250f12aebdd..aa7c4ee2ae643b559ea79b432f1b8d588c4dae76 100644 (file)
@@ -19,25 +19,22 @@ class CParsedFile {
   private:
     void numberNodes(void);
     void labelNodes(void);
-    void propogateState(void);
+    void propagateState(void);
     void generateEntryList(void);
     void generateCode(XStr& output);
     void generateEntries(XStr& output);
     void generateInitFunction(XStr& output);
   public:
-    TList *entryList;
-    TList *nodeList;
-    CParsedFile(void) {
-      entryList = new TList();
-      nodeList = new TList();
-    }
+    TList<CEntry*> entryList;
+    TList<CParseNode*> nodeList;
+    CParsedFile(void) {}
     ~CParsedFile(void){}
     void print(int indent);
     void doProcess(XStr& classname, XStr& output) {
       output << "#define " << classname << "_SDAG_CODE \n";
       numberNodes();
       labelNodes();
-      propogateState();
+      propagateState();
       generateEntryList();
       generateCode(output);
       generateEntries(output);
index dcf72bd4f56c69f812cf21f52403bb853cc0d9fa..732dc7bc357ecdb7cfd0a3185e944d6fab546ca0 100644 (file)
@@ -79,7 +79,7 @@ CParsedFile *CParser::doParse(void)
     tok = lookForToken(SDAGENTRY);
     if(tok == 0)
       break;
-    cParsedFile->nodeList->append(new CParseNode(SDAGENTRY, cLexer, this));
+    cParsedFile->nodeList.append(new CParseNode(SDAGENTRY, cLexer, this));
   }
   return cParsedFile;
 }