forked from OSchip/llvm-project
Added "Auditor" interface for auditing the construction of ExplodedGraphs.
llvm-svn: 55403
This commit is contained in:
parent
6f7c419308
commit
912c28444f
|
@ -124,6 +124,18 @@ public:
|
|||
|
||||
bool isSink() const { return Succs.getFlag(); }
|
||||
void markAsSink() { Succs.setFlag(); }
|
||||
|
||||
// For debugging.
|
||||
|
||||
public:
|
||||
|
||||
class Auditor {
|
||||
public:
|
||||
virtual ~Auditor();
|
||||
virtual void AddEdge(ExplodedNodeImpl* Src, ExplodedNodeImpl* Dst) = 0;
|
||||
};
|
||||
|
||||
static void SetAuditor(Auditor* A);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,26 @@
|
|||
|
||||
using namespace clang;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Node auditing.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// An out of line virtual method to provide a home for the class vtable.
|
||||
ExplodedNodeImpl::Auditor::~Auditor() {}
|
||||
|
||||
#ifndef NDEBUG
|
||||
static ExplodedNodeImpl::Auditor* NodeAuditor = 0;
|
||||
#endif
|
||||
|
||||
void ExplodedNodeImpl::SetAuditor(ExplodedNodeImpl::Auditor* A) {
|
||||
#ifndef NDEBUG
|
||||
NodeAuditor = A;
|
||||
#endif
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExplodedNodeImpl.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static inline std::vector<ExplodedNodeImpl*>& getVector(void* P) {
|
||||
return *reinterpret_cast<std::vector<ExplodedNodeImpl*>*>(P);
|
||||
|
@ -31,6 +51,9 @@ void ExplodedNodeImpl::addPredecessor(ExplodedNodeImpl* V) {
|
|||
assert (!V->isSink());
|
||||
Preds.addNode(V);
|
||||
V->Succs.addNode(this);
|
||||
#ifndef NDEBUG
|
||||
if (NodeAuditor) NodeAuditor->AddEdge(V, this);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ExplodedNodeImpl::NodeGroup::addNode(ExplodedNodeImpl* N) {
|
||||
|
|
Loading…
Reference in New Issue