diff options
Diffstat (limited to 'bruiser')
| -rw-r--r-- | bruiser/bruiser.cpp | 66 | 
1 files changed, 59 insertions, 7 deletions
| diff --git a/bruiser/bruiser.cpp b/bruiser/bruiser.cpp index dcc5eec..ecde8a0 100644 --- a/bruiser/bruiser.cpp +++ b/bruiser/bruiser.cpp @@ -293,9 +293,9 @@ class LiveListFuncs : public MatchFinder::MatchCallback            Stmt* Body = FD->getBody();            SourceLocation SLBody = Body->getLocStart();            SourceLocation SLShebang = FD->getLocStart(); -          PRINT_WITH_COLOR_LB(GREEN, "begin"); +          //PRINT_WITH_COLOR_LB(GREEN, "begin");            PRINT_WITH_COLOR_LB(CYAN, R.getRewrittenText(clang::SourceRange(SLShebang, SLBody.getLocWithOffset(-1)))); -          PRINT_WITH_COLOR_LB(GREEN, "end"); +          //PRINT_WITH_COLOR_LB(GREEN, "end");          }          else          { @@ -340,7 +340,7 @@ class LiveListRecords : public MatchFinder::MatchCallback        {          const clang::RecordDecl* RD = MR.Nodes.getNodeAs<clang::RecordDecl>("livelistvars"); -        PRINT_WITH_COLOR_LB(CYAN, RD->getNameAsString()); +        PRINT_WITH_COLOR_LB(CYAN, R.getRewrittenText(SourceRange(RD->getLocStart(), RD->getLocEnd())));        }      } @@ -504,6 +504,27 @@ class LiveListUnionConsumer : public ASTConsumer      Rewriter R;  };  /**********************************************************************************************************************/ +class LiveListArrayConsumer : public ASTConsumer +{ +  public: +    LiveListArrayConsumer(Rewriter &R) : HLLVars(R) +    {} + +    void HandleTranslationUnit(ASTContext &ctx) override +    { +      Matcher.addMatcher(varDecl(hasType(arrayType())).bind("livelistvars"), &HLLVars); + +      Matcher.matchAST(ctx); +    } + +  private: +    MatchFinder Matcher; +    LiveListVars HLLVars; +    Rewriter R; +}; +/**********************************************************************************************************************/ +/**********************************************************************************************************************/ +/**********************************************************************************************************************/  /**********************************************************************************************************************/  class BlankDiagConsumer : public clang::DiagnosticConsumer  { @@ -632,6 +653,25 @@ class LiveActionListUnions : public ASTFrontendAction      Rewriter TheRewriter;  };  /**********************************************************************************************************************/ +class LiveActionListArrays : public ASTFrontendAction +{ +  public: +    LiveActionListArrays() {} + +    void EndSourceFileAction() override {} + +    std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, StringRef file) override +    { +      DiagnosticsEngine &DE = CI.getPreprocessor().getDiagnostics(); +      BlankDiagConsumer* BDCProto = new BlankDiagConsumer; +      DE.setClient(BDCProto); +      TheRewriter.setSourceMgr(CI.getSourceManager(), CI.getLangOpts()); +      return llvm::make_unique<LiveListArrayConsumer>(TheRewriter); +    } + +  private: +    Rewriter TheRewriter; +};  /**********************************************************************************************************************/  /**********************************************************************************************************************/  /*Main*/ @@ -640,7 +680,8 @@ int main(int argc, const char **argv)    int RunResult;    bruiser::ShellHistory shHistory;    int InKey; -  WINDOW *win; +  //unsigned int xcurse; +  //unsigned int ycurse;    std::regex listcommand("^list\\s");    std::regex listfuncs("^list\\sfuncs$"); @@ -653,8 +694,10 @@ int main(int argc, const char **argv)    std::regex dumplist("^list\\sdump\\s");    std::smatch smresult; +  WINDOW *win [[maybe_unused]]; +  //win = newwin(0, 0, 1, 1);    //initscr(); -  cbreak(); +  nocbreak();    CommonOptionsParser op(argc, argv, BruiserCategory);    ClangTool Tool(op.getCompilations(), op.getSourcePathList()); @@ -663,6 +706,8 @@ int main(int argc, const char **argv)      char command[130];      while(true)      { +      //wprintw(win, ">>"); +      //wrefresh(win);        std::cout << ">>";        InKey = getch();        std::cin.getline(command, sizeof(command)); @@ -713,7 +758,7 @@ int main(int argc, const char **argv)          if (std::regex_search(dummy_string, smresult, listarrays))          { -          NOT_IMPLEMENTED; +          RunResult = Tool.run(newFrontendActionFactory<LiveActionListArrays>().get());            continue;          } @@ -723,6 +768,12 @@ int main(int argc, const char **argv)            continue;          } +        if (std::regex_search(dummy_string, smresult, liststructs)) +        { +          RunResult = Tool.run(newFrontendActionFactory<LiveActionListStructs>().get()); +          continue; +        } +          if (std::regex_search(dummy_string, smresult, listunions))          {            RunResult = Tool.run(newFrontendActionFactory<LiveActionListUnions>().get()); @@ -847,7 +898,8 @@ int main(int argc, const char **argv)        std::cout << RED << "unknown command. run help.\n" << NORMAL;      }    } - +   +  //delwin(win);    //endwin();  }  /*last line intentionally left blank.*/ | 
