|
OpenADFortTk (basic)
|
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 }