aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2009-08-03 02:52:14 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2009-08-03 02:52:14 +0000
commit2e3124486f343d770a2a5c2b7e78268bfc328a58 (patch)
treed20ccd5061a1f78ef02a2b426d50561e96c17fa6
parent2bbcf669742b6b27748414e22f8042236fceef65 (diff)
Add LocationContext classes to enable creation of cross function
ProgramPoints. ProgramPoints will refer to them in the furture. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77941 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Analysis/PathSensitive/AnalysisContext.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/clang/Analysis/PathSensitive/AnalysisContext.h b/include/clang/Analysis/PathSensitive/AnalysisContext.h
index 2d3f15933c..13331fa000 100644
--- a/include/clang/Analysis/PathSensitive/AnalysisContext.h
+++ b/include/clang/Analysis/PathSensitive/AnalysisContext.h
@@ -16,6 +16,7 @@
#define LLVM_CLANG_ANALYSIS_ANALYSISCONTEXT_H
#include "llvm/ADT/OwningPtr.h"
+#include "llvm/ADT/FoldingSet.h"
#include <map>
namespace clang {
@@ -58,6 +59,40 @@ public:
AnalysisContext *getContext(Decl *D);
};
+class LocationContext : public llvm::FoldingSetNode {
+public:
+ enum ContextKind { StackFrame, Scope };
+
+private:
+ ContextKind Kind;
+ LocationContext *Parent;
+ AnalysisContext *Ctx;
+
+protected:
+ LocationContext(ContextKind k, LocationContext *parent, AnalysisContext *ctx)
+ : Kind(k), Parent(parent), Ctx(ctx) {}
+};
+
+class StackFrameContext : public LocationContext {
+ Stmt *CallSite;
+
+public:
+ StackFrameContext(Stmt *s, LocationContext *parent, AnalysisContext *ctx)
+ : LocationContext(StackFrame, parent, ctx), CallSite(s) {}
+};
+
+class ScopeContext : public LocationContext {
+ Stmt *Enter;
+
+public:
+ ScopeContext(Stmt *s, LocationContext *parent, AnalysisContext *ctx)
+ : LocationContext(Scope, parent, ctx), Enter(s) {}
+};
+
+class LocationContextManager {
+ llvm::FoldingSet<LocationContext> Contexts;
+};
+
}
#endif