00001 00002 // DFAGenReachingDefinitionsStandard.cpp 00003 00004 00005 #include <OpenAnalysis/DataFlow/ReachDefs/DFAGenReachingDefinitionsStandard.hpp> 00006 00007 namespace OA { 00008 namespace DFAGenReachingDefinitions { 00009 00010 OA_ptr<LocIterator> DFAGenReachingDefinitionsStandard::getDFAGenReachingDefinitionsIterator(StmtHandle s) 00011 { 00012 OA_ptr<LocIterator> retval; 00013 00014 if (mDFAGenReachingDefinitions[s].ptrEqual(0)) { 00015 OA_ptr<LocSet> emptySet; emptySet = new LocSet; 00016 retval = new LocSetIterator(emptySet); 00017 } else { 00018 retval = new LocSetIterator(mDFAGenReachingDefinitions[s]); 00019 } 00020 return retval; 00021 } 00022 00023 OA_ptr<LocIterator> DFAGenReachingDefinitionsStandard::getExitDFAGenReachingDefinitionsIterator() 00024 { 00025 OA_ptr<LocIterator> retval; 00026 if (mExitDFAGenReachingDefinitions.ptrEqual(0)) { 00027 OA_ptr<LocSet> emptySet; emptySet = new LocSet; 00028 retval = new LocSetIterator(emptySet); 00029 } 00030 else { 00031 retval = new LocSetIterator(mExitDFAGenReachingDefinitions); 00032 } 00033 return retval; 00034 } 00035 00036 void DFAGenReachingDefinitionsStandard::output(IRHandlesIRInterface& ir) 00037 { 00038 sOutBuild->objStart("DFAGenReachingDefinitionsStandard"); 00039 00040 sOutBuild->mapStart("mDFAGenReachingDefinitions", "StmtHandle", "OA_ptr<LocSet>"); 00041 std::map<StmtHandle,OA_ptr<LocSet> >::iterator mapIter; 00042 for (mapIter = mDFAGenReachingDefinitions.begin(); mapIter != mDFAGenReachingDefinitions.end(); mapIter++) { 00043 StmtHandle s = mapIter->first; 00044 OA_ptr<LocSet> rdset = mapIter->second; 00045 if ( rdset.ptrEqual(0) ) continue; 00046 00047 sOutBuild->mapEntryStart(); 00048 sOutBuild->mapKeyStart(); 00049 sOutBuild->outputIRHandle(s, ir); 00050 sOutBuild->mapKeyEnd(); 00051 sOutBuild->mapValueStart(); 00052 00053 00054 sOutBuild->listStart(); 00055 OA_ptr<LocIterator> setIter; 00056 setIter = getDFAGenReachingDefinitionsIterator(s); 00057 for ( ; setIter->isValid(); (*setIter)++ ) { 00058 sOutBuild->listItemStart(); { 00059 setIter->current()->output(ir); 00060 } sOutBuild->listItemEnd(); 00061 } 00062 sOutBuild->listEnd(); 00063 sOutBuild->mapValueEnd(); 00064 sOutBuild->mapEntryEnd(); 00065 } 00066 sOutBuild->mapEnd("mDFAGenReachingDefinitions"); 00067 sOutBuild->objEnd("DFAGenReachingDefinitionsStandard"); 00068 } 00069 00070 00071 00072 void DFAGenReachingDefinitionsStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir) 00073 { 00074 std::cout<< "======DFAGenReachingDefinitions===="<< std::endl; 00075 OA_ptr<LocIterator> locIterPtr; 00076 std::map<StmtHandle,OA_ptr<LocSet> > ::iterator mapIter; 00077 for (mapIter = mDFAGenReachingDefinitions.begin(); mapIter != mDFAGenReachingDefinitions.end(); mapIter++) { 00078 std::cout<< "\tstmt = " << ir->toString(mapIter->first) << std::endl; 00079 locIterPtr = getDFAGenReachingDefinitionsIterator(mapIter->first); 00080 for ( ; locIterPtr->isValid(); (*locIterPtr)++ ) { 00081 std::cout << "\t\t"; 00082 locIterPtr->current()->dump(std::cout,ir); 00083 std::cout << std::endl; 00084 } 00085 00086 } 00087 } 00088 00089 00090 00091 } // end of DFAGenReachingDefinitions namespace 00092 } // end of OA namespace
1.7.1