aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cgrep.cpp60
1 files changed, 36 insertions, 24 deletions
diff --git a/cgrep.cpp b/cgrep.cpp
index fbb2846..95d0af2 100644
--- a/cgrep.cpp
+++ b/cgrep.cpp
@@ -50,7 +50,7 @@ cl::opt<bool> CO_MEMVAR("memvar", cl::desc(""), cl::init(false), cl::cat(CGrepCa
cl::opt<bool> CO_CLASS("class", cl::desc(""), cl::init(false), cl::cat(CGrepCat), cl::Optional);
cl::opt<bool> CO_STRUCT("struct", cl::desc(""), cl::init(false), cl::cat(CGrepCat), cl::Optional);
cl::opt<bool> CO_SYSHDR("syshdr", cl::desc(""), cl::init(false), cl::cat(CGrepCat), cl::Optional);
-cl::opt<bool> CO_MAINFILE("mainfile", cl::desc(""), cl::init(false), cl::cat(CGrepCat), cl::Optional);
+cl::opt<bool> CO_MAINFILE("mainfile", cl::desc(""), cl::init(true), cl::cat(CGrepCat), cl::Optional);
}
/*************************************************************************************************/
#if 1
@@ -71,23 +71,27 @@ std::string regex_preprocessor(std::string rx_str) {
}
bool regex_handler(std::string rx_str, std::string identifier_name) {
- std::regex rx(regex_preprocessor(rx_str));
+ std::regex rx(rx_str);
std::smatch result;
return std::regex_search(identifier_name, result, rx);
}
/*************************************************************************************************/
-class CalledFunc : public MatchFinder::MatchCallback {
+class FunctionHandler : public MatchFinder::MatchCallback {
public:
- CalledFunc(Rewriter &Rewrite) : Rewrite(Rewrite) {}
+ FunctionHandler(Rewriter &Rewrite) : Rewrite(Rewrite) {}
virtual void run(const MatchFinder::MatchResult &MR) {
- std::cout << "hey\n";
const FunctionDecl *FD = MR.Nodes.getNodeAs<clang::FunctionDecl>("funcdecl");
if (FD) {
SourceRange SR = FD->getSourceRange();
+ SourceLocation SL = SR.getBegin();
+ CheckSLValidity(SL);
+ SL = Devi::SourceLocationHasMacro(SL, Rewrite, "start");
+ if (Devi::IsTheMatchInSysHeader(CO_SYSHDR, MR, SL)) return void();
+ if (!Devi::IsTheMatchInMainFile(CO_MAINFILE, MR, SL)) return void();
std::string name = FD->getNameAsString();
- std::cout << name << "\n";
if (regex_handler(REGEX_PP(CO_REGEX), name)) {
+ std::cout << name << "\t";
std::cout << SR.getBegin().printToString(*MR.SourceManager) << "\t";
std::cout << SR.getEnd().printToString(*MR.SourceManager) << "\n";
}
@@ -98,21 +102,11 @@ private:
Rewriter &Rewrite [[maybe_unused]];
};
/*************************************************************************************************/
-class CalledVar : public MatchFinder::MatchCallback {
+class VarHandler : public MatchFinder::MatchCallback {
public:
- CalledVar(Rewriter &Rewrite) : Rewrite(Rewrite) {}
+ VarHandler(Rewriter &Rewrite) : Rewrite(Rewrite) {}
virtual void run(const MatchFinder::MatchResult &MR) {
- const VarDecl *VD = MR.Nodes.getNodeAs<clang::VarDecl>("vardecl");
- if (VD) {
- SourceRange SR = VD->getSourceRange();
- std::string name = VD->getNameAsString();
- std::cout << name << "\n";
- if (regex_handler(REGEX_PP(CO_REGEX), name)) {
- std::cout << SR.getBegin().printToString(*MR.SourceManager) << "\t";
- std::cout << SR.getEnd().printToString(*MR.SourceManager) << "\n";
- }
- }
}
private:
@@ -133,7 +127,23 @@ class VDecl : public MatchFinder::MatchCallback {
public:
VDecl(Rewriter &Rewrite) : Rewrite(Rewrite) {}
- virtual void run(const MatchFinder::MatchResult &MR) {}
+ virtual void run(const MatchFinder::MatchResult &MR) {
+ const VarDecl *VD = MR.Nodes.getNodeAs<clang::VarDecl>("vardecl");
+ if (VD) {
+ SourceRange SR = VD->getSourceRange();
+ SourceLocation SL = SR.getBegin();
+ CheckSLValidity(SL);
+ SL = Devi::SourceLocationHasMacro(SL, Rewrite, "start");
+ if (Devi::IsTheMatchInSysHeader(CO_SYSHDR, MR, SL)) return void();
+ if (!Devi::IsTheMatchInMainFile(CO_MAINFILE, MR, SL)) return void();
+ std::string name = VD->getNameAsString();
+ if (regex_handler(REGEX_PP(CO_REGEX), name)) {
+ std::cout << name << "\t";
+ std::cout << SR.getBegin().printToString(*MR.SourceManager) << "\t";
+ std::cout << SR.getEnd().printToString(*MR.SourceManager) << "\n";
+ }
+ }
+ }
private:
Rewriter &Rewrite [[maybe_unused]];
@@ -200,7 +210,7 @@ public:
HandlerForCalledFunc(R), HandlerForCalledVar(R) {
#if 1
if (CO_FUNCTION) {
- Matcher.addMatcher(functionDecl().bind("funcdecl"), &funcDeclHandler);
+ Matcher.addMatcher(functionDecl().bind("funcdecl"), &HandlerForCalledFunc);
}
if (CO_VAR) {
Matcher.addMatcher(
@@ -213,7 +223,9 @@ public:
Matcher.addMatcher(recordDecl(isClass()).bind("classdecl"),
&HandlerForClass);
}
- Matcher.addMatcher(declRefExpr().bind("calledvar"), &HandlerForCalledVar);
+ if (CO_VAR) {
+ Matcher.addMatcher(declRefExpr().bind("calledvar"), &HandlerForCalledVar);
+ }
#endif
}
@@ -225,8 +237,8 @@ private:
FuncDecl funcDeclHandler;
VDecl HandlerForVar;
ClassDecl HandlerForClass;
- CalledFunc HandlerForCalledFunc;
- CalledVar HandlerForCalledVar;
+ FunctionHandler HandlerForCalledFunc;
+ VarHandler HandlerForCalledVar;
MatchFinder Matcher;
};
/*************************************************************************************************/
@@ -237,7 +249,7 @@ public:
void EndSourceFileAction() override {
std::error_code EC;
- TheRewriter.getEditBuffer(TheRewriter.getSourceMgr().getMainFileID()).write(llvm::outs());
+ //TheRewriter.getEditBuffer(TheRewriter.getSourceMgr().getMainFileID()).write(llvm::outs());
}
std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,