Inching closer to integration of sdag translator with charmxi.
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 23 Mar 2001 23:40:52 +0000 (23:40 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 23 Mar 2001 23:40:52 +0000 (23:40 +0000)
Removed the redundant CString class in sdagx. Using the XStr class
from charmxi.

src/langs/sdag/xlator/CEntry.C
src/langs/sdag/xlator/CEntry.h
src/langs/sdag/xlator/CLexer.C
src/langs/sdag/xlator/CParseNode.h
src/langs/sdag/xlator/CParseNodeProcess.C
src/langs/sdag/xlator/CParsedFile.h
src/langs/sdag/xlator/CStateVar.h
src/langs/sdag/xlator/CString.h [deleted file]
src/langs/sdag/xlator/CToken.h
src/scripts/Makefile
src/xlat-i/xi-util.h

index 2c4cd3c1489cffed41988de149cc5285fcb05371..c71c1210346b14118ba7445bddc39983fde2ce35 100644 (file)
@@ -16,7 +16,7 @@ void CEntry::generateDeps(void)
   }
 }
 
-void CEntry::generateCode(CString *className)
+void CEntry::generateCode(XStr *className)
 {
   CParseNode *cn;
   // C++ file
index 88ac87c1bafb0af79f5ecb59ff20130f5e8080e7..29d8c8e33b13d44575621309461d40166cb7eba5 100644 (file)
@@ -8,7 +8,7 @@
 #ifndef _CEntry_H_
 #define _CEntry_H_
 
-#include "CString.h"
+#include "xi-util.h"
 #include "sdag-globals.h"
 #include "CList.h"
 
@@ -16,12 +16,12 @@ class CParseNode;
 
 class CEntry{
   public:
-    CString *entry;
-    CString *msgType;
+    XStr *entry;
+    XStr *msgType;
     int entryNum;
     int refNumNeeded;
     TList *whenList;
-    CEntry(CString *e, CString *m) : entry(e), msgType(m) {
+    CEntry(XStr *e, XStr *m) : entry(e), msgType(m) {
       entryNum = numEntries++;
       whenList = new TList();
       refNumNeeded=0;
@@ -30,7 +30,7 @@ class CEntry{
       Indent(indent);
       printf("entry %s (%s *)", entry->charstar(), msgType->charstar());
     }
-    void generateCode(CString *);
+    void generateCode(XStr *);
     void generateDeps(void);
     
 };
index c055408174d7e4a3d844d5bdb1189105d76bac7d..e4e3615c192bff761f2c4277faafd9191b122241 100644 (file)
@@ -93,7 +93,7 @@ CToken *CLexer::getMatchedCode(const char *start_str, EToken stok, EToken etok)
     if(cToken->type == etok) {
       currentScope--;
     }
-    code->text->append(cToken->text);
+    code->text->append(cToken->text->charstar());
     delete cToken;
   }
   wsSignificant = 0;
@@ -139,7 +139,7 @@ CToken *CLexer::getIntExpr(EToken term)
       }
       endExpr = 1;
     } else {
-      expr->text->append(cToken->text);
+      expr->text->append(cToken->text->charstar());
     }
     delete cToken;
   }
index 74970a421643aec59f2bb74527ef1d0e37e566bd..3b6f26f5ac1a56ef6d09c233f80b84e6ed4f1932 100644 (file)
@@ -9,7 +9,7 @@
 #define _CParseNode_H_
 
 #include "EToken.h"
-#include "CString.h"
+#include "xi-util.h"
 #include "CLexer.h"
 #include "sdag-globals.h"
 #include "CList.h"
