20#include "llvm/Support/raw_ostream.h"
31 :
public Checker<check::BeginFunction, check::EndFunction> {
33 void checkBeginFunction(CheckerContext &
C)
const;
34 void checkEndFunction(
const ReturnStmt *RS, CheckerContext &
C)
const;
39 llvm::outs() <<
"--BEGIN FUNCTION--\n";
42void TraversalDumper::checkEndFunction(
const ReturnStmt *RS,
43 CheckerContext &
C)
const {
44 llvm::outs() <<
"--END FUNCTION--\n";
47void ento::registerTraversalDumper(CheckerManager &mgr) {
51bool ento::shouldRegisterTraversalDumper(
const CheckerManager &mgr) {
61class CallDumper :
public Checker< check::PreCall,
64 void checkPreCall(
const CallEvent &
Call, CheckerContext &
C)
const;
65 void checkPostCall(
const CallEvent &
Call, CheckerContext &
C)
const;
69void CallDumper::checkPreCall(
const CallEvent &
Call, CheckerContext &
C)
const {
70 auto Parents =
C.getStackFrame()->parents();
71 unsigned Indentation = std::distance(Parents.begin(), Parents.end());
76 llvm::outs().indent(Indentation);
77 Call.dump(llvm::outs());
80void CallDumper::checkPostCall(
const CallEvent &
Call, CheckerContext &
C)
const {
81 const Expr *CallE =
Call.getOriginExpr();
85 auto Parents =
C.getStackFrame()->parents();
86 unsigned Indentation = std::distance(Parents.begin(), Parents.end());
91 llvm::outs().indent(Indentation);
92 if (
Call.getResultType()->isVoidType())
93 llvm::outs() <<
"Returning void\n";
95 llvm::outs() <<
"Returning " <<
C.getSVal(CallE) <<
"\n";
98void ento::registerCallDumper(CheckerManager &mgr) {
102bool ento::shouldRegisterCallDumper(
const CheckerManager &mgr) {
Defines the Objective-C statement AST node classes.
CHECKER * registerChecker(AT &&...Args)
Register a single-part checker (derived from Checker): construct its singleton instance,...
Simple checker classes that implement one frontend (i.e.
The JSON file list parser is used to communicate input to InstallAPI.