00001 00016 #ifndef CalleeToCallerVisitor_H 00017 #define CalleeToCallerVisitor_H 00018 00019 #include <OpenAnalysis/Location/LocationVisitor.hpp> 00020 #include <OpenAnalysis/DataFlow/ParamBindings.hpp> 00021 #include <OpenAnalysis/Alias/InterAliasInterface.hpp> 00022 #include <OpenAnalysis/IRInterface/InterSideEffectIRInterface.hpp> 00023 #include <OpenAnalysis/MemRefExpr/MemRefExprVisitor.hpp> 00024 #include <OpenAnalysis/IRInterface/ParamBindingsIRInterface.hpp> 00025 #include <stack> 00026 #include <OpenAnalysis/IRInterface/CalleeToCallerVisitorIRInterface.hpp> 00027 00028 namespace OA { 00029 00030 namespace DataFlow { 00031 //-------------------------------------------------------------------- 00034 class CalleeToCallerVisitor : public virtual LocationVisitor { 00035 public: 00038 OA_ptr<LocIterator> getCallerLocIterator(); 00039 00040 CalleeToCallerVisitor(ProcHandle callee, 00041 CallHandle call, ProcHandle caller, 00042 OA_ptr<Alias::InterAliasInterface> interAlias, 00043 OA_ptr<DataFlow::ParamBindings> paramBind, 00044 OA_ptr<CalleeToCallerVisitorIRInterface> _ir); 00045 00046 00047 ~CalleeToCallerVisitor() {} 00048 00049 void visitNamedLoc(NamedLoc& otherLoc); 00050 00051 void visitUnnamedLoc(UnnamedLoc& loc); 00052 00053 void visitInvisibleLoc(InvisibleLoc& loc); 00054 00055 void visitUnknownLoc(UnknownLoc& loc); 00056 00057 void visitLocSubSet(LocSubSet& loc); 00058 00059 private: 00060 CallHandle mCall; 00061 ProcHandle mCaller; 00062 ProcHandle mCallee; 00063 OA_ptr<Alias::InterAliasInterface> mInterAlias; 00064 OA_ptr<DataFlow::ParamBindings> mParamBind; 00065 OA_ptr<Alias::Interface> mCallerAlias; 00066 OA_ptr<LocSet> mLocSet; 00067 OA_ptr<CalleeToCallerVisitorIRInterface> mIR; 00068 00069 }; 00070 } // end of DataFlow namespace 00071 } // end of OA namespace 00072 00073 #endif
1.6.1