forked from OSchip/llvm-project
[analyzer] Refactor node generation to use less code.
llvm-svn: 141133
This commit is contained in:
parent
7ba069074a
commit
1cc7655794
|
@ -114,12 +114,7 @@ public:
|
|||
/// \brief Generate a default checker node (containing checker tag but no
|
||||
/// checker state changes).
|
||||
ExplodedNode *generateNode(bool autoTransition = true) {
|
||||
assert(statement && "Only transitions with statements currently supported");
|
||||
ExplodedNode *N = generateNodeImpl(statement, getState(), false,
|
||||
checkerTag);
|
||||
if (N && autoTransition)
|
||||
Dst.Add(N);
|
||||
return N;
|
||||
return generateNode(getState(), autoTransition);
|
||||
}
|
||||
|
||||
/// \brief Generate a new checker node with the given predecessor.
|
||||
|
@ -127,8 +122,7 @@ public:
|
|||
ExplodedNode *generateNode(const ProgramState *state,
|
||||
ExplodedNode *pred,
|
||||
bool autoTransition = true) {
|
||||
assert(statement && "Only transitions with statements currently supported");
|
||||
ExplodedNode *N = generateNodeImpl(statement, state, pred, false);
|
||||
ExplodedNode *N = generateNodeImpl(state, false, pred);
|
||||
if (N && autoTransition)
|
||||
addTransition(N);
|
||||
return N;
|
||||
|
@ -138,9 +132,7 @@ public:
|
|||
ExplodedNode *generateNode(const ProgramState *state,
|
||||
bool autoTransition = true,
|
||||
const ProgramPointTag *tag = 0) {
|
||||
assert(statement && "Only transitions with statements currently supported");
|
||||
ExplodedNode *N = generateNodeImpl(statement, state, false,
|
||||
tag ? tag : checkerTag);
|
||||
ExplodedNode *N = generateNodeImpl(state, false, 0, tag);
|
||||
if (N && autoTransition)
|
||||
addTransition(N);
|
||||
return N;
|
||||
|
@ -149,9 +141,7 @@ public:
|
|||
/// \brief Generate a sink node. Generating sink stops exploration of the
|
||||
/// given path.
|
||||
ExplodedNode *generateSink(const ProgramState *state = 0) {
|
||||
assert(statement && "Only transitions with statements currently supported");
|
||||
return generateNodeImpl(statement, state ? state : getState(), true,
|
||||
checkerTag);
|
||||
return generateNodeImpl(state ? state : getState(), true);
|
||||
}
|
||||
|
||||
void addTransition(ExplodedNode *node) {
|
||||
|
@ -179,21 +169,14 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
ExplodedNode *generateNodeImpl(const Stmt *stmt,
|
||||
const ProgramState *state,
|
||||
ExplodedNode *generateNodeImpl(const ProgramState *state,
|
||||
bool markAsSink,
|
||||
const ProgramPointTag *tag) {
|
||||
ExplodedNode *node = B.generateNode(stmt, state, Pred, tag);
|
||||
if (markAsSink && node)
|
||||
node->markAsSink();
|
||||
return node;
|
||||
}
|
||||
|
||||
ExplodedNode *generateNodeImpl(const Stmt *stmt,
|
||||
const ProgramState *state,
|
||||
ExplodedNode *pred,
|
||||
bool markAsSink) {
|
||||
ExplodedNode *node = B.generateNode(stmt, state, pred, checkerTag);
|
||||
ExplodedNode *pred = 0,
|
||||
const ProgramPointTag *tag = 0) {
|
||||
assert(statement && "Only transitions with statements currently supported");
|
||||
ExplodedNode *node = B.generateNode(statement, state,
|
||||
pred ? pred : Pred,
|
||||
tag ? tag : checkerTag);
|
||||
if (markAsSink && node)
|
||||
node->markAsSink();
|
||||
return node;
|
||||
|
|
Loading…
Reference in New Issue