From: Argyrios Kyrtzidis Date: Sat, 2 Apr 2011 19:37:26 +0000 (+0000) Subject: [analyzer] Simplify CheckerFn template and use it more to reduce duplication. No... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4d840e9ac4d8e9baa9459ca3dd7ab14ae884a80f;p=clang [analyzer] Simplify CheckerFn template and use it more to reduce duplication. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128779 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/StaticAnalyzer/Core/CheckerManager.h b/include/clang/StaticAnalyzer/Core/CheckerManager.h index 3e3c683b97..92ec0388e5 100644 --- a/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ b/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -47,47 +47,46 @@ public: virtual void expandGraph(ExplodedNodeSet &Dst, ExplodedNode *Pred) = 0; }; -struct VoidCheckerFnParm {}; -template -class CheckerFn { - typedef void (*Func)(void *, P1, P2, P3, P4); +template class CheckerFn; + +template +class CheckerFn { + typedef RET (*Func)(void *, P1, P2, P3); Func Fn; public: void *Checker; CheckerFn(void *checker, Func fn) : Fn(fn), Checker(checker) { } - void operator()(P1 p1, P2 p2, P3 p3, P4 p4) { Fn(Checker, p1, p2, p3, p4); } + RET operator()(P1 p1, P2 p2, P3 p3) const { return Fn(Checker, p1, p2, p3); } }; -template -class CheckerFn { - typedef void (*Func)(void *, P1, P2, P3); +template +class CheckerFn { + typedef RET (*Func)(void *, P1, P2); Func Fn; public: void *Checker; CheckerFn(void *checker, Func fn) : Fn(fn), Checker(checker) { } - void operator()(P1 p1, P2 p2, P3 p3) { Fn(Checker, p1, p2, p3); } + RET operator()(P1 p1, P2 p2) const { return Fn(Checker, p1, p2); } }; -template -class CheckerFn { - typedef void (*Func)(void *, P1, P2); +template +class CheckerFn { + typedef RET (*Func)(void *, P1); Func Fn; public: void *Checker; CheckerFn(void *checker, Func fn) : Fn(fn), Checker(checker) { } - void operator()(P1 p1, P2 p2) { Fn(Checker, p1, p2); } + RET operator()(P1 p1) const { return Fn(Checker, p1); } }; -template <> -class CheckerFn { - typedef void (*Func)(void *); +template +class CheckerFn { + typedef RET (*Func)(void *); Func Fn; public: void *Checker; CheckerFn(void *checker, Func fn) : Fn(fn), Checker(checker) { } - void operator()() { Fn(Checker); } + RET operator()() const { return Fn(Checker); } }; class CheckerManager { @@ -105,7 +104,7 @@ public: typedef void *CheckerRef; typedef void *CheckerTag; - typedef CheckerFn<> CheckerDtor; + typedef CheckerFn CheckerDtor; //===----------------------------------------------------------------------===// // registerChecker @@ -246,7 +245,7 @@ public: // Functions used by the registration mechanism, checkers should not touch // these directly. - typedef CheckerFn + typedef CheckerFn CheckDeclFunc; typedef bool (*HandlesDeclFunc)(const Decl *D); @@ -258,19 +257,44 @@ public: // Internal registration functions for path-sensitive checking. //===----------------------------------------------------------------------===// - typedef CheckerFn CheckStmtFunc; - typedef CheckerFn CheckObjCMessageFunc; - typedef CheckerFn + typedef CheckerFn CheckStmtFunc; + + typedef CheckerFn + CheckObjCMessageFunc; + + typedef CheckerFn CheckLocationFunc; - typedef CheckerFn CheckBindFunc; - typedef CheckerFn + + typedef CheckerFn CheckBindFunc; + + typedef CheckerFn CheckEndAnalysisFunc; - typedef CheckerFn CheckEndPathFunc; - typedef CheckerFn + + typedef CheckerFn + CheckEndPathFunc; + + typedef CheckerFn CheckBranchConditionFunc; - typedef CheckerFn CheckDeadSymbolsFunc; - typedef CheckerFn CheckLiveSymbolsFunc; + + typedef CheckerFn + CheckDeadSymbolsFunc; + + typedef CheckerFn CheckLiveSymbolsFunc; + + typedef CheckerFn + CheckRegionChangesFunc; + + typedef CheckerFn WantsRegionChangeUpdateFunc; + + typedef CheckerFn + EvalAssumeFunc; + + typedef CheckerFn + EvalCallFunc; typedef bool (*HandlesStmtFunc)(const Stmt *D); void _registerForPreStmt(CheckStmtFunc checkfn, @@ -295,62 +319,11 @@ public: void _registerForDeadSymbols(CheckDeadSymbolsFunc checkfn); - class CheckRegionChangesFunc { - typedef const GRState * (*Func)(void *, const GRState *, - const MemRegion * const *, - const MemRegion * const *); - Func Fn; - public: - void *Checker; - CheckRegionChangesFunc(void *checker, Func fn) : Fn(fn), Checker(checker) {} - const GRState *operator()(const GRState *state, - const MemRegion * const *begin, - const MemRegion * const *end) { - return Fn(Checker, state, begin, end); - } - }; - - class WantsRegionChangeUpdateFunc { - typedef bool (*Func)(void *, const GRState *); - Func Fn; - public: - void *Checker; - WantsRegionChangeUpdateFunc(void *checker, Func fn) - : Fn(fn), Checker(checker) { } - bool operator()(const GRState *state) { - return Fn(Checker, state); - } - }; - void _registerForRegionChanges(CheckRegionChangesFunc checkfn, WantsRegionChangeUpdateFunc wantUpdateFn); - class EvalAssumeFunc { - typedef const GRState * (*Func)(void *, const GRState *, - const SVal &/*cond*/, bool /*assumption*/); - Func Fn; - public: - void *Checker; - EvalAssumeFunc(void *checker, Func fn) : Fn(fn), Checker(checker) {} - const GRState *operator()(const GRState *state, - const SVal &cond, bool assumption) { - return Fn(Checker, state, cond, assumption); - } - }; - void _registerForEvalAssume(EvalAssumeFunc checkfn); - class EvalCallFunc { - typedef bool (*Func)(void *, const CallExpr *, CheckerContext &); - Func Fn; - public: - void *Checker; - EvalCallFunc(void *checker, Func fn) : Fn(fn), Checker(checker) { } - bool operator()(const CallExpr *CE, CheckerContext &C) { - return Fn(Checker, CE, C); - } - }; - void _registerForEvalCall(EvalCallFunc checkfn); //===----------------------------------------------------------------------===// @@ -358,18 +331,7 @@ public: //===----------------------------------------------------------------------===// typedef void *EventTag; - - class CheckEventFunc { - typedef void (*Func)(void *, const void *); - Func Fn; - public: - void *Checker; - CheckEventFunc(void *checker, Func fn) - : Fn(fn), Checker(checker) { } - void operator()(const void *event) const { - return Fn(Checker, event); - } - }; + typedef CheckerFn CheckEventFunc; template void _registerListenerForEvent(CheckEventFunc checkfn) {