@@ -20,13 +20,13 @@ class CParser;
 
 class CParseNode {
   public:
-    CString *className;
+    XStr *className;
     void print(int indent);
     int nodeNum;
-    CString *label;
-    CString *counter;
+    XStr *label;
+    XStr *counter;
     EToken type;
-    CString *text;
+    XStr *text;
     CParseNode *con1, *con2, *con3, *con4;
     TList *constructs;
     TList *stateVars;
@@ -35,10 +35,10 @@ class CParseNode {
     int nextBeginOrEnd;
     CEntry *entryPtr;
     CParseNode(EToken t, CLexer *cLexer, CParser *cParser);
-    CParseNode(EToken t, CString *txt) : type(t), text(txt), con1(0), con2(0),
+    CParseNode(EToken t, XStr *txt) : type(t), text(txt), con1(0), con2(0),
                                          con3(0), con4(0), constructs(0) {}
     void numberNodes(void);
-    void labelNodes(CString *);
+    void labelNodes(XStr *);
     void generateEntryList(TList *, CParseNode *);
     void propogateState(TList *);
     void generateCode(void);
index 14a1878d4a5d114133471cb6f3e351147d941b58..0f02ce9bd2f4af6c31e59b066d7ed766bf29ca96 100644 (file)
@@ -36,7 +36,7 @@ void CParseNode::numberNodes(void)
   }
 }
 
