00001 00015 #ifndef InvisibleLoc_H 00016 #define InvisibleLoc_H 00017 00018 #include "Location.hpp" 00019 #include <OpenAnalysis/MemRefExpr/MemRefExpr.hpp> 00020 #include <OpenAnalysis/MemRefExpr/MemRefExprVisitor.hpp> 00021 00022 namespace OA { 00023 00028 class InvisibleLoc : public Location { 00029 public: 00030 InvisibleLoc(OA_ptr<MemRefExpr> mre) : mMRE(mre) { } 00031 00033 InvisibleLoc(InvisibleLoc &other); 00034 00035 ~InvisibleLoc() { } 00036 00037 void acceptVisitor(LocationVisitor& pVisitor); 00038 00039 //***************************************************************** 00040 // Subclass type methods 00041 //***************************************************************** 00042 bool isaInvisible() { return true; } 00043 00044 //***************************************************************** 00045 // Info methods 00046 //***************************************************************** 00049 OA_ptr<Location> getBaseLoc(); 00050 00051 bool isLocal() { return false; } 00052 bool isUnique() { return false; } // actually unknown 00053 00054 /* PLM 1/23/07 deprecated hasFullAccuracy 00055 bool hasFullAccuracy() { return mMRE->hasFullAccuracy(); } 00056 */ 00057 00058 OA_ptr<MemRefExpr> getMemRefExpr() { return mMRE; } 00059 SymHandle getBaseSym(); 00060 00061 //***************************************************************** 00062 // Relationship methods 00063 //***************************************************************** 00064 bool operator<(Location & other); 00065 bool operator==(Location& other); 00066 00067 bool mayOverlap(Location& other); 00068 00069 bool mustOverlap(Location& other); 00070 00071 bool subSetOf(Location& other); 00072 00073 //***************************************************************** 00074 // Annotation Interface 00075 //***************************************************************** 00076 void output(IRHandlesIRInterface& ir); 00077 00078 //***************************************************************** 00079 // Debugging 00080 //***************************************************************** 00081 void dump(std::ostream& os); 00082 void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR); 00083 00084 std::string toString(OA_ptr<IRHandlesIRInterface> pIR); 00085 00086 virtual int getOrder() { return sOrder; } 00087 00088 private: 00089 OA_ptr<MemRefExpr> mMRE; 00090 00091 static const int sOrder = 300; 00092 }; 00093 00094 } // end namespace 00095 #endif
1.6.1