return Eng.isObjCGCEnabled();
}
+ /// \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,
return N;
}
- ExplodedNode *generateNode(const Stmt *stmt,
- const ProgramState *state,
- bool autoTransition = true,
- const ProgramPointTag *tag = 0) {
- assert(state);
- ExplodedNode *N = generateNodeImpl(stmt, state, false,
- tag ? tag : checkerTag);
- if (N && autoTransition)
- addTransition(N);
- return N;
- }
-
+ /// \brief Generate a new checker node with the given predecessor.
+ /// Allows checkers to generate a chain of nodes.
ExplodedNode *generateNode(const ProgramState *state,
ExplodedNode *pred,
bool autoTransition = true) {
return N;
}
+ /// \brief Generate a new checker node.
ExplodedNode *generateNode(const ProgramState *state,
bool autoTransition = true,
const ProgramPointTag *tag = 0) {
return N;
}
- ExplodedNode *generateSink(const Stmt *stmt, const ProgramState *state = 0) {
- return generateNodeImpl(stmt, state ? state : getState(), true,
- checkerTag);
- }
-
+ /// \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,