-void CParseNode::labelNodes(CString *cname)
+void CParseNode::labelNodes(XStr *cname)
 {
   char text[128];
 
@@ -45,48 +45,48 @@ void CParseNode::labelNodes(CString *cname)
     case ENTRY:
     case SDAGENTRY:
       sprintf(text, "%s", con1->text->charstar());
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case OVERLAP: 
       sprintf(text, "_overlap_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case WHEN: 
       sprintf(text, "_when_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case FOR: 
       sprintf(text, "_for_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case WHILE: 
       sprintf(text, "_while_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case IF: 
       sprintf(text, "_if_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       if(con2!=0) con2->labelNodes(cname);
       break;
     case ELSE: 
       sprintf(text, "_else_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case FORALL: 
       sprintf(text, "_forall_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case SLIST: 
       sprintf(text, "_slist_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case OLIST: 
       sprintf(text, "_olist_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case ATOMIC: 
       sprintf(text, "_atomic_%d", nodeNum); 
-      label = new CString(text);
+      label = new XStr(text);
       break;
     case ELIST:
     case INT_EXPR:
@@ -114,8 +114,8 @@ void CParseNode::generateEntryList(TList *list, CParseNode *thisWhen)
       int found=0;
       for(entry=(CEntry *)(list->begin()); !list->end(); 
           entry=(CEntry *)(list->next())) {
-        if(entry->entry->equal(con1->text) &&
-           entry->msgType->equal(con3->text)) {
+        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;
@@ -136,7 +136,7 @@ void CParseNode::generateEntryList(TList *list, CParseNode *thisWhen)
       }
       if(!found) {
         CEntry *newEntry;
-        newEntry = new CEntry(new CString(con1->text), new CString(con3->text));
+        newEntry = new CEntry(new XStr(*(con1->text)), new XStr(*(con3->text)));
         list->append(newEntry);
         entryPtr = newEntry;
         newEntry->whenList->append(thisWhen);
@@ -158,9 +158,9 @@ void CParseNode::propogateState(TList *list)
   switch(type) {
     case SDAGENTRY:
       {
-        CString *vType = new CString(con2->text);
+        XStr *vType = new XStr(*(con2->text));
         vType->append(" *");
-        sv = new CStateVar(vType, new CString(con3->text));
+        sv = new CStateVar(vType, new XStr(*(con3->text)));
       }
       stateVars->append(sv);
       stateVarsChildren = stateVars;
@@ -171,13 +171,13 @@ void CParseNode::propogateState(TList *list)
         stateVars->append(sv);
         stateVarsChildren->append(sv);
       }
-      sv = new CStateVar(new CString("int"), new CString(con1->text));
+      sv = new CStateVar(new XStr("int"), new XStr(*(con1->text)));
       stateVarsChildren->append(sv);
       {
         char txt[128];
         sprintf(txt, "_cf%d", nodeNum);
-        counter = new CString(txt);
-        sv = new CStateVar(new CString("CCounter *"), counter);
+        counter = new XStr(txt);
+        sv = new CStateVar(new XStr("CCounter *"), counter);
         stateVarsChildren->append(sv);
       }
       break;
@@ -191,9 +191,9 @@ void CParseNode::propogateState(TList *list)
         TList *elist = con1->constructs;
         CParseNode *en;
         for(en=(CParseNode *)(elist->begin()); !elist->end(); en=(CParseNode *)(elist->next())) {
-          CString *vType = new CString(en->con3->text);
+          XStr *vType = new XStr(*(en->con3->text));
           vType->append(" *");
-          sv = new CStateVar(vType, new CString(en->con4->text));
+          sv = new CStateVar(vType, new XStr(*(en->con4->text)));
           stateVarsChildren->append(sv);
         }
       }
@@ -214,8 +214,8 @@ void CParseNode::propogateState(TList *list)
       {
         char txt[128];
         sprintf(txt, "_co%d", nodeNum);
-        counter = new CString(txt);
-        sv = new CStateVar(new CString("CCounter *"), counter);
+        counter = new XStr(txt);
+        sv = new CStateVar(new XStr("CCounter *"), counter);
         stateVarsChildren->append(sv);
       }
       break;
index d217032502558ccd6822c92b667e1851b2e8a428..f84a5392e461d391681f5bd9958b06361eb2775d 100644 (file)
@@ -8,7 +8,7 @@
 #ifndef _CParsedFile_H_
 #define _CParsedFile_H_
 
-#include "CString.h"
+#include "xi-util.h"
 #include "CList.h"
 #include "CEntry.h"
 #include "CParseNode.h"
@@ -25,12 +25,12 @@ class CParsedFile {
     void generateEntries(void);
     void generateInitFunction(void);
   public:
-    CString *className;
-    CString *sourceFile;
+    XStr *className;
+    XStr *sourceFile;
     TList *entryList;
     TList *nodeList;
     CParsedFile(char *sFile): className(0) {
-      sourceFile = new CString(sFile);
+      sourceFile = new XStr(sFile);
       entryList = new TList();
       nodeList = new TList();
     }
@@ -41,7 +41,7 @@ class CParsedFile {
       labelNodes();
       propogateState();
       generateEntryList();
-      CString *fhname = new CString(sourceFile);
+      XStr *fhname = new XStr(sourceFile->charstar());
       fhname->append(".h");
       fh = fopen(fhname->charstar(), "w");
       generateCode();
index 8ac3f19e1346f6a3e2aa9848f4cedb07eeb07081..2cfe29268201ba7f3a42b18dfef89cc1b70c1add 100644 (file)
@@ -8,13 +8,13 @@
 #ifndef _CStateVar_H_
 #define _CStateVar_H_
 
-#include "CString.h"
+#include "xi-util.h"
 
 class CStateVar {
   public:
-    CString *type;
-    CString *name;
-    CStateVar(CString *t, CString *n) : type(t), name(n) {}
+    XStr *type;
+    XStr *name;
+    CStateVar(XStr *t, XStr *n) : type(t), name(n) {}
 };
 
 #endif
diff --git a/src/langs/sdag/xlator/CString.h b/src/langs/sdag/xlator/CString.h
deleted file mode 100644 (file)
index 247ca15..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************
- * $Source$
- * $Author$
- * $Date$
- * $Revision$
- *****************************************************************************/
-
-#ifndef _CString_H_
-#define _CString_H_
-
-#include <string.h>
-#include <stdio.h>
-#include "sdag-globals.h"
-
-class CString {
-  private:
-    unsigned int len;
-    unsigned int stringlen;
-    char *text;
-  public:
-    CString(int initlen=128)
-    {
-      len = initlen;
-      stringlen = 0;
-      text = new char[initlen];
-      text[0] = '\0';
-    }
-    CString(const char *txt)
-    {
-      stringlen = strlen(txt);
-      len = (stringlen+1)*2;
-      text = new char[len];
-      strcpy(text, txt);
-    }
-    CString(CString *str)
-    {
-      stringlen = str->length();
-      len = (stringlen+1)*2;
-      text = new char[len];
-      strcpy(text, str->charstar());
-    }
-    ~CString(){
-      // delete[] text;
-    }
-    void append(char *txt)
-    {
-      stringlen += strlen(txt);
-      while (stringlen>=len)
-        len *= 2;
-      char *newstr = new char[len];
-      strcpy(newstr, text);
-      strcat(newstr, txt);
-      delete[] text;
-      text = newstr;
-    }
-    void append(CString* cstr)
-    {
-      char *txt = cstr->charstar();
-      stringlen += cstr->length();
-      while (stringlen>=len)
-        len *= 2;
-      char *newstr = new char[len];
-      strcpy(newstr, text);
-      strcat(newstr, txt);
-      delete[] text;
-      text = newstr;
-    }
-    unsigned int length(void)
-    {
-      return stringlen;
-    }
-    char *charstar(void)
-    {
-      return text;
-    }
-    void print(int indent) {
-      Indent(indent);
-      printf("%s", text);
-    }
-    int equal(CString *another) {
-      return (strcmp(text, another->text)==0) ? 1 : 0;
-    }
-};
-
-#endif /* _CString_H_ */
index 1b82b69e1c923483a02e825a45dd5d6161f6bde3..9c57e0b3a12647adfcb8ecef292b1dace307f67c 100644 (file)
 
 #include <stdio.h>
 #include "EToken.h"
-#include "CString.h"
+#include "xi-util.h"
 #include "sdag-globals.h"
 
 class CToken {
   public:
     EToken type;
-    CString *text;
+    XStr *text;
     CToken(EToken t, const char *txt)
     {
       type = t;
-      text = new CString(txt);
+      text = new XStr(txt);
     }
     ~CToken()
     {
index 559102b62486f02e0da26677bf5567f4fdfe19ee..552f2002fb600ff2bf61e2f66e8b6987a58330ec 100644 (file)
@@ -668,7 +668,7 @@ libf90charm.a: f90main.ci f90main.h f90main.C charmf.h charmf.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
+       sdag-globals.o CParseNodeProcess.o CEntry.o xi-util.o
 
 sdagx: $(SDAGOBJ)
        $(SEQCHARMC) -cp ../bin -o sdagx -language c++ $(SDAGOBJ)
index 0a67f14045232686b30b93b8dbf779fab0089290..b479c651060666194a16c2a66c5af886fa3e4301 100644 (file)
@@ -33,9 +33,20 @@ class XStr {
   private:
     char *s;
     unsigned int len, blklen;
+    void initTo(const char *_s);
+  public:
+    // MAB: following append methods were earlier private. However,
+    // in order to minimize changes to sdag translator, they have been made
+    // public. Once the sdag translator is fully embedded in charmxi,
+    // they will be made private again.
     void append(const char *_s);
     void append(char c);
-    void initTo(const char *_s);
+    // MAB: the print method is needed for debugging sdag translator.
+    // this too will go away later.
+    void print(int indent) { 
+      for (int i=0; i<indent; i++) cout << "  ";
+      cout << get_string();
+    }
   public:
     XStr();
     XStr(const char *_s);
@@ -43,9 +54,14 @@ class XStr {
     ~XStr() { delete[] s; }
     char *get_string(void) { return s; }
     const char *get_string_const(void) const { return s; }
+    // this is to allow XStr to be substituted for CString in
+    // structured dagger translator without a lot of changes
+    char *charstar(void) { return get_string(); }
     //This operator allows us to use XStr's interchangably with char *'s:
     operator char *() {return get_string();}
     //Comparison operators
+    int operator==(XStr &s2) {return 0==strcmp(s,s2.s);}
+    int operator!=(XStr &s2) {return 0!=strcmp(s,s2.s);}
     int operator==(const char *s2) {return 0==strcmp(s,s2);}
     int operator!=(const char *s2) {return 0!=strcmp(s,s2);}
     //Addition operator