OpenADFortTk (basic)
src/xaif2whirl/PUXlationContext.cxx
Go to the documentation of this file.
00001 // -*-Mode: C++;-*-
00002 // $Header: /m_home/m_utkej/Argonne/cvs2svn/cvs/OpenADFortTk/src/xaif2whirl/PUXlationContext.cxx,v 1.4 2008-02-21 14:32:05 utke Exp $
00003 
00004 #include <stdio.h>
00005 
00006 #include "PUXlationContext.h"
00007 #include "Open64IRInterface/SymTab.h"
00008 #include "Diagnostics.h"
00009 
00010 namespace xaif2whirl { 
00011 
00012   std::string PUXlationContext::ourPrefix;
00013 
00014   PUXlationContext::PUXlationContext(const std::string& anOriginator, PU_Info* pu_forest) : 
00015     mySymTabIdToSymTabMap(pu_forest), 
00016     myPUIdToPUMap(pu_forest), 
00017     myWNParentMapP(NULL), 
00018     myWNToWNIdMapP(NULL),
00019     myWNIdToWNMapP(NULL),
00020     //myXAIFSymToSymbolMapP(NULL),
00021     myOriginator(anOriginator) {
00022     myXlationContextStack.push_front(XlationContext());
00023   }
00024 
00025   PUXlationContext::~PUXlationContext() {
00026     // clear the stack
00027     myXlationContextStack.clear(); 
00028   }
00029 
00030   void PUXlationContext::createXlationContext() {
00031     PushNewXlationContext(XlationContext::NOFLAG);
00032   }
00033 
00034   void PUXlationContext::createXlationContext(XlationContext::Flags_E f) {
00035     PushNewXlationContext(f);
00036   }
00037 
00038   void PUXlationContext::PushNewXlationContext(XlationContext::Flags_E f) {
00039     if (myXlationContextStack.empty()) 
00040       // this should never happen
00041       FORTTK_DIE("PUXlationContext::PushNewXlationContext: empty context stack");
00042     const XlationContext& parentXlationContext = myXlationContextStack.front();
00043     myXlationContextStack.push_front(XlationContext());
00044     currentXlationContext().inheritFlagsDown(parentXlationContext);
00045     currentXlationContext().setFlag(f);
00046   }
00047 
00048   void PUXlationContext::deleteXlationContext() {
00049     if (myXlationContextStack.size() > 1) {
00050       // maintain invariant that there is at least one context
00051       (++(myXlationContextStack.begin()))->inheritFlagsUp(*(myXlationContextStack.begin()));
00052       myXlationContextStack.pop_front();
00053     }
00054   }
00055 
00056   XlationContext& PUXlationContext::currentXlationContext() { 
00057     return myXlationContextStack.front(); 
00058   }
00059 
00060   WN* PUXlationContext::findParentWN(WN* wn) {
00061     if (!myWNParentMapP)
00062       FORTTK_DIE("PUXlationContext::FindParentWN: myWNParentMapP not set");
00063     if(!wn)
00064       FORTTK_DIE("PUXlationContext::FindParentWN: null pointer passed");
00065     return (myWNParentMapP->Find(wn));
00066   }
00067 
00068   WN* PUXlationContext::findParentBlockWN(WN* wn) {
00069     if (!myWNParentMapP)
00070       FORTTK_DIE("PUXlationContext::FindParentBlockWN: myWNParentMapP not set");
00071     if(!wn)
00072       FORTTK_DIE("PUXlationContext::FindParentBlockWN: null pointer passed");
00073     return (myWNParentMapP->FindBlock(wn)); 
00074   }
00075 
00076   fortTkSupport::WhirlParentMap* PUXlationContext::getWNParentMap() const { 
00077     if (!myWNParentMapP)
00078       FORTTK_DIE("PUXlationContext::getWNParentMap: myWNParentMapP not set");
00079     return myWNParentMapP; 
00080   }
00081 
00082   void PUXlationContext::setWNParentMap(fortTkSupport::WhirlParentMap* aWhirlParentMapP) { 
00083     if (!aWhirlParentMapP)
00084       FORTTK_DIE("PUXlationContext::setWNParentMap: null pointer passed");
00085     // JU: this appears to be reset, HMMM
00086     if (myWNParentMapP) {
00087       if (myWNParentMapP==aWhirlParentMapP) { 
00088         FORTTK_MSG(2,"PUXlationContext::setWNParentMap: already set to the same");
00089       }
00090       else { 
00091         FORTTK_MSG(2,"PUXlationContext::setWNParentMap: already set to " 
00092                    << myWNParentMapP 
00093                    << " new " 
00094                    << aWhirlParentMapP);
00095       }
00096     }
00097     myWNParentMapP = aWhirlParentMapP; 
00098   }
00099 
00100   std::pair<ST_TAB*, PU_Info*>  PUXlationContext::findSymTab(fortTkSupport::SymTabId stabId) {
00101     return (mySymTabIdToSymTabMap.Find(stabId, true /*mustfind*/)); 
00102   }
00103 
00104   PU_Info* PUXlationContext::findPU(fortTkSupport::PUId aPUId) {
00105     return (myPUIdToPUMap.Find(aPUId));
00106   }
00107 
00108   fortTkSupport::WNId PUXlationContext::findWNId(WN* aWNp) {
00109     if (!myWNToWNIdMapP)
00110       FORTTK_DIE("PUXlationContext::findWNId: myWNToWNIdMapP not set");
00111     if (!aWNp)
00112       FORTTK_DIE("PUXlationContext::findWNId: null pointer passed");
00113     return myWNToWNIdMapP->Find(aWNp);
00114   }
00115 
00116   fortTkSupport::WNToWNIdMap* PUXlationContext::getWNToWNIdMap() const { 
00117     if (!myWNToWNIdMapP)
00118       FORTTK_DIE("PUXlationContext::getWNToWNIdMap: myWNToWNIdMapP not set");
00119     return myWNToWNIdMapP; 
00120   }
00121 
00122   void PUXlationContext::setWNToWNIdMap(fortTkSupport::WNToWNIdMap* aWNToWNIdMapP) { 
00123     if (!aWNToWNIdMapP)
00124       FORTTK_DIE("PUXlationContext::setWNToWNIdMap: null pointer passed");
00125     // JU: this is being reset hmm
00126     if (myWNToWNIdMapP) {
00127       if (myWNToWNIdMapP==aWNToWNIdMapP) { 
00128         FORTTK_MSG(2,"PUXlationContext::setWNToWNIdMap: already set to the same");
00129       }
00130       else { 
00131         FORTTK_MSG(2,"PUXlationContext::setWNToWNIdMap: already set to " 
00132                    << myWNToWNIdMapP  
00133                    << " new " 
00134                    << aWNToWNIdMapP);
00135       }
00136     }
00137     myWNToWNIdMapP = aWNToWNIdMapP; 
00138   }
00139 
00140   WN* PUXlationContext::findWN(fortTkSupport::WNId aWNId, bool mustFind) {
00141     if (!myWNIdToWNMapP)
00142       FORTTK_DIE("PUXlationContext::findWN: myWNIdToWNMapP not set");
00143     return myWNIdToWNMapP->Find(aWNId,mustFind);
00144   }
00145 
00146   fortTkSupport::WNIdToWNMap* PUXlationContext::getWNIdToWNMap() const { 
00147     if (!myWNIdToWNMapP)
00148       FORTTK_DIE("PUXlationContext::getWNIdToWNMap: myWNIdToWNMapP not set");
00149     return myWNIdToWNMapP; 
00150   }
00151 
00152   void PUXlationContext::setWNIdToWNMap(fortTkSupport::WNIdToWNMap* aWNIdToWNMapP) { 
00153     if (!aWNIdToWNMapP)
00154       FORTTK_DIE("PUXlationContext::setWNIdToWNMap: null pointer passed");
00155     // JU: this is being reset hmm
00156     if (myWNIdToWNMapP) {
00157       if (myWNIdToWNMapP==aWNIdToWNMapP) { 
00158         FORTTK_MSG(2,"PUXlationContext::setWNIdToWNMap: already set to the same");
00159       }
00160       else { 
00161         FORTTK_MSG(2,"PUXlationContext::setWNIdToWNMap: already set to " 
00162                    << myWNIdToWNMapP  
00163                    << " new " 
00164                    << aWNIdToWNMapP);
00165       }
00166     }
00167     myWNIdToWNMapP = aWNIdToWNMapP; 
00168   }
00169 
00170   fortTkSupport::Symbol* PUXlationContext::findSym(const std::string& scopeid, 
00171                                     const std::string& symid) { 
00172     return (myXAIFSymToSymbolMap.Find(scopeid.c_str(), symid.c_str())); 
00173   }
00174 
00175   fortTkSupport::XAIFSymToSymbolMap& PUXlationContext::getXAIFSymToSymbolMap() {
00176     return myXAIFSymToSymbolMap;
00177   } // end PUXlationContext::getXAIFSymToSymbolMap()
00178 
00179   void PUXlationContext::setPrefix(const std::string& aPrefix) { 
00180     ourPrefix=aPrefix;
00181   }
00182 
00183   const std::string& PUXlationContext::getPrefix() {
00184     return ourPrefix;
00185   }
00186 
00187   void PUXlationContext::dump(std::ostream& o, const std::string& indent) const {
00188     o << "(myOriginator=" << myOriginator.c_str() << " ";
00189     o << ")\n";
00190     for (XlationContextStack::const_iterator it=myXlationContextStack.begin();
00191          it!=myXlationContextStack.end();
00192          ++it) 
00193       it->dump(o,indent+"  ");
00194   }
00195 
00196   void PUXlationContext::ddump() const {
00197     dump(std::cerr,"");
00198   }
00199 
00200 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines